[Libav-user] Magic Realloc

Ingo Foerster foerster at ifoerster.com
Wed Mar 12 02:11:26 CET 2014


Hello,

I updated to newest ffmpeg and now I run into a problem. It seems that
ffmpeg  do  a  magic  realloc  and  so I get strange problems with the
buffer.

I use:

        unsigned char *bit_buffer;

        bit_buffer = (unsigned char *)av_malloc(2048 * 32 * 2 + FF_INPUT_BUFFER_PADDING_SIZE);
        bit_buffer_size = 2048 * 32;

        AVIOContext *avIO = avio_alloc_context(bit_buffer, bit_buffer_size, 0, cryPut, cryPut->read, NULL, NULL);//cryPut->seek);
        avIO->seekable = 0;

        input_file = avformat_alloc_context();
        input_file->pb = avIO;
        int ret;
        if((ret = avformat_open_input(&input_file, "", NULL, NULL)) < 0) 
        {
                char desc[1024];
                int ret2 = av_strerror(ret, desc, 1024);
                return -1;
        }

No   I  see  in  the  stack that ffmpeg do a realloc. After this it is
possible  to  free  the  buffer: if(bit_buffer) { av_free(bit_buffer);
bit_buffer = NULL; } <--- Bad crash.

So  how  act  ffmpeg  here?  Normaly  a  realloc create a pointer to a
pointer and handle the free/delete itself. But if I do not use av_free
then I have a big memleak. Any idea?

Thanks,

Ingo



More information about the Libav-user mailing list