[Ffmpeg-devel] Audio decode loops in ffmpeg.c

Thanos Kyritsis djart
Fri Feb 17 09:22:34 CET 2006

Good day,

I'd like some help on understanding the audio decoding part of ffmpeg.c, 
if someone could be willing enough to explain :)

I'm interested on the output_packet() function. This function does the 

....... [snipped code] ......

len = pkt->size;
ptr = pkt->data;
while (len >0) {

....... [snipped code] ......

ret = avcodec_decode_audio(ist->st->codec, samples, &data_size,
                                           ptr, len);

....... [snipped code] ......

ptr += ret;
len -= ret;
if (data_size <= 0) { .... }

etc etc .....


I can't understand why:
ptr += ret;
len -= ret;
are needed. 

I have noticed that they cause the whole decoding loop to rerun on the 
same pkt for input streams like AC3, whereas len-=ret makes len = 0 for 
input streams like mp3 or wav, thus making the decoding loop run only 
one time for each pkt.

Could it be because avcodec_decode_audio() is not able to handle a whole 
AC3 pkt, but needs to run twice or more for such a pkt to get decoded 
fully ?

Could someone explain this, please ? Thanks in advance!

Thanos Kyritsis <djart at linux.gr>

- What's your ONE purpose in life ?
- To explode, of course! ;-)

More information about the ffmpeg-devel mailing list