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

📄 dsputil.c

📁 手机端的H264源码
💻 C
📖 第 1 页 / 共 5 页
字号:
    int i,j;
    for (i=0; i < height; i++) {
      for (j=0; j < width; j++) {
	dst[j] = (dst[j] + ((2731*(4*src[j] + 3*src[j+1] + 3*src[j+stride] + 2*src[j+stride+1] + 6)) >> 15) + 1) >> 1;
      }
      src += stride;
      dst += stride;
    }
}
static __inline void avg_tpel_pixels_mc12_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
    int i,j;
    for (i=0; i < height; i++) {
      for (j=0; j < width; j++) {
	dst[j] = (dst[j] + ((2731*(3*src[j] + 2*src[j+1] + 4*src[j+stride] + 3*src[j+stride+1] + 6)) >> 15) + 1) >> 1;
      }
      src += stride;
      dst += stride;
    }
}
static __inline void avg_tpel_pixels_mc02_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
    int i,j;
    for (i=0; i < height; i++) {
      for (j=0; j < width; j++) {
	dst[j] = (dst[j] + ((683*(src[j] + 2*src[j+stride] + 1)) >> 11) + 1) >> 1;
      }
      src += stride;
      dst += stride;
    }
}
static __inline void avg_tpel_pixels_mc21_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
    int i,j;
    for (i=0; i < height; i++) {
      for (j=0; j < width; j++) {
	dst[j] = (dst[j] + ((2731*(3*src[j] + 4*src[j+1] + 2*src[j+stride] + 3*src[j+stride+1] + 6)) >> 15) + 1) >> 1;
      }
      src += stride;
      dst += stride;
    }
}
static __inline void avg_tpel_pixels_mc22_c(uint8_t *dst, const uint8_t *src, int stride, int width, int height){
    int i,j;
    for (i=0; i < height; i++) {
      for (j=0; j < width; j++) {
	dst[j] = (dst[j] + ((2731*(2*src[j] + 3*src[j+1] + 3*src[j+stride] + 4*src[j+stride+1] + 6)) >> 15) + 1) >> 1;
      }
      src += stride;
      dst += stride;
    }
}

