[Development] The dark side of QtMultimedia - strikes back
Massimo Callegari
massimocallegari at yahoo.it
Sun Jul 5 14:16:48 CEST 2015
Update #2 (sorry for spamming)
I patched qgstreamervideowindow.cpp and qgstreamervideowidget.cpp to support the linuxfb platform.
It kinda works !!
Screenshot here: http://pasteboard.co/1JlYRT9l.jpg
Videos can be played hardware decoded with audio and video until the end.
It's definitely using the OMX plugin.
Some other issues raised like these:
pi at raspberrypi ~ $ ./player -platform linuxfb sintel-1280-surround.mp4
(player:2857): GLib-GObject-WARNING **: g_object_set_valist: object class 'GstFBDEVSink' has no property named 'force-aspect-ratio'
This plugin does not support setParent!
(player:2857): GLib-GObject-WARNING **: g_object_set_valist: object class 'GstFBDEVSink' has no property named 'force-aspect-ratio'
My goal is to play fullscreen, so probably I can manage to find a way on the Linux FB.
In any case the issue is: QtMultimedia gstreamer-1.0 support has been written around XCB.
No eglfs, linuxfb, directfb, etc.
Someone should have written it in https://wiki.qt.io/New_Features_in_Qt_5.5
----- Messaggio originale -----
Da: Massimo Callegari <massimocallegari at yahoo.it>
A: "development at qt-project.org" <development at qt-project.org>
Cc:
Inviato: Domenica 5 Luglio 2015 13:06
Oggetto: [Development] The dark side of QtMultimedia - strikes back
Update.
The message "No m_videoSink available!" is clearly an alarm that something is going wrong.
So I checked the code and...surprise !
The EGLFS platform is not even considered ! Well done !
Code extract from qtmultimedia/src/gsttols/qgstreamervideowindow.cpp line 59:
if (elementName) {
m_videoSink = gst_element_factory_make(elementName, NULL);
} else if (QGuiApplication::platformName().compare(QLatin1String("xcb"), Qt::CaseInsensitive) == 0) {
// We need a native X window handle to be able to use xvimagesink.
// Bail out if Qt is not using xcb (the control will then be ignored by the plugin)
m_videoSink = gst_element_factory_make("xvimagesink", NULL);
}
if (m_videoSink) {
...
}
else
qDebug() << "No m_videoSink available!";
I tried to add something like:
else if (QGuiApplication::platformName().compare(QLatin1String("eglfs"), Qt::CaseInsensitive) == 0) {
m_videoSink = gst_element_factory_make("eglglessink", NULL);
}
The error message disappears, but I get a black fullscreen result.
I don't even see the player example UI.
I guess it depends on the compositing between the gst window and the main eglfs window.
So I haven't gone any further.
I can tweak the player example to accept a filename from the command line and play it automatically.
At least I can check if the video playback is OK in this way.
This is extremely sad. I thought the gst 1.0 support came especially for the raspberry Pi, since the little dude cannot afford software decoding (thus the need of OMX -> thus the need of gst 1.0)
I can try the same tests on Xorg, but it's out of my scope.
I don't want to use Xorg but instead I will use Wayland.
More information about the Development
mailing list