⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image.cpp

📁 h264编解码.用C++实现了图像的编解码功能。
💻 CPP
📖 第 1 页 / 共 2 页
字号:

  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 + -