Mam program oparty na Qt5.4 z pewnym przetwarzaniem obrazu. Używam QCamera
z moją videoSurface
(pochodzącą z QAbstractVideoSurface
), aby uzyskać VideoFrames. Działa dobrze w systemie Windows.Qt QML Camera do C++ QImage na Androida
Ale teraz potrzebuję wersji Androida mojej aplikacji. Dowiedziałem się, że QCamera
nie działają na Androidzie. Ale widzę, że przykład QML Camera działa na Androidzie bez żadnych problemów.
Postanowiłem więc przerobić moją aplikację w QML. Główny problem: Nie mogę uzyskać dostępu do powierzchni kamery QML w 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();
}
Kod ten daje dostęp do właściwości. Ale nie mogę uzyskać dostępu do videoSurface w ten sposób (używając QCamera
mogę to zrobić). Zastanawiam się, jak działa QML Camera? Czy jest oparty na QCamera
? Widzę QCamera *m_camera
w QDeclarativeCamera
...
Więc mam 2 pytania:
- jest to możliwe do wykorzystania QML aparatu do postprocesu obrazów w C++? Przykład roboczy byłby bardzo cenny.
- Czy znasz inne sposoby przechwytywania wideo z aparatu Android w Qt?
Używanie '' QAbstractVideoFilter' z klas QVideoFilterRunnable' działa świetnie. Chciałbym podkreślić obsługę kodu OpenGL GLTextureHandle pokazaną w http://code.qt.io/cgit/qt/qtmultimedia.git/tree/examples/multimedia/video/qmlvideofilter_opencl/rgbframehelper.h –
@WaldezJunior Pierwsze rozwiązanie nie działa na Qt5.9.1, setSource zawsze zwraca false – StereoMatching