static void put_h264_chroma_mc2_c(uint8_t *dst , uint8_t *src , int stride, int h, int x, int y){ const int A=(8-x)*(8-y); const int B=( x)*(8-y); const int C=(8-x)*( y); const int D=( x)*( y); int i; (void)( (x<8 && y<8 && x>=0 && y>=0) || (OutputDebugStringW(L"\r\n*** ASSERTION FAILED in " L".\\dsputil.c" L"(" L"1144" L"):\r\n" L"x<8 && y<8 && x>=0 && y>=0" L"\r\n"), __debugbreak(), 0 ) ); for(i=0; i<h; i++) { dst[0] = ((((A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1])) + 32)>>6); dst[1] = ((((A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2])) + 32)>>6); dst+= stride; src+= stride; }}static void put_h264_chroma_mc4_c(uint8_t *dst , uint8_t *src , int stride, int h, int x, int y){ const int A=(8-x)*(8-y); const int B=( x)*(8-y); const int C=(8-x)*( y); const int D=( x)*( y); int i; (void)( (x<8 && y<8 && x>=0 && y>=0) || (OutputDebugStringW(L"\r\n*** ASSERTION FAILED in " L".\\dsputil.c" L"(" L"1144" L"):\r\n" L"x<8 && y<8 && x>=0 && y>=0" L"\r\n"), __debugbreak(), 0 ) ); for(i=0; i<h; i++) { dst[0] = ((((A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1])) + 32)>>6); dst[1] = ((((A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2])) + 32)>>6); dst[2] = ((((A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3])) + 32)>>6); dst[3] = ((((A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4])) + 32)>>6); dst+= stride; src+= stride; }}static void put_h264_chroma_mc8_c(uint8_t *dst , uint8_t *src , int stride, int h, int x, int y){ const int A=(8-x)*(8-y); const int B=( x)*(8-y); const int C=(8-x)*( y); const int D=( x)*( y); int i; (void)( (x<8 && y<8 && x>=0 && y>=0) || (OutputDebugStringW(L"\r\n*** ASSERTION FAILED in " L".\\dsputil.c" L"(" L"1144" L"):\r\n" L"x<8 && y<8 && x>=0 && y>=0" L"\r\n"), __debugbreak(), 0 ) ); for(i=0; i<h; i++) { dst[0] = ((((A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1])) + 32)>>6); dst[1] = ((((A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2])) + 32)>>6); dst[2] = ((((A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3])) + 32)>>6); dst[3] = ((((A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4])) + 32)>>6); dst[4] = ((((A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5])) + 32)>>6); dst[5] = ((((A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6])) + 32)>>6); dst[6] = ((((A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7])) + 32)>>6); dst[7] = ((((A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8])) + 32)>>6); dst+= stride; src+= stride; }}
static void avg_h264_chroma_mc2_c(uint8_t *dst , uint8_t *src , int stride, int h, int x, int y){ const int A=(8-x)*(8-y); const int B=( x)*(8-y); const int C=(8-x)*( y); const int D=( x)*( y); int i; (void)( (x<8 && y<8 && x>=0 && y>=0) || (OutputDebugStringW(L"\r\n*** ASSERTION FAILED in " L".\\dsputil.c" L"(" L"1145" L"):\r\n" L"x<8 && y<8 && x>=0 && y>=0" L"\r\n"), __debugbreak(), 0 ) ); for(i=0; i<h; i++) { dst[0] = (((dst[0])+((((A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1])) + 32)>>6)+1)>>1); dst[1] = (((dst[1])+((((A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2])) + 32)>>6)+1)>>1); dst+= stride; src+= stride; }}static void avg_h264_chroma_mc4_c(uint8_t *dst , uint8_t *src , int stride, int h, int x, int y){ const int A=(8-x)*(8-y); const int B=( x)*(8-y); const int C=(8-x)*( y); const int D=( x)*( y); int i; (void)( (x<8 && y<8 && x>=0 && y>=0) || (OutputDebugStringW(L"\r\n*** ASSERTION FAILED in " L".\\dsputil.c" L"(" L"1145" L"):\r\n" L"x<8 && y<8 && x>=0 && y>=0" L"\r\n"), __debugbreak(), 0 ) ); for(i=0; i<h; i++) { dst[0] = (((dst[0])+((((A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1])) + 32)>>6)+1)>>1); dst[1] = (((dst[1])+((((A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2])) + 32)>>6)+1)>>1); dst[2] = (((dst[2])+((((A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3])) + 32)>>6)+1)>>1); dst[3] = (((dst[3])+((((A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4])) + 32)>>6)+1)>>1); dst+= stride; src+= stride; }}static void avg_h264_chroma_mc8_c(uint8_t *dst , uint8_t *src , int stride, int h, int x, int y){ const int A=(8-x)*(8-y); const int B=( x)*(8-y); const int C=(8-x)*( y); const int D=( x)*( y); int i; (void)( (x<8 && y<8 && x>=0 && y>=0) || (OutputDebugStringW(L"\r\n*** ASSERTION FAILED in " L".\\dsputil.c" L"(" L"1145" L"):\r\n" L"x<8 && y<8 && x>=0 && y>=0" L"\r\n"), __debugbreak(), 0 ) ); for(i=0; i<h; i++) { dst[0] = (((dst[0])+((((A*src[0] + B*src[1] + C*src[stride+0] + D*src[stride+1])) + 32)>>6)+1)>>1); dst[1] = (((dst[1])+((((A*src[1] + B*src[2] + C*src[stride+1] + D*src[stride+2])) + 32)>>6)+1)>>1); dst[2] = (((dst[2])+((((A*src[2] + B*src[3] + C*src[stride+2] + D*src[stride+3])) + 32)>>6)+1)>>1); dst[3] = (((dst[3])+((((A*src[3] + B*src[4] + C*src[stride+3] + D*src[stride+4])) + 32)>>6)+1)>>1); dst[4] = (((dst[4])+((((A*src[4] + B*src[5] + C*src[stride+4] + D*src[stride+5])) + 32)>>6)+1)>>1); dst[5] = (((dst[5])+((((A*src[5] + B*src[6] + C*src[stride+5] + D*src[stride+6])) + 32)>>6)+1)>>1); dst[6] = (((dst[6])+((((A*src[6] + B*src[7] + C*src[stride+6] + D*src[stride+7])) + 32)>>6)+1)>>1); dst[7] = (((dst[7])+((((A*src[7] + B*src[8] + C*src[stride+7] + D*src[stride+8])) + 32)>>6)+1)>>1); dst+= stride; src+= stride; }}


