编辑: lqwzrs | 2019-07-04 |
else t->imgUV[block8x8-4][t->mb.pix_c_y+yy][t->mb.pix_c_x+xx]= (uint8_t)curr_blk[yy][xx];
} } 程序中,将亮度和色度块的判别放在了解码子块循环内,解码一个亮度8x8块样本值需要进行64次是否为亮度块的判断,而实际上只需一次,这样的重复判断是没有必要的;
二维的数据存储方式增加了位置索引复杂度;
对于系数全零的8x8块显然无必要参与重构.针对这些缺陷,本文解决方法:将亮度和色度块判断提前到循环体外,分开解码;
将二维的数据存储结构改进为一维存储;
对于全零残差系数8x8块,在系数熵解码时参考CBP值用一个比特位加以标记,判断为全零则跳过反变换函数,以及重构时直接将预测数据作为最终样本值.以亮度块为例,改进后代码实现片段如下所示: if (t->coeff[block8x8] == 0) for(i=0;
i