AV1 图像缓冲区管理

AV1标准文档定义函数initialize_buffer_pool 初始化缓冲池VBI数组该过程描述如下

initialize_buffer_pool()

{

//BUFFER POOL MAX SIZE等于10

for (i = 0; i < BUFFER_POOL_MAC_SIZE; i++) free_buffer(i)

for(i = 0; i < 8; i++) VBI[i] = -1;

free_buffer(idx) {

DecoderrefCount[idx] = 0;

PlayerRefCount[idx] = 0;

//PresentationTimes[i]是一个缓冲池Framebuffers[i] 关联数组

//记录插槽存储解码帧最后一次展示时间

PresentationTimes[idx] = -1;

}

}

随着解码过程进行解码器需要缓冲池进行管理为此AV1标准文档定义两个数组变量DecoderRefCount[10]PlayerRefCount[10]分别用于跟踪解码过程和现实过程中每个缓冲区插槽使用状态2-4为AV1DPB管理示意图其中FrameBuffers[10]表示10物理帧缓冲区物理帧缓冲区f0 ~f9表示缓冲区插槽组成

PlayerRefCount[10]

DecoderRefCount[10]

FrameBuffers[10]

VBI[x]

2-4 AV1DPB管理示意图

变量DecoerRefCount[idx] 表示解码过程位于缓冲池索引idx槽位引用次数初始化0并且每次解码器将缓冲池卡槽idx添加到VBI索引该变量会增加1.相应每次解码器VBI索引槽中移除卡槽idx该变量减少1.这个参数语法元素refresh_frame_type 来更新VBI索引时计数器DecoderRefCount[idx] 才会按照上述方式修改计数器DecoderRefCount[idx] = 0表示缓冲池索引idx卡槽所存储图像像素数据将永久失败并且解码过程不应使用这些数据

AV1标准文档中函数update_ref_buffers 用于更新DBP更新数组VBIDecoderRefCount 该函数定义更新过程如下

当前 解码完毕后解码器需要调用update_ref_buffers VBI记录当前解码帧插槽位置所以这里idx一般是cfbi

update_ref_buffers(idx, refresh_frame_flags)

遍历VBI中国呢每个位置寻找语法元素refresh_frame_flags指示位置

for (i = 0; i < 8; i++)

if (refresh_frame_flags & (1 << i))

if (VBI[i] != -1)

DecoderRefCount[VBI[i]] --;

语法元素refresh_frame_flags 指示位置设置为当前插槽索引

VBI[i] = idx

DecoderRefCount[VBI[i]] ++;

变量PlayerRefCount[idx]是一个计数器用于指示解码过程缓冲索引idx插槽存储解码帧是否仍然需要用于显示过程初始化时候设置0并且解码器确定某个是一个展示这个计数器就会增加1.最后一次展示时候PlayerRefCount[idx]会被重置0因此show_frame等于1或者show_existing_frame 等于1解码器需要设置对应PlayerRefCount[idx]该过程位于解码器模型函数decode_process之中描述如下

if (initialPresentationDelay != 0 && show_existing_frame == 1 || show_frame == 1)

{

displayIdx此处idx表示显示缓冲池BufferPool卡槽索引

//displayIdx = VBI[fame_to_show_map_idx]或者displayidx = cfbl

//ShowFrameNum显示数量每一显示ShownFrameNum增加1.

PresetationTimes[displayIdx] = presentationTime[ShownFrameNum]

PlayRefCount[displayIdx]++

}

解码帧最后呈现时间已经显示PlayerRefCount[idx]设置0AV1标准文档中函数start_decode_at_removal_time 描述了PlayerRefCount[idx]设置0过程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值