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

来源:互联网 发布:为知笔记安卓导出 编辑:程序博客网 时间:2024/06/05 09:16

 

ffmpeg中264部分的avcodec_default_get_buffer和avcodec_default_release_buffer得内存管理机制,大概看了下,是可以复用的,但是细节还不是很了解。
       如:
MPV_frame_start中的
        for(i=0; i<MAX_PICTURE_COUNT; 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有关,跨度太大也会有问题。。。
原创粉丝点击