ffmpeg impasse
Steven Robbins
steve at sumost.ca
Thu Oct 27 06:09:00 BST 2022
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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/digikam-devel/attachments/20221027/36c5989b/attachment.sig>
More information about the Digikam-devel
mailing list