[Ffmpeg-devel] Increasing Audio Buffer Size

Michael Niedermayer michaelni
Tue May 9 16:33:23 CEST 2006


Hi

On Tue, May 09, 2006 at 06:38:51AM -0700, Mike Melanson wrote:
> Michael Niedermayer wrote:
> >and tomorrow yet another format will need 500k, no this is not ok, fix the
> 
> That is how the process has worked so far...

yes, and iam unhappy about it


> 
> >code, so that get/release_buffer() is used by the audio codecs to alloc
> >the buffer, and no a codec internal buffer which chops it below 192k is 
> >not ok either, actually thats a even worse hack
> 
> So, modify the internal FFmpeg API? Will do. This also affects how 
> external programs view FFmpeg, right?

that depends, it can be done in a way which peserves compatibility but
IMHO it does nothing good, it will just cause people to keep using the
old API and cause everyone to get headache due to buffer overflows and
such ...


heres my thought on how it could be done (comments welcome...)

-int avcodec_decode_audio(AVCodecContext *avctx, int16_t *samples,
+int avcodec_decode_audio(AVCodecContext *avctx, AVFrame *avframe,

optionally the above can be done in a way which doesnt break compatibility
be adding a new function and keeping the old ...


the audio decoders decode():
    calls avctx.release_buffer(avctx, avframe) if a previous buffer isnt 
    needed anymore

    calls avctx.get_buffer(avctx, avframe)

    audio sample i of channel c is stored in
    avframe.data[c][ i*avframe.linesize[c] ] cast to the format (always 
    int16_t currently)

    avframe.linesize[c] will only depend upon avctx.sample_format
    so a decoder doesnt need to care about it if it supports just
    one sample_format (which will generally be the case)


get_buffer(avctx, avframe)
    should allocate (or reuse) a buffer depending upon 
    avctx.channels
    avctx.sample_format
    the number of samples needed (probably need to add a field to 
    AVCodecContext unless we want to missuse width or height ...)


release_buffer() will free the buffer

[...]
-- 
Michael

In the past you could go to a library and read, borrow or copy any book
Today you'd get arrested for mere telling someone where the library is





More information about the ffmpeg-devel mailing list