[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