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

 

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有关,跨度太大也会有问题。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值