h264idct.c
来自「This the source release kit for the foll」· C语言 代码 · 共 458 行 · 第 1/2 页
C
458 行
void ff_h264_lowres_idct_add_c(uint8_t *dst, int stride, DCTELEM *block){
idct_internal(dst, block, stride, 8, 3, 1);
}
void ff_h264_lowres_idct_put_c(uint8_t *dst, int stride, DCTELEM *block){
idct_internal(dst, block, stride, 8, 3, 0);
}
void ff_h264_idct8_add_c(uint8_t *dst, DCTELEM *block, int stride){
int i;
DCTELEM (*src)[8] = (DCTELEM(*)[8])block;
uint8_t *cm = cropTbl + MAX_NEG_CROP;
block[0] += 32;
#if 1
for( i = 0; i < 8; i++ )
{
#if 1
const int a0 = src[i][0] + src[i][4];
const int a2 = src[i][0] - src[i][4];
const int a4 = (src[i][2]>>1) - src[i][6];
const int a6 = (src[i][6]>>1) + src[i][2];
#else
const t0=src[i][0];
const t1=src[i][1];
const t2=src[i][2];
const t3=src[i][3];
const t4=src[i][4];
const t5=src[i][5];
const t6=src[i][6];
const t7=src[i][7];
const int a0 = t0 + t4;
const int a2 = t0 - t4;
const int a4 = (t2>>1) -t6;
const int a6 = (t6>>1) + t2;
#endif
const int b0 = a0 + a6;
const int b2 = a2 + a4;
const int b4 = a2 - a4;
const int b6 = a0 - a6;
#if 1
const int a1 = -src[i][3] + src[i][5] - src[i][7] - (src[i][7]>>1);
const int a3 = src[i][1] + src[i][7] - src[i][3] - (src[i][3]>>1);
const int a5 = -src[i][1] + src[i][7] + src[i][5] + (src[i][5]>>1);
const int a7 = src[i][3] + src[i][5] + src[i][1] + (src[i][1]>>1);
#else
const int a1 = -t3 + t5 - t7 - (t7>>1);
const int a3 = t1 +t7 - t3 - (t3>>1);
const int a5 = -t1 + t7 + t5 + (t5>>1);
const int a7 = t3 + t5 + t1 + (t1>>1);
#endif
const int b1 = (a7>>2) + a1;
const int b3 = a3 + (a5>>2);
const int b5 = (a3>>2) - a5;
const int b7 = a7 - (a1>>2);
src[i][0] = b0 + b7;
src[i][7] = b0 - b7;
src[i][1] = b2 + b5;
src[i][6] = b2 - b5;
src[i][2] = b4 + b3;
src[i][5] = b4 - b3;
src[i][3] = b6 + b1;
src[i][4] = b6 - b1;
}
for( i = 0; i < 8; i++ )
{
#if 1
const int a0 = src[0][i] + src[4][i];
const int a2 = src[0][i] - src[4][i];
const int a4 = (src[2][i]>>1) - src[6][i];
const int a6 = (src[6][i]>>1) + src[2][i];
#else
const t0=src[0][i];
const t1=src[1][i];
const t2=src[2][i];
const t3=src[3][i];
const t4=src[4][i];
const t5=src[5][i];
const t6=src[6][i];
const t7=src[7][i];
const int a0 = t0 + t4;
const int a2 = t0 - t4;
const int a4 = (t2>>1) -t6;
const int a6 = (t6>>1) + t2;
#endif
const int b0 = a0 + a6;
const int b2 = a2 + a4;
const int b4 = a2 - a4;
const int b6 = a0 - a6;
#if 1
const int a1 = -src[3][i] + src[5][i] - src[7][i] - (src[7][i]>>1);
const int a3 = src[1][i] + src[7][i] - src[3][i] - (src[3][i]>>1);
const int a5 = -src[1][i] + src[7][i] + src[5][i] + (src[5][i]>>1);
const int a7 = src[3][i] + src[5][i] + src[1][i] + (src[1][i]>>1);
#else
const int a1 = -t3 + t5 - t7 - (t7>>1);
const int a3 = t1 +t7 - t3 - (t3>>1);
const int a5 = -t1 + t7 + t5 + (t5>>1);
const int a7 = t3 + t5 + t1 + (t1>>1);
#endif
const int b1 = (a7>>2) + a1;
const int b3 = a3 + (a5>>2);
const int b5 = (a3>>2) - a5;
const int b7 = a7 - (a1>>2);
dst[i + 0*stride] = cm[ dst[i + 0*stride] + ((b0 + b7) >> 6) ];
dst[i + 1*stride] = cm[ dst[i + 1*stride] + ((b2 + b5) >> 6) ];
dst[i + 2*stride] = cm[ dst[i + 2*stride] + ((b4 + b3) >> 6) ];
dst[i + 3*stride] = cm[ dst[i + 3*stride] + ((b6 + b1) >> 6) ];
dst[i + 4*stride] = cm[ dst[i + 4*stride] + ((b6 - b1) >> 6) ];
dst[i + 5*stride] = cm[ dst[i + 5*stride] + ((b4 - b3) >> 6) ];
dst[i + 6*stride] = cm[ dst[i + 6*stride] + ((b2 - b5) >> 6) ];
dst[i + 7*stride] = cm[ dst[i + 7*stride] + ((b0 - b7) >> 6) ];
}
#else
int a0 ;
int a1 ;
int a2 ;
int a3 ;
int a4 ;
int a5 ;
int a6 ;
int a7 ;
int b0 ;
int b1 ;
int b2 ;
int b3 ;
int b4 ;
int b5 ;
int b6 ;
int b7 ;
H264_IDCT8_DC_ADD_I(0);
H264_IDCT8_DC_ADD_I(1);
H264_IDCT8_DC_ADD_I(2);
H264_IDCT8_DC_ADD_I(3);
H264_IDCT8_DC_ADD_I(4);
H264_IDCT8_DC_ADD_I(5);
H264_IDCT8_DC_ADD_I(6);
H264_IDCT8_DC_ADD_I(7);
H264_IDCT8_DC_ADD_II(0);
H264_IDCT8_DC_ADD_II(1);
H264_IDCT8_DC_ADD_II(2);
H264_IDCT8_DC_ADD_II(3);
H264_IDCT8_DC_ADD_II(4);
H264_IDCT8_DC_ADD_II(5);
H264_IDCT8_DC_ADD_II(6);
H264_IDCT8_DC_ADD_II(7);
#endif
}
// assumes all AC coefs are 0
void ff_h264_idct_dc_add_c(uint8_t *dst, DCTELEM *block, int stride){
int i, j;
uint8_t *cm = cropTbl + MAX_NEG_CROP;
int dc = (block[0] + 32) >> 6;
#if 0
for( j = 0; j < 4; j++ )
{
for( i = 0; i < 4; i++ )
dst[i] = cm[ dst[i] + dc ];
dst += stride;
}
#else
i = 2*stride;
j = 3*stride;
//FF_H264_IDCT_DC_ADD_M(0);
dst[0] = cm[ dst[0] + dc ];
dst[1] = cm[ dst[1] + dc ];
dst[2] = cm[ dst[2] + dc ];
dst[3] = cm[ dst[3] + dc ];
//FF_H264_IDCT_DC_ADD_M(1);
dst[0+stride] = cm[ dst[0+stride] + dc ];
dst[1+stride] = cm[ dst[1+stride] + dc ];
dst[2+stride] = cm[ dst[2+stride] + dc ];
dst[3+stride] = cm[ dst[3+stride] + dc ];
//FF_H264_IDCT_DC_ADD_M(2);
dst[0+i] = cm[ dst[0+i] + dc ];
dst[1+i] = cm[ dst[1+i] + dc ];
dst[2+i] = cm[ dst[2+i] + dc ];
dst[3+i] = cm[ dst[3+i] + dc ];
//FF_H264_IDCT_DC_ADD_M(3);
dst[0+j] = cm[ dst[0+j] + dc ];
dst[1+j] = cm[ dst[1+j] + dc ];
dst[2+j] = cm[ dst[2+j] + dc ];
dst[3+j] = cm[ dst[3+j] + dc ];
#endif
}
void ff_h264_idct8_dc_add_c(uint8_t *dst, DCTELEM *block, int stride){
int i, j;
uint8_t *cm = cropTbl + MAX_NEG_CROP;
int dc = (block[0] + 32) >> 6;
#if 1
for( j = 0; j < 8; j++ )
{
for( i = 0; i < 8; i++ )
dst[i] = cm[ dst[i] + dc ];
dst += stride;
}
#else
FF_H264_IDCT8_DC_ADD_M(0);
FF_H264_IDCT8_DC_ADD_M(1);
FF_H264_IDCT8_DC_ADD_M(2);
FF_H264_IDCT8_DC_ADD_M(3);
FF_H264_IDCT8_DC_ADD_M(4);
FF_H264_IDCT8_DC_ADD_M(5);
FF_H264_IDCT8_DC_ADD_M(6);
FF_H264_IDCT8_DC_ADD_M(7);
#endif
}
#endif /* ] */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?