QVideoFilterRunnable::runメソッドから受信したフレームの形式はQVideoFrame::Format_NV12であるため、使用して GPU テクスチャにロードする前に、最初glTexImage
に変換する必要があります。BGRA
カメラの出力形式を変更する方法はありますか?
元の問題は次のとおりです。
QVideoFilterRunnable::runメソッドから受信したフレームの形式はQVideoFrame::Format_NV12であるため、使用して GPU テクスチャにロードする前に、最初glTexImage
に変換する必要があります。BGRA
カメラの出力形式を変更する方法はありますか?
元の問題は次のとおりです。
私は QML を使用しているので、これは QML オブジェクトを取得して C++ コードで使用するための手順です。純粋なC++のものは同じだと思います。
まず、QML ソースでカメラ オブジェクトを強調表示する必要があります。
Camera {
id: camera
objectName: "CameraObject"
}
QQuickView のルート オブジェクトを取得します。
QQuickView view;
QQuickItem* root = view.rootObject();
assert(root != nullptr);
QML カメラを取得します。
QObject* qmlCamera = root->findChild<QObject*>("CameraObject");
assert(qmlCamera != nullptr);
QML カメラ オブジェクトから C++ カメラを取得します。
QCamera* camera = qvariant_cast<QCamera*>(qmlCamera->property("mediaObject"));
assert(camera != nullptr);
必要なフォーマットを検索:
QCameraViewfinderSettings bestSetting;
assert(bestSetting.isNull()); // sanity check
auto viewfinderSettings = camera->supportedViewfinderSettings();
for (auto i: viewfinderSettings) {
if (i.pixelFormat() != QVideoFrame::Format_ARGB32) {
// skip non-ARGB formats
continue;
}
// check i.resolution()
// several settings with Format_ARGB32 will be available
// pick the one with resolution which fits best for you
bestSetting = i;
}
何かが見つかったことを確認し、設定を適用します。
assert(bestSetting.pixelFormat() == QVideoFrame::Format_ARGB32);
camera->setViewfinderSettings(bestSetting);
ビューを表示できるようになりました:
view.show();
return app.exec();