[Development] The dark side of QtMultimedia

Massimo Callegari massimocallegari at yahoo.it
Sat Nov 8 16:00:32 CET 2014

Dear Qt team,
I am well aware you guys do your best to provide a quality 
cross-platform framework and so far you did an excellent job !
Unfortunately I cannot say such thing for the Qt Multimedia module. If 
you stick to the provided examples (properly tailored to hide all the 
bugs) they all almost work. If you try to use the multimedia 
functionalities in a serious project and try to deploy it, then the pain 
comes around.
I found Qt Multimedia buggy, unsupported and moreover not cross-platform.

I am the maintainer of an open source project and so far I provided 
multimedia audio input/output on Qt4 using ALSA on Linux, WAVEIN/WAVEOUT 
on Windows and PortAudio on OSX.
In the last 9 months I tried to switch to Qt5 Multimedia and opened a 
number of issues on JIRA and none of them has been resolved or taken 
into account.

It seems the priority goes to things like Camera input, instead of 
fixing and consolidating the current functionalities.
As of today, on Gerrit there are only 12 open commits. 5 of them related 
to Camera input. 9 of them are 4 or more months old.
On JIRA there 178 open tickets. More than 100 are P1 or P2 but it seems 
nobody is actively taking care of them:

So the question is, are you guys actually interested in improving Qt 
Multimedia ?
Is there any internal problem in maintaining this module that we should 
be aware of ?

Please let us know something about the future of this module, cause 
right now it is quite difficult to rely on it and include it on a project.
I would offer my contribution to fix some of the issues I found, but 
unfortunately my time is very limited and I'd risk to not being able to 
follow the activities.

My personal suggestion: to take this seriously you need 2-3 developers 
working 8 hours a day on this module. At least until it reaches the 
quality of the other Qt modules.

Thanks in advance and regards.

Here's the issues I opened on JIRA plus a few other considerations
(apologies if the description is not complete, the issues on JIRA have 
been locked so I couldn't improve them anymore)

*February 22nd 2014**: QAudioDeviceInfo should have a displayName() or 
description() function*
On OSX devices names are correct.
On Windows they are truncated to 31 characters
On Linux it's a mess. I think no user wants something like this: 

*February 22nd 2014**: QMediaPlayer supported mime types*
The documentations says we shouldn't use 
QMediaPlayer::supportedMimeTypes() but:
- on OSX it returns a list of mime types even though it says it supports 
AVI video playback and instead it doesn't
- on Windows and Linux it returns an empty QStringList
- the alternative is to use the 'hasSupport' method, which is a pure 
non-sense/blind shooting way to understand the capabilities of the 
MediaPlayer engine

*October 18th 2014**: QMediaPlayer metaDataChanged signal not emitted on 
An example of NOT cross-compatibility. The signal is emitted on Windows 
and Linux.

*March 27th 2014**: QAudioDeviceInfo nearestFormat not working on OSX*
Another example of NOT-cross compatilibity. A code that works on Linux 
and Windows doesn't work on OSX.
It took me months to find a non-sense workaround to make my code to work.
In the meantime, the original code was hanging on OSX, which shouldn't 
happen anyway.

*Audio input example doesn't work on Windows 7 and Realtek audio card*
Unfortunately the OS and card combination is quite popular on the 
market. RTK cards are most likely integrated in desktop motherboards. On 
Linux the same example with the same card works as expected.
Here there are 2 issues:
- the example gets a QIODevice from the QAudioInput::start() method. The 
QIODevice is used to read data from the audio card, but if I call the 
QIODevice::bytesAvailable() method
   it always returns 0. QAudioInput::bytesReady() must be used instead. 
I believe that the first approach should work if the subclassing was 
done properly
- with the Realtek card, QIODevice::read always reads 3840 bytes, no 
matter what QAudioInput::bytesReady() returns.
   For example: the app needs 4096 bytes, bytesReady returns 7680 bytes 
and QIODevice::read reads 3840 instead of 4096 as requested.
In my case I need 4096 bytes to perform a FFT. If the device returns 
less bytes, the FFT fails.

*GStreamer 1.0 support*
GStreamer 1.0 has been released more than 2 years ago. An issue on JIRA 
has been opened on Sep 9th 2013 and it's still ongoing.
This porting is fundamental for the Raspberry Pi since it cannot afford 
to software decode videos.
How can you guys "officially" support (as a paid enterprise service) the 
Raspberry Pi if you don't have such a basic functionality ?
You should say "we support the Pi, except for the multimedia 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/development/attachments/20141108/5d64f63b/attachment.html>

More information about the Development mailing list