一、DPCM编解码原理
DPCM是差分预测编码调制的缩写,是比较典型的预测编码系统。
需要注意的是,预测器的输入是已经解码以后的样本(即重构样本)。之所以不用原始样本来做预测,是因为在解码端无法得到原始样本,只能得到存在误差的样本。因此,在DPCM编码器中实际内嵌了一个解码器。
当采用左侧预测时,在第一个样本输入时,我们假定误差值第一列都为128(已量化),重构图像值为原始样本值。当第二个样本输入,此原始样本减去上一个重构样本,得到未经量化的误差值,经过量化后得到第二个的量化误差(第一个是128嘛,我们以行为单位看)。而此时我们将量化误差反量化得到误差,加上前一个重构样本得到此时的重构样本。这就得到了量化误差图像和重构图像(仅有y,我们也可以自己写入uv)。
二、主要代码分析
1、我们选择在yuv2rgb文件里面加入编码器,为了直接用新鲜出炉的y数据流
unsigned char *rexn,*en;//开的空间 rexn为重建值 en为量化误差值
unsigned char *rexnn,*enn;//指针
int p1,p2;//中间变量
float p3;//中间变量
2、给他们开辟空间
rexn=(unsigned char *)rex;//空间大小在main函数中定义
en=(unsigned char *)e;
3、编码过程
rexnn = rexn;
enn = en;
y=y_buffer;
for(i=0;i<y_dim;i++)
{
for(j=0;j<x_dim;j++)
{
if(j==0)//第一列特殊
{
*(enn+i*x_dim)=128;//量化误差给128
*(rexnn+i*x_dim)=*(y+i*x_dim);//重建值给原值
}
else
{
p1=0;
p1=*(y+j+i*x_dim)-*(rexnn+j-1