ffmpeg impasse

Maik Qualmann metzpinguin at gmail.com
Thu Oct 27 06:54:51 BST 2022


Qt6 Multimedia has recently added an FFmpeg plugin. Maybe it makes sense to 
look at the code as it was solved there.

https://github.com/qt/qtmultimedia/tree/dev/src/plugins/multimedia/ffmpeg[1]

The Qt-AV code has certainly grown over many FFmpeg versions and has only ever 
been adapted to "working".

Maik

Am Donnerstag, 27. Oktober 2022, 07:09:00 CEST schrieb Steven Robbins:
> Hello,
> 
> After staring at ffmpeg docs and digikam/qtav code for a couple days: it
> seems to me the qtav  code is fundamentally mismatched for decoding.
> 
> As far as I can work out, the ffmpeg model is that a single packet from the
> demuxer may generate an arbitrary number of frames.  In contrast, qtav
> assumes that a packet may generate only a single frame.
> 
> On the ffmpeg side, example code [1] shows the avcodec_receive_frame() loop
> after sending the packet to the codec.
> 
> [1] https://ffmpeg.org/doxygen/5.1/filtering_audio_8c-example.html
> 
> On the qtav side, the AudioDecoderFFmpeg::decode() function [2] has a single
> avcodec_receive_frame() following the avcodec_send_packet().
> 
> [2] https://invent.kde.org/graphics/digikam/-/blob/master/core/libs/video/
> qtav/codec/audio/AudioDecoderFFmpeg.cpp#L110
> 
> 
> Have I overlooked something in this analysis?  The qtav code uses layers
> exuberantly so I may well have gotten confused.
> 
> If the analysis is correct: I don't see a simple path forward.  I think it
> will need rewriting the AVDecoder class hierarchy -- because that is where
> decode() is declared.
> 
> Also of note: as far as I can work out, this code has always been wrong,
> even for ffmpeg version 4.
> 
> -Steve



--------
[1] https://github.com/qt/qtmultimedia/tree/dev/src/plugins/multimedia/ffmpeg
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/digikam-devel/attachments/20221027/a603376d/attachment.htm>


More information about the Digikam-devel mailing list