static __inline void copy_block4(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
{
    int i;
    for(i=0; i<h; i++)
    {
        //ST32(dst   , LD32(src   ));
		memcpy(dst,src,sizeof(src));
        dst+=dstStride;
        src+=srcStride;
    }
}
static __inline void copy_block8(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
{
    int i;
    for(i=0; i<h; i++)
    {
		//ST32(dst   , LD32(src   ));
        //ST32(dst+4 , LD32(src+4 ));
		memcpy(dst,src,sizeof(src));
		memcpy(dst+4,src+4,sizeof(src));
        dst+=dstStride;
        src+=srcStride;
    }
}
static __inline void copy_block16(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
{
    int i;
    for(i=0; i<h; i++)
    {
        //ST32(dst   , LD32(src   ));
        //ST32(dst+4 , LD32(src+4 ));
        //ST32(dst+8 , LD32(src+8 ));
        //ST32(dst+12, LD32(src+12));
		memcpy(dst,src,sizeof(src));
		memcpy(dst+4,src+4,sizeof(src));
		memcpy(dst+8,src+8,sizeof(src));
		memcpy(dst+12,src+12,sizeof(src));
        dst+=dstStride;
        src+=srcStride;
    }
}
static __inline void copy_block17(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
{
    int i;
    for(i=0; i<h; i++)
    {
        //ST32(dst   , LD32(src   ));
        //ST32(dst+4 , LD32(src+4 ));
        //ST32(dst+8 , LD32(src+8 ));
        //ST32(dst+12, LD32(src+12));
		//ST32(dst   , LD32(src   ));
        //ST32(dst+4 , LD32(src+4 ));
        //ST32(dst+8 , LD32(src+8 ));
        //ST32(dst+12, LD32(src+12));
		memcpy(dst,src,sizeof(src));
		memcpy(dst+4,src+4,sizeof(src));
		memcpy(dst+8,src+8,sizeof(src));
		memcpy(dst+12,src+12,sizeof(src));
        dst[16]= src[16];
        dst+=dstStride;
        src+=srcStride;
    }
}
static __inline void copy_block9(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h)
{
    int i;
    for(i=0; i<h; i++)
    {
        //ST32(dst   , LD32(src   ));
        //ST32(dst+4 , LD32(src+4 ));
		memcpy(dst,src,sizeof(src));
		memcpy(dst+4,src+4,sizeof(src));
        dst[8]= src[8];
        dst+=dstStride;
        src+=srcStride;
    }
}

static void put_mpeg4_qpel8_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){ uint8_t *cm = cropTbl + 384; int i; for(i=0; i<h; i++) { dst[0] = cm[(((src[0]+src[1])*20 - (src[0]+src[2])*6 + (src[1]+src[3])*3 - (src[2]+src[4])) + 16)>>5]; dst[1] = cm[(((src[1]+src[2])*20 - (src[0]+src[3])*6 + (src[0]+src[4])*3 - (src[1]+src[5])) + 16)>>5]; dst[2] = cm[(((src[2]+src[3])*20 - (src[1]+src[4])*6 + (src[0]+src[5])*3 - (src[0]+src[6])) + 16)>>5]; dst[3] = cm[(((src[3]+src[4])*20 - (src[2]+src[5])*6 + (src[1]+src[6])*3 - (src[0]+src[7])) + 16)>>5]; dst[4] = cm[(((src[4]+src[5])*20 - (src[3]+src[6])*6 + (src[2]+src[7])*3 - (src[1]+src[8])) + 16)>>5]; dst[5] = cm[(((src[5]+src[6])*20 - (src[4]+src[7])*6 + (src[3]+src[8])*3 - (src[2]+src[8])) + 16)>>5]; dst[6] = cm[(((src[6]+src[7])*20 - (src[5]+src[8])*6 + (src[4]+src[8])*3 - (src[3]+src[7])) + 16)>>5]; dst[7] = cm[(((src[7]+src[8])*20 - (src[6]+src[8])*6 + (src[5]+src[7])*3 - (src[4]+src[6])) + 16)>>5]; dst+=dstStride; src+=srcStride; }}static void put_mpeg4_qpel8_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ const int w=8; uint8_t *cm = cropTbl + 384; int i; for(i=0; i<w; i++) { const int src0= src[0*srcStride]; const int src1= src[1*srcStride]; const int src2= src[2*srcStride]; const int src3= src[3*srcStride]; const int src4= src[4*srcStride]; const int src5= src[5*srcStride]; const int src6= src[6*srcStride]; const int src7= src[7*srcStride]; const int src8= src[8*srcStride]; dst[0*dstStride] = cm[(((src0+src1)*20 - (src0+src2)*6 + (src1+src3)*3 - (src2+src4)) + 16)>>5]; dst[1*dstStride] = cm[(((src1+src2)*20 - (src0+src3)*6 + (src0+src4)*3 - (src1+src5)) + 16)>>5]; dst[2*dstStride] = cm[(((src2+src3)*20 - (src1+src4)*6 + (src0+src5)*3 - (src0+src6)) + 16)>>5]; dst[3*dstStride] = cm[(((src3+src4)*20 - (src2+src5)*6 + (src1+src6)*3 - (src0+src7)) + 16)>>5]; dst[4*dstStride] = cm[(((src4+src5)*20 - (src3+src6)*6 + (src2+src7)*3 - (src1+src8)) + 16)>>5]; dst[5*dstStride] = cm[(((src5+src6)*20 - (src4+src7)*6 + (src3+src8)*3 - (src2+src8)) + 16)>>5]; dst[6*dstStride] = cm[(((src6+src7)*20 - (src5+src8)*6 + (src4+src8)*3 - (src3+src7)) + 16)>>5]; dst[7*dstStride] = cm[(((src7+src8)*20 - (src6+src8)*6 + (src5+src7)*3 - (src4+src6)) + 16)>>5]; dst++; src++; }}static void put_mpeg4_qpel16_h_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride, int h){ uint8_t *cm = cropTbl + 384; int i; for(i=0; i<h; i++) { dst[ 0] = cm[(((src[ 0]+src[ 1])*20 - (src[ 0]+src[ 2])*6 + (src[ 1]+src[ 3])*3 - (src[ 2]+src[ 4])) + 16)>>5]; dst[ 1] = cm[(((src[ 1]+src[ 2])*20 - (src[ 0]+src[ 3])*6 + (src[ 0]+src[ 4])*3 - (src[ 1]+src[ 5])) + 16)>>5]; dst[ 2] = cm[(((src[ 2]+src[ 3])*20 - (src[ 1]+src[ 4])*6 + (src[ 0]+src[ 5])*3 - (src[ 0]+src[ 6])) + 16)>>5]; dst[ 3] = cm[(((src[ 3]+src[ 4])*20 - (src[ 2]+src[ 5])*6 + (src[ 1]+src[ 6])*3 - (src[ 0]+src[ 7])) + 16)>>5]; dst[ 4] = cm[(((src[ 4]+src[ 5])*20 - (src[ 3]+src[ 6])*6 + (src[ 2]+src[ 7])*3 - (src[ 1]+src[ 8])) + 16)>>5]; dst[ 5] = cm[(((src[ 5]+src[ 6])*20 - (src[ 4]+src[ 7])*6 + (src[ 3]+src[ 8])*3 - (src[ 2]+src[ 9])) + 16)>>5]; dst[ 6] = cm[(((src[ 6]+src[ 7])*20 - (src[ 5]+src[ 8])*6 + (src[ 4]+src[ 9])*3 - (src[ 3]+src[10])) + 16)>>5]; dst[ 7] = cm[(((src[ 7]+src[ 8])*20 - (src[ 6]+src[ 9])*6 + (src[ 5]+src[10])*3 - (src[ 4]+src[11])) + 16)>>5]; dst[ 8] = cm[(((src[ 8]+src[ 9])*20 - (src[ 7]+src[10])*6 + (src[ 6]+src[11])*3 - (src[ 5]+src[12])) + 16)>>5]; dst[ 9] = cm[(((src[ 9]+src[10])*20 - (src[ 8]+src[11])*6 + (src[ 7]+src[12])*3 - (src[ 6]+src[13])) + 16)>>5]; dst[10] = cm[(((src[10]+src[11])*20 - (src[ 9]+src[12])*6 + (src[ 8]+src[13])*3 - (src[ 7]+src[14])) + 16)>>5]; dst[11] = cm[(((src[11]+src[12])*20 - (src[10]+src[13])*6 + (src[ 9]+src[14])*3 - (src[ 8]+src[15])) + 16)>>5]; dst[12] = cm[(((src[12]+src[13])*20 - (src[11]+src[14])*6 + (src[10]+src[15])*3 - (src[ 9]+src[16])) + 16)>>5]; dst[13] = cm[(((src[13]+src[14])*20 - (src[12]+src[15])*6 + (src[11]+src[16])*3 - (src[10]+src[16])) + 16)>>5]; dst[14] = cm[(((src[14]+src[15])*20 - (src[13]+src[16])*6 + (src[12]+src[16])*3 - (src[11]+src[15])) + 16)>>5]; dst[15] = cm[(((src[15]+src[16])*20 - (src[14]+src[16])*6 + (src[13]+src[15])*3 - (src[12]+src[14])) + 16)>>5]; dst+=dstStride; src+=srcStride; }}static void put_mpeg4_qpel16_v_lowpass(uint8_t *dst, uint8_t *src, int dstStride, int srcStride){ uint8_t *cm = cropTbl + 384; int i; const int w=16; for(i=0; i<w; i++) { const int src0= src[0*srcStride]; const int src1= src[1*srcStride]; const int src2= src[2*srcStride]; const int src3= src[3*srcStride]; const int src4= src[4*srcStride]; const int src5= src[5*srcStride]; const int src6= src[6*srcStride]; const int src7= src[7*srcStride]; const int src8= src[8*srcStride]; const int src9= src[9*srcStride]; const int src10= src[10*srcStride]; const int src11= src[11*srcStride]; const int src12= src[12*srcStride]; const int src13= src[13*srcStride]; const int src14= src[14*srcStride]; const int src15= src[15*srcStride]; const int src16= src[16*srcStride]; dst[ 0*dstStride] = cm[(((src0 +src1 )*20 - (src0 +src2 )*6 + (src1 +src3 )*3 - (src2 +src4 )) + 16)>>5]; dst[ 1*dstStride] = cm[(((src1 +src2 )*20 - (src0 +src3 )*6 + (src0 +src4 )*3 - (src1 +src5 )) + 16)>>5]; dst[ 2*dstStride] = cm[(((src2 +src3 )*20 - (src1 +src4 )*6 + (src0 +src5 )*3 - (src0 +src6 )) + 16)>>5]; dst[ 3*dstStride] = cm[(((src3 +src4 )*20 - (src2 +src5 )*6 + (src1 +src6 )*3 - (src0 +src7 )) + 16)>>5]; dst[ 4*dstStride] = cm[(((src4 +src5 )*20 - (src3 +src6 )*6 + (src2 +src7 )*3 - (src1 +src8 )) + 16)>>5]; dst[ 5*dstStride] = cm[(((src5 +src6 )*20 - (src4 +src7 )*6 + (src3 +src8 )*3 - (src2 +src9 )) + 16)>>5]; dst[ 6*dstStride] = cm[(((src6 +src7 )*20 - (src5 +src8 )*6 + (src4 +src9 )*3 - (src3 +src10)) + 16)>>5]; dst[ 7*

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -