这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 物联网技术 » slice 解码过程的讨论(转)

共2条 1/1 1 跳转至

slice 解码过程的讨论(转)

菜鸟
2005-10-15 00:06:27     打赏

有关slice 解码过程的(翻译标准8.2部分)
(在这里,只考虑到帧(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 和buttomfieldordercnt通过调用picture order count解码过程得到的. picture order count 有三种类型(type 0,1,2).
对于picx:
picordercnt(picx)=min(topfiieldordercnt,buttomfieldordercnt)
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( currpic )
第二部分picordercnt(frm)> picordercnt( currpic )
refpiclist1
short-term(升序) ,short-term(降序) , long-term(升序), null
第一部分picordercnt(frm )> picordercnt( currpic )
第二部分picordercnt(frm)<picordercnt( currpic )
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 = refidxlx
for( cidx = refidxlx; cidx <= num_ref_idx_lx_active_minus1 + 1; cidx++ ) if( longtermentry( refpiclistx[ cidx ] ) | | refpiclistx[ cidx ] != picnumlx )
refpiclistx[ nidx++ ] = refpiclistx[ cidx ]
对于长画面(long-term picture)
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 <= num_ref_idx_lx_active_minus1 + 1; cidx++ )
if( !longtermentry( refpiclistx[ cidx ] ) | | refpiclistx[ cidx ] != longtermpicnum )
refpicalistx[ 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.



关键词: slice     解码     过程     讨论     picture     参考    

菜鸟
2005-10-16 03:39:00     打赏
2楼
开头你说不考虑场的情况,怎么后面又涉及到顶场和底场了呢?看不懂!

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]