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,就失败了 |
我分析的愿意感觉还和stream order和display order有关,跨度太大也会有问题。。。