ffmpeg中264部分的内存管理机制

 

ffmpeg中264部分的avcodec_default_get_buffer和avcodec_default_release_buffer得内存管理机制,大概看了下,是可以复用的,但是细节还不是很了解。
       如:
MPV_frame_start中的
        for(i=0; i        {
            if( s->picture.data[0] && !s->picture.reference )//
           {
                s->avctx->release_buffer(s->avctx, (AVFrame*)&s->picture);
            }
        }
.....
以及下面if( alloc_picture(s, (Picture*)pic, 0) < 0 )中的avcodec_default_get_buffer来申请内存
里面有个INTERNAL_BUFFER_SIZE大小的队列,然后内存根据以下变量倒来倒去,有点迷糊。
然后我测试的几个264源有get_buffer失败的情况,所以问题肯定在这里,有谁能出来解释一下这里的内存管理流程,简要的说说即可!

 

avcodec_default_get_bufferz中
pic->age = *picture_number - buf->last_pic_num;//pic->age 是啥意思,一但pic->age==0,就失败了
s->picture.reference 跟dropable有关,而dropable又个语法元素nal_ref_idc有关,这个逻辑就有点复杂了,然后internal_buffer_count会动态的++或者- -,最后就会导致get_buffer失败。
我分析的愿意感觉还和stream order和display order有关,跨度太大也会有问题。。。

你可能感兴趣的:(ffmpeg中264部分的内存管理机制)