量化系数的数组

TO:jamie80,又来请教你了......

1、为什么量化系数的数组是取[6][4][4]呢?

2、int cof[4][6][4][4]; //!< correction coefficients from predicted

这个变量是干什么用的啊?

3、请你详细讲解一下以下几个宏定义的意思好么?

包括,代表什么意思、所指的块的大小、用于哪种场合

#define P8x8 8 #define I4MB 9 #define I16MB 10 #define IBLOCK 11 #define SI4MB 12 #define MAXMODE 13 #define IPCM 14

4、在解码模块erc_globals.h文件中的objectBuffer_t结构体定义中的mv[3]具体指什么? mv[0]好像是运动向量X方向分量 mv[1]好像是运动向量Y方向分量可mv[2]是什么呢?

谢谢!^-^

真是不好意思,暑假回家休息了,所以没有及时恢复本消息

1、为什么量化系数的数组是取[6][4][4]呢?

答:设变量p为需要变换的系数,c(p) 为变换之后的系数,其变换如下:

|1 1 1 1| |p00 p01 p02 p03| |1 2 1 1| |aa ab/2 aa ab/2|

|2 1 -1 -2| |p10 p11 p12 p13| |1 1 -1 -2| * |ab/2 bb/4 ab/2 bb/4|

|1 -1 -1 1| |p20 p21 p22 p23| |1 -1 -1 2| |aa ab/2 aa ab/2|

|1 -2 2 -1| |p30 p31 p32 p33| |1 -2 1 -1| |ab/2 bb/4 ab/2 bb/4|

我们可以看到位于p00、p02、p20、p22位置的系数需要乘aa,p11、p13、p31、p33的系数需要乘bb/4,其余的系数需要乘ab/2,这里a = 0.5,b = sqrt(0.4),c = 0.5。然而整数变换中的乘法运算可以与量化过程的除法运算糅合起来,这样就产生了你所提到的quant_coef[6][4][4]。第一个分量取6,是因为量化阶每隔6就增加一倍,因此只需要记录下量化阶为0-5时的各个系数的大小,而后两个分量取4则是为了与整数变换的大小相匹配

2、int cof[4][6][4][4]; //!< correction coefficients from predicted

这个变量是干什么用的啊?

答:这个变量用来存储解码并且逆量化之后的系数,其中cof[4][6]的内容如下:

|y0 y1 y4 y5 |

|y2 y3 y6 y7 |

|y8 y9 y12 y13|

|y10 y11 y14 y15|

|u0 u1 v0 v1 |

|u2 u3 v2 v3 |

3、请你详细讲解一下以下几个宏定义的意思好么?

包括,代表什么意思、所指的块的大小、用于哪种场合

#define P8x8 8 #define I4MB 9 #define I16MB 10 #define IBLOCK 11 #define SI4MB 12 #define MAXMODE 13 #define IPCM 14

答:P8x8是个总称,代表了所有的亚分割模式,包括(8x8,8x4,4x8,4x4),用于图像细节比较丰富的时候;I4MB是帧内预测模式,预测块的大小为4x4,同样用于图像细节比较丰富的场合;I16MB是另外一种帧内预测模式,其预测块的大小为16x16,用于图像比较平滑的部位;IBLOCK是帧内模式的总称,既包括I4MB也包括I16MB;SI4MB是帧内编码的一种切换模式,可用于随机切入的场合(如快进功能);MAXMODE表明总共有13种模式,它本身没有对应的模式;IPCM是一种无损模式,将所有像素的数值表示直接写入输出流中。

4、在解码模块erc_globals.h文件中的objectBuffer_t结构体定义中的mv[3]具体指什么? mv[0]好像是运动向量X方向分量 mv[1]好像是运动向量Y方向分量 可mv[2]是什么呢?

答:mv[2]指的是参考帧的索引

谢谢!^-^

No thanks!


你可能感兴趣的:(量化系数的数组)