H264解析Demo10变换量化_3_反变换
Posted 叮咚咕噜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了H264解析Demo10变换量化_3_反变换相关的知识,希望对你有一定的参考价值。
代码实现
//<变换量化><4>反变换(参数1:保存反量化系数 参数2:保存反变换之后)
void CResidual::coeff_invers_transform(int(*coeff_buf)[4], int(*residual_buf)[4])
{
int temp1[4] = { 0 }, temp2[4] = { 0 };
// horizontal-trans //<变换量化><4>水平变换
for (int j = 0; j < 4; j++)
{
for (int i = 0; i < 4; i++)
{
temp1[i] = coeff_buf[i][j];
}
//<变换量化><4>第一部分蝶形运算
temp2[0] = (temp1[0] + temp1[2]);
temp2[1] = (temp1[0] - temp1[2]);
temp2[2] = (temp1[1] >> 1) - temp1[3];
temp2[3] = temp1[1] + (temp1[3] >> 1);
//<变换量化><4>第二部分蝶形运算
for (int i = 0; i < 2; i++)
{
int i1 = 3 - i;
residual_buf[i][j] = temp2[i] + temp2[i1];
residual_buf[i1][j] = temp2[i] - temp2[i1];
}
}
// vertical-trans //<变换量化><4>垂直变换
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
temp1[j] = residual_buf[i][j];
}
temp2[0] = (temp1[0] + temp1[2]);
temp2[1] = (temp1[0] - temp1[2]);
temp2[2] = (temp1[1] >> 1) - temp1[3];
temp2[3] = temp1[1] + (temp1[3] >> 1);
for (int j = 0; j < 2; j++)
{
int j1 = 3 - j;
residual_buf[i][j] = temp2[j] + temp2[j1];
residual_buf[i][j1] = temp2[j] - temp2[j1];
}
}
}
疑问
蝶形运算是怎么推导而来的?有好的资料或者链接可以评论共享一下。谢谢
以上是关于H264解析Demo10变换量化_3_反变换的主要内容,如果未能解决你的问题,请参考以下文章
H264解析Demo10变换量化_1_CAVLC结果还原为系数矩阵