Le mer. 26 mai 2021 à 14:11, Lars Knoll <lars.kn...@qt.io> a écrit :
>
> Hi all,
>
> After 5 months of work, I am now preparing to merge the new API and 
> implementation for Qt Multimedia back into the development branch.
>
> You can find the first iteration of a merge commit here: 
> https://codereview.qt-project.org/c/qt/qtmultimedia/+/351108
>
> With this, Qt Multimedia is probably the module that is changing most between 
> Qt 5 and Qt 6. The reason for that is that we had large issues maintaining Qt 
> Multimedia during the Qt 5 lifetime, and never really got to a point where it 
> offered a consistent experience across all platforms.
>
> The hope is that we can change that for Qt 6. To make this possible, we have 
> changed not only parts of the public API, but completely redone its internal 
> architecture, especially how multimedia connects to the platform specific 
> backends. Apart from cleaning up the backend API and greatly simplifying it, 
> I also chose to make it private and remove the plugin architecture around it. 
> The backend is now selected at compile time, and we’re now only supporting 
> one backend per platform.
>
> The architectural cleanup lead to huge simplifications in the code base. The 
> module went from 140k LOC in 5.15 to 73k LOC in Qt 6, while keeping 90% of 
> the functionality we had in 5.15 and adding a few things that were missing 
> there. This should make it significantly easier to maintain and further 
> develop the module over the lifetime of Qt 6.
>
> Here’s the list of largest changes (copy from the commit log of the merge 
> commit above):
>
> * New QMediaDevices API to discover available input/output devices
>   and get notifications about changes
> * New QMediaFormat API to query for supported codecs and file formats
> * Refactored playback API, QMediaPlayer and playlist handling are
>   fully separated (and can be connected on the app level)
> * Simplified QMediaPlayList API to use QUrl instead of the
>   QMediaContent/QMediaResource pair.
> * Support for multiple audio/video/subtitle streams when playing back
>   media
> * Better meta data support for audio/video files and individual streams
>   inside the file
> * New QMediaCaptureSession API as a central class to handle media capture
> * QCamera, QMediaEncoder and QMediaImageCapture are to be used together
>   with the capture session to define a capturing pipeline
> * Removed QCameraFocus, QCameraExposure and QCameraImageProcessing
>   and merged those features into QCamera itself
> * New QMediaEncoder class to connect to a capture session for encoding
>   captured audio/video.
> * new QMediaEncoderSettings class to define the audio/video codecs and
>   file format to be used when encoding.
> * Larger changes to the QML API, it is not symmetric to the C++ API,
>   and to the largest part simply uses the public C++ classes
> * Rewritten video output pipeline. The new QVideoSink class is the
>   main interface between the media player/capture session and an
>   output surface.
> * Built in support for rendering more uncompressed video formats
>   (RGB and YUV), both through QPainter and shaders
> * Support for conversion of video frames in all formats to a QImage
> * Support for HW accelerated rendering through RHI for the QML
>   VideoOutput element
> * Support for HW accelerated decoding in many cases
> * Cross platform support for audio decoding through QAudioDecoder
> * The backend API is now private, so we can adjust it as needed to
>   implement new functionality
> * Removed the QMediaService/QMediaObject abstraction
> * Removed the plugin architecture for backends, backends are now
>   chosen at compile time
> * Removed the QAudioProve/QVideoProbe APIs
> * Removed QSound. Use QSoundEffect instead.
> * Removed the Radio API
> * Removed QAudioRecorder. Use QMediaCaptureSession/QMediaEncoder
>   or QMediaRecorder instead.
> * Removed QAbstractVideoFilter. For filtering QML video, use
>   shader effects instead.
> * Removed QAbstractVideoSurface. QVideoSink replaces it.
> * QVideoSurfaceFormat has been renamed to QVideoFrameFormat.
> * Significantly reduced the API surface of the backend API (from
>   ~40 to 13 classes)
> * Fully rewritten gstreamer backend that only relies on base and good
>   plugins plus codecs.
> * Windows uses WMF exclusively, added camera support through WMF
>
> There are still open issues and gaps in the implementation that need fixing, 
> but the code is now in a decent enough shape to merge it back to dev and 
> continue on that branch. We will however now have everything ready in Qt 
> Multimedia for the 6.2 feature freeze, and will be working with an exception 
> on this module. Especially the support for camera and media capture on 
> Windows and the Android backend still need more work. The gstreamer backend 
> for Linux and AVFoundation for iOS and macOS should be in a pretty decent 
> shape. QNX support is missing right now, and is planned after 6.2.
>
> Volker has done a smaller API review round already, but I’d now appreciate 
> more eyes on the code base, both on the API side and implementation. Let me 
> know what you think, and also what doesn’t work.

Hi Lars,

Thanks for the updates. One feature that I've always waited for is the
possibility to list and select audio/subtitle tracks from qml. Now
that the feature is implemented in C++, it seems not much would be
missing to also support this officially in QML. Is this planned ?

Regards,
-Arnaud

>
> Cheers,
> Lars
>
> _______________________________________________
> Development mailing list
> Development@qt-project.org
> https://lists.qt-project.org/listinfo/development
_______________________________________________
Development mailing list
Development@qt-project.org
https://lists.qt-project.org/listinfo/development

Reply via email to