Unsolved After convertion QVideoFrame to QImage, the QImage is zoomed and streched
-
@GrecKo: Pixel format of the QVideoFrame is QVideoFrame::Format_YUYV (21). But this is not available when I am creating my QImage. Which pixel format do I have to use instead of QImage::Format_Indexed8?
-
-
Hi,
To add to @GrecKo, YUYV is not directly mappable to an indexed image format.
What exactly are you trying to achieve ?
-
-
YUV is a color space as is RGB, YUYV is one of the many possible ways to store YUV data like you have RGB, BGR, etc.
-
@SGaist: I want to detect barcodes. Therefore I use ZBar and QZXing.
For both I need a data of a QImage. That is the reason why I have to convert the QVideoFrame to QImage. -
@SGaist: But what could be the explanation that everything was fine on Raspberry Pi 3 with Raspbian Stretch and now I have problems on Raspberry Pi 4 with Raspbian Buster?
-
@Melle_87 said in After convertion QVideoFrame to QImage, the QImage is zoomed and streched:
@SGaist: But what could be the explanation that everything was fine on Raspberry Pi 3 with Raspbian Stretch and now I have problems on Raspberry Pi 4 with Raspbian Buster?
My guess is that the Pi 3 was providing frames in a different format.
-
@Melle_87 said in After convertion QVideoFrame to QImage, the QImage is zoomed and streched:
@SGaist: I want to detect barcodes. Therefore I use ZBar and QZXing.
For both I need a data of a QImage. That is the reason why I have to convert the QVideoFrame to QImage.QZXing is supposed to handle YUYV fine in its video filters : https://github.com/ftylitak/qzxing/blob/master/src/QZXingFilter.cpp#L325
-
@GrecKo: Thank for the link. I tried to register QZXingFilter in main.cpp:
qmlRegisterType<QZXingFilter>("MY.QZXingFilter", 1, 0, "MyQZXingFilter");
Then I importet it in my qml file, instatiated it and assigned to my VideoOutput:
import MY.QZXingFilter 1.0 MyQZXingFilter { id: myBarcodeFilter } My_Camera { id: camera } VideoOutput { id: vid source: camera filters: [ myBarcodeFilter ] }
But now I get some errors.
/opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o: in function `int qmlRegisterType<QZXingFilter>(char const*, int, int, char const*)': /home/m/Builds/build_PY-Raspi_Buster-Debug/../../../x/workspace/gateway-setup/qt-for-raspi4-root-buster-pi3-vc4-tc5/qt5pi/include/QtQml/qqml.h:311: undefined reference to `QZXingFilter::staticMetaObject' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o: in function `QQmlPrivate::QQmlElement<QZXingFilter>::QQmlElement()': /home/m/Builds/build_PY-Raspi_Buster-Debug/../../../x/workspace/gateway-setup/qt-for-raspi4-root-buster-pi3-vc4-tc5/qt5pi/include/QtQml/qqmlprivate.h:103: undefined reference to `QZXingFilter::QZXingFilter(QObject*)' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o: in function `QtPrivate::MetaObjectForType<QZXingFilter*, void>::value()': /home/m/Builds/build_PY-Raspi_Buster-Debug/../../../x/workspace/gateway-setup/qt-for-raspi4-root-buster-pi3-vc4-tc5/qt5pi/include/QtCore/qmetatype.h:1476: undefined reference to `QZXingFilter::staticMetaObject' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o: in function `QMetaTypeIdQObject<QZXingFilter*, 8>::qt_metatype_id()': /home/m/Builds/build_PY-Raspi_Buster-Debug/../../../x/workspace/gateway-setup/qt-for-raspi4-root-buster-pi3-vc4-tc5/qt5pi/include/QtCore/qmetatype.h:1841: undefined reference to `QZXingFilter::staticMetaObject' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o:(.data.rel.ro._ZTVN11QQmlPrivate11QQmlElementI12QZXingFilterEE[_ZTVN11QQmlPrivate11QQmlElementI12QZXingFilterEE]+0x8): undefined reference to `QZXingFilter::metaObject() const' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o:(.data.rel.ro._ZTVN11QQmlPrivate11QQmlElementI12QZXingFilterEE[_ZTVN11QQmlPrivate11QQmlElementI12QZXingFilterEE]+0xc): undefined reference to `QZXingFilter::qt_metacast(char const*)' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o:(.data.rel.ro._ZTVN11QQmlPrivate11QQmlElementI12QZXingFilterEE[_ZTVN11QQmlPrivate11QQmlElementI12QZXingFilterEE]+0x10): undefined reference to `QZXingFilter::qt_metacall(QMetaObject::Call, int, void**)' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o:(.data.rel.ro._ZTVN11QQmlPrivate11QQmlElementI12QZXingFilterEE[_ZTVN11QQmlPrivate11QQmlElementI12QZXingFilterEE]+0x38): undefined reference to `QZXingFilter::createFilterRunnable()' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o:(.data.rel.ro._ZTIN11QQmlPrivate11QQmlElementI12QZXingFilterEE[_ZTIN11QQmlPrivate11QQmlElementI12QZXingFilterEE]+0x8): undefined reference to `typeinfo for QZXingFilter' /opt/raspi-tools-8.3.0/lib/gcc/arm-linux-gnueabihf/8.3.0/../../../../arm-linux-gnueabihf/bin/ld: main.o: in function `QQmlPrivate::QQmlElement<QZXingFilter>::~QQmlElement()': /home/m/Builds/build_PY-Raspi_Buster-Debug/../../../x/workspace/gateway-setup/qt-for-raspi4-root-buster-pi3-vc4-tc5/qt5pi/include/QtQml/qqmlprivate.h:108: undefined reference to `QZXingFilter::~QZXingFilter()'
Do you know what I am doing wrong?
-
@Melle_87 said in After convertion QVideoFrame to QImage, the QImage is zoomed and streched:
MyQZXingFilter
Is it derived from QObject?
-
@jsulm: It is derived from QAbstractVideoFilter.
-
@Melle_87 Then I guess you do not build/link moc_*.cpp file for MyQZXingFilter
undefined reference to `QZXingFilter::QZXingFilter(QObject*)' - actually you seem to not link QZXingFilter at all
-
How did you add QZXing to your project?
https://github.com/ftylitak/qzxing#howToInclude has instructions on how to do it -
@GrecKo: Okay. Now I am able to use the QZXingFilter in VideoOutput.
But the conversion from QVideoFrame to QImage is not successful.
QZXingFilter says:QZXingFilterRunnable error: Cant create image file to process. Maybe it was a format conversion problem? VideoFrame format: Format_YUYV Image corresponding format: QImage::Format_Invalid
What should I do now???
-
It was my fault. I pulled the latest version of QZXing. Now the conversion from QVideoFrame to QImage is working.