POC的含义

来源:互联网 发布:24u标准网络机柜 编辑:程序博客网 时间:2024/04/30 01:43

刚好这段时间在看POC

关于参数的注解:

 

FrameNumOffset: 帧数的偏置.定义为当前帧为IDR,FNO的值为0;prevFrameNum > frame_num,说明了有溢出,FrameNumOffset = prevFrameNumOffset + MaxFrameNum.prevFrameNum <=frame_numFrameNumOffset = prevFrameNumOffset.

 

 

 

POCLsb: POC的低有效位.通过slice header传送到解码端.由于编码端知道传送的序列的顺序,所以在编码端,POC的值由以下方法确定:

 

(1)对于帧或者场 img->toppoc = IMG_NUMBER*img->offset_for_ref_frame[0];

 

(2)对于B img->toppoc = (IMG_NUMBER-1)*img->offset_for_ref_frame[0] + 2* img->b_frame_to_code.

 

而编码端只需要传送POCLsb到解码端,解码端就可以解出POC的值.

 

解码端通过IDR帧进行分段(编码端并没有分段),每次分段将POCLsb0.然后计算出POC的值.

 

 

 

POCMsb: POC的高有效位.POCMsb的计算方法如下:

if( ( pic_order_cnt_lsb < prevPicOrderCntLsb ) &&

 

 

( ( prevPicOrderCntLsb – pic_order_cnt_lsb ) >= ( MaxPicOrderCntLsb / 2 ) ) )

 

 

PicOrderCntMsb = prevPicOrderCntMsb + MaxPicOrderCntLsb

 

 

else if( ( pic_order_cnt_lsb > prevPicOrderCntLsb ) &&

 

 

( ( pic_order_cnt_lsb – prevPicOrderCntLsb ) > ( MaxPicOrderCntLsb / 2 ) ) )

 

 

PicOrderCntMsb = prevPicOrderCntMsb – MaxPicOrderCntLsb

 

 

else

 

 

PicOrderCntMsb = prevPicOrderCntMsb

 

 

这段程序的解释:例:log2_max_poc_lsb_minus4=0,prevPOCMsb=16,prevPOCLsb=1,POCLsb=14.

 

 

此时MaxPOCLsb=16,所以POCMsb=0

 

 

 

 

prevPOCMsbprevPOCLsb的确定:

(1)    当前图片为IDR图片时, prevPOCMsb= prevPOCLsb=0;

(2)    IDR,mmco=5,而且非底场时prevPOCMsb=0, prevPOCLsb=prevTopFOC;

(3)    IDR,mmco不等于5,为底场时prevPOCMsb= prevPOCLsb=0;

(4)    除以上情况外MsbLsb都等于前一幅图片的MsbLsb.

 

 

算法:

0模式:

当为帧时

TopFieldOrderCount = POCMsb + POCLsb

 

POCLsb被送到每个slice header.POCMsbPOCLsb达到最大值时增加.

BottomFieldOrderCnt = TopFieldOrderCnt + delta_pic_order_cnt_bottom

 

因为帧时POC=min(TopFOC,BottomFOC)

故只需要计算TopFieldOrderCount = POCMsb + POCLsb

 

为场时

TopFieldOrderCount = POCMsb + POCLsb

 

BottomFieldOrderCnt= POCMsb + POCLsb

 

1模式:

TopFieldOrderCount = expected POC + delta_pic_order_cnt[0]

 

BottomFieldOrderCount = expected POC + delta[1] ()

 

= expected POC + offset to bottom field + delta[0] ()

 

2模式:

TopFieldOrderCnt = BottomFieldOrderCount =tempPicOrderCnt

 

没有用作参考时

 

 

tempPicOrderCnt = 2 * ( FrameNumOffset + frame_num ) – 1

 

用作参考时

 

 

tempPicOrderCnt = 2 * ( FrameNumOffset + frame_num )

 

 

 

输出:

当为帧或场对时,输出TopFieldOrderCount BottomFieldOrderCnt中的小值;

 

当为顶场时,输出TopFieldOrderCount;

 

当为底场时输出BottomFieldOrderCnt.

 

 

 

expectedDeltaPerPicOrderCntCycle: 一个POC循环的期望delta.等于在这个POC循环中的所有delta值之和.

 

deltaPOC[0]表示一个帧中顶场与expectPOC的差值.[1]表示底场与expectPOC的差值.

 

Offset_for_ref_pic用来计算参考图片间的POC的差值.

 

Offset_for_non_ref_pic用来计算非参考图片间的POC的差值.

 

Num_ref_frame_in_pic_order_cnt_cycle表示在一个POC循环中的参考图片的个数,可以取值0-255,但是在jm75,设为1. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击