2015-12-10 1 views
0

Кадров, полученной от QVideoFilterRunnable::run метода имеет формат QVideoFrame::Format_NV12 поэтому перед загрузить его в текстуру GPU с помощью glTexImage мне нужно, чтобы преобразовать его в BGRA первого. Есть ли способ изменить выходной формат камеры?Qt IOS: Формат изменения полученных кадров с камеры

Вот исходная задача:

ответ

0

Поскольку я использую 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); 

Получить C++ камеру от объекта камеры QML:

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(); 

 Смежные вопросы

  • Нет связанных вопросов^_^