У меня есть программа на основе Qt5.4 с некоторой обработкой изображений. Я использую QCamera
с моим videoSurface
(производным от QAbstractVideoSurface
), чтобы получить VideoFrames. Это хорошо работает в Windows.Qt QML Camera to C++ QImage на Android
Но теперь мне нужна версия Android для Android. Я узнал, что QCamera
не работают на Android. Но я вижу, что пример камеры QML работает на Android без проблем.
Итак, я решил переписать свое приложение в QML. Основная проблема: я не могу получить доступ к поверхности QML-камеры на C++.
void myVideoOutput::setSource(QObject *source)
{
qDebug() << Q_FUNC_INFO << source;
if (source == m_source.data())
return;
m_source = source;
if (m_source) {
const QMetaObject *metaObject = m_source.data()->metaObject();
QStringList properties;
for(int i = metaObject->propertyOffset(); i <metaObject>propertyCount(); ++i)
properties << QString::fromLatin1(metaObject->property(i).name());
qDebug() << properties;
}
.....
emit sourceChanged();
}
Этот код предоставляет доступ к объектам недвижимости. Но я не могу получить доступ к видеоповерхности таким образом (с помощью QCamera
я мог бы это сделать). Интересно, как работает камера QML? Он основан на QCamera
? Я вижу в QDeclarativeCamera
QCamera *m_camera
...
Так что у меня 2 вопроса:
- Можно ли использовать QML камеры для постобработки изображений в C++? Рабочий пример был бы очень ценным.
- Знаете ли вы другие способы захвата видео с камеры Android в Qt?
Использование '' QAbstractVideoFilter' с классами QVideoFilterRunnable' отлично работает. Я хотел бы выделить OpenGL-код для обработки GLTextureHandle, показанный на http://code.qt.io/cgit/qt/qtmultimedia.git/tree/examples/multimedia/video/qmlvideofilter_opencl/rgbframehelper.h –
@WaldezJunior Первое решение не работайте над Qt5.9.1, setSource всегда возвращает false – StereoMatching