有关slice 解码过程的(翻译标准8.2部分)
(在这里,只考虑到帧(frame)的情况,对于场(field),相互场对(complementary field pair)暂不作考虑) 1.图像序列号 POC (picture order count)解码过程. picture order count ,在解B slice时,用来决定参考picture初始化顺序; 在解时间直接模式(temporal direct
(在这里,只考虑到帧(frame)的情况,对于场(field),相互场对(complementary field pair)暂不作考虑)1.图像序列号POC(picture order count)解码过程.
picture order count ,在解B slice时,用来决定参考picture初始化顺序; 在解时间直接模式(temporal direct mode)下的运动矢量,不直接模式(implicit mode)下的B slice权预测(weighted prediction),和解码器一致性检测(conformance checking)时,用来表现帧和场之间picture 顺序不同).
--每一个编码帧和两个picture order count 相关.称为TopFieldOrderCnt 和 BottomFieldOrderCnt,各自对应于top field 和 bottom field.
Topfiieldordercnt 和BottomFieldOrderCnt通过调用POC解码过程得到的. POC 有三种类型(type 0,1,2).
对于picx:
PicOrderCnt(picx)=min(TopFieldOrderCnt,BottomFieldOrderCnt)
DiffPicOrderCnt( pica, picb ) = PicOrderCnt( pica ) - PicOrderCnt( picb )
这三种类型的解码过程在标准的8.2.1.1, 8.2.1.2, and 8.2.1.3.
2.宏块(macroblock)到slice group映射的解码过程
这个过程时在每个slice 开始时调用的.得到MbToSliceGroupMap(宏块到所属帧组的映射表).
slice group 有6种映射模式(8.2.2.1—8.2.2.8),分别用于不同的情况编码.例如电视广播,背景相对稳定,只需传送人的头像部分的slice宏块就行了,可以选slice type 2.
3.slice 数据划分(data partition)解码过程
输入:
--slice 数据划分a层(layer)rbsp,
--当类别3(category 3)中语法元素在slice 数据中出现,slice 数据划分b层rbsp有和a层一样的slice_id.
--当类别4中的语法元素在slice数据中出现,slice数据划分c层rbsp有和a层一样的slice_id.
输出:编码slice.
当不使用slice 数据划分,编码slice表现为rbsp没有分割,包含slice 头,slice数据语法结构包含类别2,3,4中所有语法元素,宏块数据.
当使用slice数据划分,每一个类别中的语法元素分离在不同的nal单元.解码过程处理slice数据划分过程和没有划分时是等价的.
注释:语法分类3和解i,si宏块残差数据有关,4中和解p,b中的残差数据相关,2中包含所有和解码宏块相关的语法元素.
4.参考picture 列表创建的解码过程
对于P,SP帧,使用Refpiclist0,对于B使用RefPicList0,RefPicList1.
解码的参考画面(picture) 标记为使用短(short-term) 参考帧或长(long-term)参考帧两种.
短解码的参考画面通过frame_num指定,长解码的参考画面通过long term frame index 指定.
如果LongTermEntry( RefPicListx[ i ] )==1,表示是长参考帧,于LongTermPicNum相联系.
如果LongTermEntry( RefPicListx[ i ] )==0,表示是短参考帧,于PicNum相联系.
修改的参考画面数量在表(list) RefPicList0中是num_ref_idx_l0_active_minus1 + 1,在RefPicList1中是num_ref_idx_l1_active_minus1 + 1,一个参考画面可以有多个所有在流改的参考画面表RefPicList0, RefPicList1.
4.1 picture numbers 获取过程
if( framenum > frame_num )
FrameNumWrap = FrameNum – MaxFrameNum
else
FrameNumWrap = FrameNum
PicNum = FrameNumWrap
LongTermPicNum = LongTermFrameIdx
4.2 参考画面表初始化过程
对于P,SP
RefPicList0:
short-term (降序), long-term(升序),null
对于B
RefPicList0
short-term(降序) ,short-term(升序) , long-term(升序) , null
第一部分PicOrderCnt(frm )
第二部分PicOrderCnt(frm)> PicOrderCnt( currpic )
RefPicList1
short-term(升序) ,short-term(降序) , long-term(升序), null
第一部分PicOrderCnt(frm )> PicOrderCnt( currpic )
第二部分PicOrderCnt(frm)
4.3参考画面表重排序过程
对于短画面(short-term picture)
reordering_of_pic_nums_idc等于 0,或1
首先求出 PicNumLX
for( cIdx = num_ref_idx_lx_active_minus1 + 1; cIdx > refidxLX; cIdx-- )
RefPicListX[ cIdx ] = RefPicListX[ cIdx – 1]
RefPicListX[ refIdxLX++ ] = PicNumLX
nIdx = refIdxLXfor( cIdx = refIdxLX; cIdx
if( LongTermEntry( refPicListx[ cIdx ] ) | | RefPicListX[ cIdx ] != picnumlx )
RefPicListX[ nIdx++ ] = RefPicListX[ cIdx ]
reordering_of_pic_nums_idc等于 2
for( cIdx = num_ref_idx_lx_active_minus1 + 1; cIdx > refidxLX; cIdx-- )
RefPicListX[ cIdx ] = RefPicListX[ cIdx – 1]
RefPicListX[ refIdxLX++ ] = LongTermPicNum
nIdx = refIdxLX
for( cIdx = refIdxLX; cIdx
if( !LongTermEntry( RefPicListX[ cIdx ] ) | | RefPicListX[ cIdx ] != LongTermPicNum )
RefPicListX[ nIdx++ ] = RefPicListX[ cIdx ]5.解码的参考画面标记过程(marking process)
nal_ref_idc 不等于0的解码画面, 作为参考画面, 标记为短参考帧或长参考帧. 对于解码参考帧,它的两个场的标记和帧相同. 标记为长参考帧, 用LongTermFrameIdx标识,标记为短参考帧或长参考帧的帧或相互的参考场对,可以作为帧间预测的参考帧, 直到帧标记为不使用为参考帧(unused for reference).
画面标记为不使用参考帧(unused for reference),可以通过使用滑动窗口(slice windows)参考画面标记过程,一种先进先出的机制,或自适应存储画面标记过程(adaptive memory control reference picture marking process),一种自定义的自适应标记过程.
在解码过程中short-term 参考画面,使用picnum指定,long-term 参考画面使用LongTermPicNum.
声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
上一篇: php 获取当前用户的IP