📄 image.cpp
字号:
byte* restrict i02;
int p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15;
int p16,p17,p18,pp1,pp2;
//1/2 pixel interpolation
for (i=0; i < width; i++)
{
i02 = Eipol[8]+i;
p00=o0[0];
p01=o1[0];
p02=o2[0];
p03=o3[0];
p04=o4[0];
p05=o5[0];
p06=o6[0];
p07=o7[0];
p08=o8[0];
p09=o9[0];
p10=o10[0];
p11=o11[0];
p12=o12[0];
p13=o13[0];
p14=o14[0];
p15=o15[0];
p16=o15[width];
p17=o15[width2];
p18=o15[width3];
pp1=pp2=p00;
i02[0]=TAP6FILTER1(pp2,pp1,p00,p01,p02,p03);i02+=width;
i02[0]=TAP6FILTER1(pp1,p00,p01,p02,p03,p04);i02+=width;
i02[0]=TAP6FILTER1(p00,p01,p02,p03,p04,p05);i02+=width;
i02[0]=TAP6FILTER1(p01,p02,p03,p04,p05,p06);i02+=width;
i02[0]=TAP6FILTER1(p02,p03,p04,p05,p06,p07);i02+=width;
i02[0]=TAP6FILTER1(p03,p04,p05,p06,p07,p08);i02+=width;
i02[0]=TAP6FILTER1(p04,p05,p06,p07,p08,p09);i02+=width;
i02[0]=TAP6FILTER1(p05,p06,p07,p08,p09,p10);i02+=width;
i02[0]=TAP6FILTER1(p06,p07,p08,p09,p10,p11);i02+=width;
i02[0]=TAP6FILTER1(p07,p08,p09,p10,p11,p12);i02+=width;
i02[0]=TAP6FILTER1(p08,p09,p10,p11,p12,p13);i02+=width;
i02[0]=TAP6FILTER1(p09,p10,p11,p12,p13,p14);i02+=width;
i02[0]=TAP6FILTER1(p10,p11,p12,p13,p14,p15);i02+=width;
i02[0]=TAP6FILTER1(p11,p12,p13,p14,p15,p16);i02+=width;
i02[0]=TAP6FILTER1(p12,p13,p14,p15,p16,p17);i02+=width;
i02[0]=TAP6FILTER1(p13,p14,p15,p16,p17,p18);i02+=width;
o0++; o1++; o2++; o3++;
o4++; o5++; o6++; o7++;
o8++; o9++; o10++; o11++;
o12++; o13++; o14++; o15++;//i02++;
}
o0 +=width16; o1 +=width16; o2 +=width16; o3 +=width16;
o4 +=width16; o5 +=width16; o6 +=width16; o7 +=width16;
o8 +=width16; o9 +=width16; o10+=width16; o11+=width16;
o12+=width16; o13+=width16; o14+=width16; o15+=width16;//i02+=width16;
for (j=16; j < height-16; j+=16)
{
width4=j*width;
for (i=0; i < width; i++)
{
i02 = Eipol[8]+width4+i;
pp2=o0[-width2];
pp1=o0[-width];
p00=o0[0];
p01=o1[0];
p02=o2[0];
p03=o3[0];
p04=o4[0];
p05=o5[0];
p06=o6[0];
p07=o7[0];
p08=o8[0];
p09=o9[0];
p10=o10[0];
p11=o11[0];
p12=o12[0];
p13=o13[0];
p14=o14[0];
p15=o15[0];
p16=o15[width];
p17=o15[width2];
p18=o15[width3];
i02[0]=TAP6FILTER1(pp2,pp1,p00,p01,p02,p03);//i02+=width;
i02[width]=TAP6FILTER1(pp1,p00,p01,p02,p03,p04);i02+=width2;
i02[0]=TAP6FILTER1(p00,p01,p02,p03,p04,p05);//i02+=width;
i02[width]=TAP6FILTER1(p01,p02,p03,p04,p05,p06);i02+=width2;
i02[0]=TAP6FILTER1(p02,p03,p04,p05,p06,p07);//i02+=width;
i02[width]=TAP6FILTER1(p03,p04,p05,p06,p07,p08);i02+=width2;
i02[0]=TAP6FILTER1(p04,p05,p06,p07,p08,p09);//i02+=width;
i02[width]=TAP6FILTER1(p05,p06,p07,p08,p09,p10);i02+=width2;
i02[0]=TAP6FILTER1(p06,p07,p08,p09,p10,p11);//i02+=width;
i02[width]=TAP6FILTER1(p07,p08,p09,p10,p11,p12);i02+=width2;
i02[0]=TAP6FILTER1(p08,p09,p10,p11,p12,p13);//i02+=width;
i02[width]=TAP6FILTER1(p09,p10,p11,p12,p13,p14);i02+=width2;
i02[0]=TAP6FILTER1(p10,p11,p12,p13,p14,p15);//i02+=width;
i02[width]=TAP6FILTER1(p11,p12,p13,p14,p15,p16);i02+=width2;
i02[0]=TAP6FILTER1(p12,p13,p14,p15,p16,p17);//i02+=width;
i02[width]=TAP6FILTER1(p13,p14,p15,p16,p17,p18);i02+=width2;
o0++; o1++; o2++; o3++;
o4++; o5++; o6++; o7++;
o8++; o9++; o10++; o11++;
o12++; o13++; o14++; o15++;
}
o0 +=width16; o1 +=width16; o2 +=width16; o3 +=width16;
o4 +=width16; o5 +=width16; o6 +=width16; o7 +=width16;
o8 +=width16; o9 +=width16; o10+=width16; o11+=width16;
o12+=width16; o13+=width16; o14+=width16; o15+=width16;i02+=width16;
}
width16=(height-8)*width;
for (i=0; i < width; i++)
{
i02 = Eipol[8]+width16+i;
pp2=o0[-width2];
pp1=o0[-width];
p00=o0[0];
p01=o1[0];
p02=o2[0];
p03=o3[0];
p04=o4[0];
p05=o5[0];
p06=o6[0];
p07=o7[0];
p08=p09=p10=p07;
i02[0]=TAP6FILTER1(pp2,pp1,p00,p01,p02,p03);i02+=width;
i02[0]=TAP6FILTER1(pp1,p00,p01,p02,p03,p04);i02+=width;
i02[0]=TAP6FILTER1(p00,p01,p02,p03,p04,p05);i02+=width;
i02[0]=TAP6FILTER1(p01,p02,p03,p04,p05,p06);i02+=width;
i02[0]=TAP6FILTER1(p02,p03,p04,p05,p06,p07);i02+=width;
i02[0]=TAP6FILTER1(p03,p04,p05,p06,p07,p08);i02+=width;
i02[0]=TAP6FILTER1(p04,p05,p06,p07,p08,p09);i02+=width;
i02[0]=TAP6FILTER1(p05,p06,p07,p08,p09,p10);//i02+=width;
o0++; o1++; o2++; o3++;
o4++; o5++; o6++; o7++;
}
}
void onehalfpix2(struct img_par *img)
{
int i,j;
int width=img->width+IMG_PAD_SIZE;
int height=img->height+IMG_PAD_SIZE;
int offset1,offset2;
int* restrict itmp;
byte* restrict i22;
int p00,p01,p02,p03,p04,p05,p06,p07,p08,p09,p10,p11,p12,p13,p14,p15;
int p16,p17,p18,pp1,pp2;
//1/2 pixel interpolation
for (i=0; i < width; i++)
{
itmp=imgY_tmp+i;
i22=Eipol[10]+i;
p00=itmp[0];itmp+=width;
p01=itmp[0];itmp+=width;
p02=itmp[0];itmp+=width;
p03=itmp[0];itmp+=width;
p04=itmp[0];itmp+=width;
p05=itmp[0];itmp+=width;
p06=itmp[0];itmp+=width;
p07=itmp[0];itmp+=width;
p08=itmp[0];itmp+=width;
p09=itmp[0];itmp+=width;
p10=itmp[0];itmp+=width;
p11=itmp[0];itmp+=width;
p12=itmp[0];itmp+=width;
p13=itmp[0];itmp+=width;
p14=itmp[0];itmp+=width;
p15=itmp[0];itmp+=width;
p16=itmp[0];itmp+=width;
p17=itmp[0];itmp+=width;
p18=itmp[0];//itmp+=width;
pp1=pp2=p00;
i22[0]=TAP6FILTER2(pp2,pp1,p00,p01,p02,p03);i22+=width;
i22[0]=TAP6FILTER2(pp1,p00,p01,p02,p03,p04);i22+=width;
i22[0]=TAP6FILTER2(p00,p01,p02,p03,p04,p05);i22+=width;
i22[0]=TAP6FILTER2(p01,p02,p03,p04,p05,p06);i22+=width;
i22[0]=TAP6FILTER2(p02,p03,p04,p05,p06,p07);i22+=width;
i22[0]=TAP6FILTER2(p03,p04,p05,p06,p07,p08);i22+=width;
i22[0]=TAP6FILTER2(p04,p05,p06,p07,p08,p09);i22+=width;
i22[0]=TAP6FILTER2(p05,p06,p07,p08,p09,p10);i22+=width;
i22[0]=TAP6FILTER2(p06,p07,p08,p09,p10,p11);i22+=width;
i22[0]=TAP6FILTER2(p07,p08,p09,p10,p11,p12);i22+=width;
i22[0]=TAP6FILTER2(p08,p09,p10,p11,p12,p13);i22+=width;
i22[0]=TAP6FILTER2(p09,p10,p11,p12,p13,p14);i22+=width;
i22[0]=TAP6FILTER2(p10,p11,p12,p13,p14,p15);i22+=width;
i22[0]=TAP6FILTER2(p11,p12,p13,p14,p15,p16);i22+=width;
i22[0]=TAP6FILTER2(p12,p13,p14,p15,p16,p17);i22+=width;
i22[0]=TAP6FILTER2(p13,p14,p15,p16,p17,p18);//i22+=width;
}
for (j=16; j < height-16; j+=16)
{
offset1=(j-2)*width;
offset2=j*width;
for (i=0; i < width; i++)
{
itmp=imgY_tmp+offset1+i;
i22=Eipol[10]+offset2+i;
pp2=itmp[0];itmp+=width;
pp1=itmp[0];itmp+=width;
p00=itmp[0];itmp+=width;
p01=itmp[0];itmp+=width;
p02=itmp[0];itmp+=width;
p03=itmp[0];itmp+=width;
p04=itmp[0];itmp+=width;
p05=itmp[0];itmp+=width;
p06=itmp[0];itmp+=width;
p07=itmp[0];itmp+=width;
p08=itmp[0];itmp+=width;
p09=itmp[0];itmp+=width;
p10=itmp[0];itmp+=width;
p11=itmp[0];itmp+=width;
p12=itmp[0];itmp+=width;
p13=itmp[0];itmp+=width;
p14=itmp[0];itmp+=width;
p15=itmp[0];itmp+=width;
p16=itmp[0];itmp+=width;
p17=itmp[0];itmp+=width;
p18=itmp[0];//itmp+=width;
i22[0]=TAP6FILTER2(pp2,pp1,p00,p01,p02,p03);i22+=width;
i22[0]=TAP6FILTER2(pp1,p00,p01,p02,p03,p04);i22+=width;
i22[0]=TAP6FILTER2(p00,p01,p02,p03,p04,p05);i22+=width;
i22[0]=TAP6FILTER2(p01,p02,p03,p04,p05,p06);i22+=width;
i22[0]=TAP6FILTER2(p02,p03,p04,p05,p06,p07);i22+=width;
i22[0]=TAP6FILTER2(p03,p04,p05,p06,p07,p08);i22+=width;
i22[0]=TAP6FILTER2(p04,p05,p06,p07,p08,p09);i22+=width;
i22[0]=TAP6FILTER2(p05,p06,p07,p08,p09,p10);i22+=width;
i22[0]=TAP6FILTER2(p06,p07,p08,p09,p10,p11);i22+=width;
i22[0]=TAP6FILTER2(p07,p08,p09,p10,p11,p12);i22+=width;
i22[0]=TAP6FILTER2(p08,p09,p10,p11,p12,p13);i22+=width;
i22[0]=TAP6FILTER2(p09,p10,p11,p12,p13,p14);i22+=width;
i22[0]=TAP6FILTER2(p10,p11,p12,p13,p14,p15);i22+=width;
i22[0]=TAP6FILTER2(p11,p12,p13,p14,p15,p16);i22+=width;
i22[0]=TAP6FILTER2(p12,p13,p14,p15,p16,p17);i22+=width;
i22[0]=TAP6FILTER2(p13,p14,p15,p16,p17,p18);//i22+=width;
}
}
offset1=(height-10)*width;
offset2=(height-8)*width;
for (i=0; i < width; i++)
{
itmp=imgY_tmp+offset1+i;
i22=Eipol[10]+offset2+i;
pp2=itmp[0];itmp+=width;
pp1=itmp[0];itmp+=width;
p00=itmp[0];itmp+=width;
p01=itmp[0];itmp+=width;
p02=itmp[0];itmp+=width;
p03=itmp[0];itmp+=width;
p04=itmp[0];itmp+=width;
p05=itmp[0];itmp+=width;
p06=itmp[0];itmp+=width;
p07=itmp[0];//itmp+=width;
p08=p09=p10=p07;
i22[0]=TAP6FILTER2(pp2,pp1,p00,p01,p02,p03);i22+=width;
i22[0]=TAP6FILTER2(pp1,p00,p01,p02,p03,p04);i22+=width;
i22[0]=TAP6FILTER2(p00,p01,p02,p03,p04,p05);i22+=width;
i22[0]=TAP6FILTER2(p01,p02,p03,p04,p05,p06);i22+=width;
i22[0]=TAP6FILTER2(p02,p03,p04,p05,p06,p07);i22+=width;
i22[0]=TAP6FILTER2(p03,p04,p05,p06,p07,p08);i22+=width;
i22[0]=TAP6FILTER2(p04,p05,p06,p07,p08,p09);i22+=width;
i22[0]=TAP6FILTER2(p05,p06,p07,p08,p09,p10);//i22+=width;
}
}
void oneforthpix(struct img_par *img)
{
int i,j;
int width=img->width+IMG_PAD_SIZE;
int height=img->height+IMG_PAD_SIZE;
int width1;
byte* restrict o00 = EimgY;
byte* restrict o01 = EimgY + width;
byte* restrict o20 = Eipol[2];
byte* restrict o21 = Eipol[2] + width;
byte* restrict o02 = Eipol[8];
byte* restrict o22 = Eipol[10];
byte* restrict i10=Eipol[1];
byte* restrict i30=Eipol[3];
byte* restrict i01=Eipol[4];
byte* restrict i11=Eipol[5];
byte* restrict i21=Eipol[6];
byte* restrict i31=Eipol[7];
byte* restrict i12=Eipol[9];
byte* restrict i32=Eipol[11];
byte* restrict i03=Eipol[12];
byte* restrict i13=Eipol[13];
byte* restrict i23=Eipol[14];
byte* restrict i33=Eipol[15];
int p0,p1,p2,p3,p4,q0,q1,q2,q3,q4;
int b0,b1,b2,b3,h0,h1,h2,h3,h4,j0,j1,j2,j3,s0,s1,s2,s3;
onehalfpix(img);
onehalfpix1(img);
onehalfpix2(img);
for (j = 0; j < height; j++)
{
for (i = 0; i < width; i+=4)
{
p0=o00[0]; q0=o01[0]; h0=o02[0];
p1=o00[1]; q1=o01[1]; h1=o02[1];
p2=o00[2]; q2=o01[2]; h2=o02[2];
p3=o00[3]; q3=o01[3]; h3=o02[3];
p4=o00[4]; q4=o01[4]; h4=o02[4];
b0=o20[0]; s0=o21[0]; j0=o22[0];
b1=o20[1]; s1=o21[1]; j1=o22[1];
b2=o20[2]; s2=o21[2]; j2=o22[2];
b3=o20[3]; s3=o21[3]; j3=o22[3];
i10[0]=IAVGONEP(p0,b0);
i10[1]=IAVGONEP(p1,b1);
i10[2]=IAVGONEP(p2,b2);
i10[3]=IAVGONEP(p3,b3);
i30[0]=IAVGONEP(p1,b0);
i30[1]=IAVGONEP(p2,b1);
i30[2]=IAVGONEP(p3,b2);
i30[3]=IAVGONEP(p4,b3);
i01[0]=IAVGONEP(p0,h0);
i01[1]=IAVGONEP(p1,h1);
i01[2]=IAVGONEP(p2,h2);
i01[3]=IAVGONEP(p3,h3);
i11[0]=IAVGONEP(b0,h0);
i11[1]=IAVGONEP(b1,h1);
i11[2]=IAVGONEP(b2,h2);
i11[3]=IAVGONEP(b3,h3);
i21[0]=IAVGONEP(b0,j0);
i21[1]=IAVGONEP(b1,j1);
i21[2]=IAVGONEP(b2,j2);
i21[3]=IAVGONEP(b3,j3);
i31[0]=IAVGONEP(b0,h1);
i31[1]=IAVGONEP(b1,h2);
i31[2]=IAVGONEP(b2,h3);
i31[3]=IAVGONEP(b3,h4);
i12[0]=IAVGONEP(h0,j0);
i12[1]=IAVGONEP(h1,j1);
i12[2]=IAVGONEP(h2,j2);
i12[3]=IAVGONEP(h3,j3);
i32[0]=IAVGONEP(j0,h1);
i32[1]=IAVGONEP(j1,h2);
i32[2]=IAVGONEP(j2,h3);
i32[3]=IAVGONEP(j3,h4);
i03[0]=IAVGONEP(h0,q0);
i03[1]=IAVGONEP(h1,q1);
i03[2]=IAVGONEP(h2,q2);
i03[3]=IAVGONEP(h3,q3);
i13[0]=IAVGONEP(s0,h0);
i13[1]=IAVGONEP(s1,h1);
i13[2]=IAVGONEP(s2,h2);
i13[3]=IAVGONEP(s3,h3);
i23[0]=IAVGONEP(j0,s0);
i23[1]=IAVGONEP(j1,s1);
i23[2]=IAVGONEP(j2,s2);
i23[3]=IAVGONEP(j3,s3);
i33[0]=IAVGONEP(s0,h1);
i33[1]=IAVGONEP(s1,h2);
i33[2]=IAVGONEP(s2,h3);
i33[3]=IAVGONEP(s3,h4);
o00+=4;o01+=4;o20+=4;o21+=4;o02+=4;o22+=4;
i10+=4;i30+=4;i01+=4;i11+=4;i21+=4;i31+=4;
i12+=4;i32+=4;i03+=4;i13+=4;i23+=4;i33+=4;
}
}
// Chroma:extension
width1=img->width_cr+IMG_PAD_SIZE;
width=img->width_cr;
height=img->height_cr;
o00 = imgUV[0];
p0=o00[0];
o00[-4]=p0;o00[-3]=p0;o00[-2]=p0;o00[-1]=p0;
o00+=width;
p0=o00[-1];
o00[0]=p0;o00[1]=p0;o00[2]=p0;o00[3]=p0;
o00 -= (width+4);
for(j=0;j<5;j++)
{
memcpy(o00-j*width1,o00,width1);
}
o00 += (width1+4);
for(j=1;j<height;j++)
{
p0=o00[0];
o00[-4]=p0;o00[-3]=p0;o00[-2]=p0;o00[-1]=p0;
o00+=width;
p0=o00[-1];
o00[0]=p0;o00[1]=p0;o00[2]=p0;o00[3]=p0;
o00+=IMG_PAD_SIZE;
}
o00 -= (width1+4);
for(j=1;j<5;j++)
{
memcpy(o00+j*width1,o00,width1);
}
o00 = imgUV[1];
p0=o00[0];
o00[-4]=p0;o00[-3]=p0;o00[-2]=p0;o00[-1]=p0;
o00+=width;
p0=o00[-1];
o00[0]=p0;o00[1]=p0;o00[2]=p0;o00[3]=p0;
o00 -= (width+4);
for(j=0;j<5;j++)
{
memcpy(o00-j*width1,o00,width1);
}
o00 += (width1+4);
for(j=1;j<height;j++)
{
p0=o00[0];
o00[-4]=p0;o00[-3]=p0;o00[-2]=p0;o00[-1]=p0;
o00+=width;
p0=o00[-1];
o00[0]=p0;o00[1]=p0;o00[2]=p0;o00[3]=p0;
o00+=IMG_PAD_SIZE;
}
o00 -= (width1+4);
for(j=1;j<5;j++)
{
memcpy(o00+j*width1,o00,width1);
}
height+=IMG_PAD_SIZE;
memcpy(Emcef[0],EimgUV[0],width1*height);
memcpy(Emcef[1],EimgUV[1],width1*height);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -