JM8.6中对数据分割的一点解释

2011年4月20日15:16:43

JM8.6中对数据分割的一点解释

分析currslice->partarr[partmap[SE_MVD]] (关于数据分割的实现)

Currslice指当前slice

Partarr是一个datapartition数组

Partmap :const int* partmap = assignse2partition[input->partition_mode];

Int * assignse2partition[2] ;

Static int assignse2partition_nodp[SE_MAX_ELEMENTS] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

Static int assignse2partition_DP[SE_MAX_ELEMENTS] = { 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 2, 2, 2, 2, 0, 0, 0, 0 } ;

Typedef enum {

SE_HEADER,

SE_PTYPE,

SE_MBTYPE,

SE_REFFRAME,

SE_INTRAPREDMODE,

SE_MVD,

SE_CBP_INTRA,

SE_LUM_DC_INTRA,

SE_CHR_DC_INTRA,

SE_LUM_AC_INTRA,

SE_CHR_AC_INTRA,

SE_CBP_INTER,

SE_LUM_DC_INTER,

SE_CHR_DC_INTER,

SE_LUM_AC_INTER,

SE_CHR_AC_INTER,

SE_DELTA_QUANT_INTER,

SE_DELTA_QUANT_INTRA,

SE_BFRAME, SE_EOS,

SE_MAX_ELEMENTS //!< number of maximum syntax elements

} SE_type; // substituting the definitions in elements.h

从上面可以看出SE_type枚举类型里定义了20种句法元 素,若存在数据分割,则根据assignse2partition_DP数组来定义句法元素的重要性; 若不存在数据分割情况,则assignse2partition_nodp数组可知把这些句法元素归于一类

Partmap的作用是把当前的句法元素映射到某一种数据分割类型中,其值为0,1,2,这样就可以形成一个partarr的datapartition数组

当没有数据分割时,这些元素实际全存到了currslice->partarr[0]中

posted @ 2012-07-31 14:16  Mr.Rico  阅读(...)  评论(...编辑  收藏