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

📄 pixel.c

📁 从服务器上下的x264编码器C源码……希望对大家有帮助……这个是09年4月的
💻 C
📖 第 1 页 / 共 5 页
字号:
    VEC_HADAMAR( diff0v, diff1v, diff2v, diff3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diff4v, diff5v, diff6v, diff7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_ADD_ABS( temp0v, zero_s32v, satdv );    VEC_ADD_ABS( temp1v, satdv,     satdv );    VEC_ADD_ABS( temp2v, satdv,     satdv );    VEC_ADD_ABS( temp3v, satdv,     satdv );    VEC_ADD_ABS( temp4v, satdv,     satdv );    VEC_ADD_ABS( temp5v, satdv,     satdv );    VEC_ADD_ABS( temp6v, satdv,     satdv );    VEC_ADD_ABS( temp7v, satdv,     satdv );    VEC_DIFF_H( pix1, i_pix1, pix2, i_pix2, 8, diff0v, offset1v );    VEC_DIFF_H( pix1, i_pix1, pix2, i_pix2, 8, diff1v, offset2v );    VEC_DIFF_H( pix1, i_pix1, pix2, i_pix2, 8, diff2v, offset1v );    VEC_DIFF_H( pix1, i_pix1, pix2, i_pix2, 8, diff3v, offset2v );    VEC_DIFF_H( pix1, i_pix1, pix2, i_pix2, 8, diff4v, offset1v );    VEC_DIFF_H( pix1, i_pix1, pix2, i_pix2, 8, diff5v, offset2v );    VEC_DIFF_H( pix1, i_pix1, pix2, i_pix2, 8, diff6v, offset1v );    VEC_DIFF_H( pix1, i_pix1, pix2, i_pix2, 8, diff7v, offset2v );    VEC_HADAMAR( diff0v, diff1v, diff2v, diff3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diff4v, diff5v, diff6v, diff7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_TRANSPOSE_8( temp0v, temp1v, temp2v, temp3v,                     temp4v, temp5v, temp6v, temp7v,                     diff0v, diff1v, diff2v, diff3v,                     diff4v, diff5v, diff6v, diff7v );    VEC_HADAMAR( diff0v, diff1v, diff2v, diff3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diff4v, diff5v, diff6v, diff7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_ADD_ABS( temp0v, satdv,     satdv );    VEC_ADD_ABS( temp1v, satdv,     satdv );    VEC_ADD_ABS( temp2v, satdv,     satdv );    VEC_ADD_ABS( temp3v, satdv,     satdv );    VEC_ADD_ABS( temp4v, satdv,     satdv );    VEC_ADD_ABS( temp5v, satdv,     satdv );    VEC_ADD_ABS( temp6v, satdv,     satdv );    VEC_ADD_ABS( temp7v, satdv,     satdv );    satdv = vec_sums( satdv, zero_s32v );    satdv = vec_splat( satdv, 3 );    vec_ste( satdv, 0, &i_satd );    return i_satd / 2;}/*********************************************************************** * SATD 16x8 **********************************************************************/static int pixel_satd_16x8_altivec( uint8_t *pix1, int i_pix1,                                    uint8_t *pix2, int i_pix2 ){    DECLARE_ALIGNED_16( int i_satd );    LOAD_ZERO;    PREP_LOAD;    PREP_LOAD_SRC( pix2 );    vec_s32_t satdv;    vec_s16_t pix1v, pix2v;    vec_s16_t diffh0v, diffh1v, diffh2v, diffh3v,              diffh4v, diffh5v, diffh6v, diffh7v;    vec_s16_t diffl0v, diffl1v, diffl2v, diffl3v,              diffl4v, diffl5v, diffl6v, diffl7v;    vec_s16_t temp0v, temp1v, temp2v, temp3v,              temp4v, temp5v, temp6v, temp7v;    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh0v, diffl0v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh1v, diffl1v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh2v, diffl2v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh3v, diffl3v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh4v, diffl4v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh5v, diffl5v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh6v, diffl6v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh7v, diffl7v );    VEC_HADAMAR( diffh0v, diffh1v, diffh2v, diffh3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffh4v, diffh5v, diffh6v, diffh7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_TRANSPOSE_8( temp0v, temp1v, temp2v, temp3v,                     temp4v, temp5v, temp6v, temp7v,                     diffh0v, diffh1v, diffh2v, diffh3v,                     diffh4v, diffh5v, diffh6v, diffh7v );    VEC_HADAMAR( diffh0v, diffh1v, diffh2v, diffh3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffh4v, diffh5v, diffh6v, diffh7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_ADD_ABS( temp0v, zero_s32v, satdv );    VEC_ADD_ABS( temp1v, satdv,     satdv );    VEC_ADD_ABS( temp2v, satdv,     satdv );    VEC_ADD_ABS( temp3v, satdv,     satdv );    VEC_ADD_ABS( temp4v, satdv,     satdv );    VEC_ADD_ABS( temp5v, satdv,     satdv );    VEC_ADD_ABS( temp6v, satdv,     satdv );    VEC_ADD_ABS( temp7v, satdv,     satdv );    VEC_HADAMAR( diffl0v, diffl1v, diffl2v, diffl3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffl4v, diffl5v, diffl6v, diffl7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_TRANSPOSE_8( temp0v, temp1v, temp2v, temp3v,                     temp4v, temp5v, temp6v, temp7v,                     diffl0v, diffl1v, diffl2v, diffl3v,                     diffl4v, diffl5v, diffl6v, diffl7v );    VEC_HADAMAR( diffl0v, diffl1v, diffl2v, diffl3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffl4v, diffl5v, diffl6v, diffl7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_ADD_ABS( temp0v, satdv,     satdv );    VEC_ADD_ABS( temp1v, satdv,     satdv );    VEC_ADD_ABS( temp2v, satdv,     satdv );    VEC_ADD_ABS( temp3v, satdv,     satdv );    VEC_ADD_ABS( temp4v, satdv,     satdv );    VEC_ADD_ABS( temp5v, satdv,     satdv );    VEC_ADD_ABS( temp6v, satdv,     satdv );    VEC_ADD_ABS( temp7v, satdv,     satdv );    satdv = vec_sums( satdv, zero_s32v );    satdv = vec_splat( satdv, 3 );    vec_ste( satdv, 0, &i_satd );    return i_satd / 2;}/*********************************************************************** * SATD 16x16 **********************************************************************/static int pixel_satd_16x16_altivec( uint8_t *pix1, int i_pix1,                                     uint8_t *pix2, int i_pix2 ){    DECLARE_ALIGNED_16( int i_satd );    LOAD_ZERO;    PREP_LOAD;    vec_s32_t satdv;    vec_s16_t pix1v, pix2v;    vec_s16_t diffh0v, diffh1v, diffh2v, diffh3v,              diffh4v, diffh5v, diffh6v, diffh7v;    vec_s16_t diffl0v, diffl1v, diffl2v, diffl3v,              diffl4v, diffl5v, diffl6v, diffl7v;    vec_s16_t temp0v, temp1v, temp2v, temp3v,              temp4v, temp5v, temp6v, temp7v;    PREP_LOAD_SRC( pix2 );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh0v, diffl0v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh1v, diffl1v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh2v, diffl2v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh3v, diffl3v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh4v, diffl4v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh5v, diffl5v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh6v, diffl6v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh7v, diffl7v );    VEC_HADAMAR( diffh0v, diffh1v, diffh2v, diffh3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffh4v, diffh5v, diffh6v, diffh7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_TRANSPOSE_8( temp0v, temp1v, temp2v, temp3v,                     temp4v, temp5v, temp6v, temp7v,                     diffh0v, diffh1v, diffh2v, diffh3v,                     diffh4v, diffh5v, diffh6v, diffh7v );    VEC_HADAMAR( diffh0v, diffh1v, diffh2v, diffh3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffh4v, diffh5v, diffh6v, diffh7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_ADD_ABS( temp0v, zero_s32v, satdv );    VEC_ADD_ABS( temp1v, satdv,     satdv );    VEC_ADD_ABS( temp2v, satdv,     satdv );    VEC_ADD_ABS( temp3v, satdv,     satdv );    VEC_ADD_ABS( temp4v, satdv,     satdv );    VEC_ADD_ABS( temp5v, satdv,     satdv );    VEC_ADD_ABS( temp6v, satdv,     satdv );    VEC_ADD_ABS( temp7v, satdv,     satdv );    VEC_HADAMAR( diffl0v, diffl1v, diffl2v, diffl3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffl4v, diffl5v, diffl6v, diffl7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_TRANSPOSE_8( temp0v, temp1v, temp2v, temp3v,                     temp4v, temp5v, temp6v, temp7v,                     diffl0v, diffl1v, diffl2v, diffl3v,                     diffl4v, diffl5v, diffl6v, diffl7v );    VEC_HADAMAR( diffl0v, diffl1v, diffl2v, diffl3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffl4v, diffl5v, diffl6v, diffl7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_ADD_ABS( temp0v, satdv,     satdv );    VEC_ADD_ABS( temp1v, satdv,     satdv );    VEC_ADD_ABS( temp2v, satdv,     satdv );    VEC_ADD_ABS( temp3v, satdv,     satdv );    VEC_ADD_ABS( temp4v, satdv,     satdv );    VEC_ADD_ABS( temp5v, satdv,     satdv );    VEC_ADD_ABS( temp6v, satdv,     satdv );    VEC_ADD_ABS( temp7v, satdv,     satdv );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh0v, diffl0v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh1v, diffl1v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh2v, diffl2v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh3v, diffl3v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh4v, diffl4v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh5v, diffl5v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh6v, diffl6v );    VEC_DIFF_HL( pix1, i_pix1, pix2, i_pix2, diffh7v, diffl7v );    VEC_HADAMAR( diffh0v, diffh1v, diffh2v, diffh3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffh4v, diffh5v, diffh6v, diffh7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_TRANSPOSE_8( temp0v, temp1v, temp2v, temp3v,                     temp4v, temp5v, temp6v, temp7v,                     diffh0v, diffh1v, diffh2v, diffh3v,                     diffh4v, diffh5v, diffh6v, diffh7v );    VEC_HADAMAR( diffh0v, diffh1v, diffh2v, diffh3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffh4v, diffh5v, diffh6v, diffh7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_ADD_ABS( temp0v, satdv,     satdv );    VEC_ADD_ABS( temp1v, satdv,     satdv );    VEC_ADD_ABS( temp2v, satdv,     satdv );    VEC_ADD_ABS( temp3v, satdv,     satdv );    VEC_ADD_ABS( temp4v, satdv,     satdv );    VEC_ADD_ABS( temp5v, satdv,     satdv );    VEC_ADD_ABS( temp6v, satdv,     satdv );    VEC_ADD_ABS( temp7v, satdv,     satdv );    VEC_HADAMAR( diffl0v, diffl1v, diffl2v, diffl3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffl4v, diffl5v, diffl6v, diffl7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_TRANSPOSE_8( temp0v, temp1v, temp2v, temp3v,                     temp4v, temp5v, temp6v, temp7v,                     diffl0v, diffl1v, diffl2v, diffl3v,                     diffl4v, diffl5v, diffl6v, diffl7v );    VEC_HADAMAR( diffl0v, diffl1v, diffl2v, diffl3v,                 temp0v, temp1v, temp2v, temp3v );    VEC_HADAMAR( diffl4v, diffl5v, diffl6v, diffl7v,                 temp4v, temp5v, temp6v, temp7v );    VEC_ADD_ABS( temp0v, satdv,     satdv );    VEC_ADD_ABS( temp1v, satdv,     satdv );    VEC_ADD_ABS( temp2v, satdv,     satdv );    VEC_ADD_ABS( temp3v, satdv,     satdv );    VEC_ADD_ABS( temp4v, satdv,     satdv );    VEC_ADD_ABS( temp5v, satdv,     satdv );    VEC_ADD_ABS( temp6v, satdv,     satdv );    VEC_ADD_ABS( temp7v, satdv,     satdv );    satdv = vec_sums( satdv, zero_s32v );    satdv = vec_splat( satdv, 3 );    vec_ste( satdv, 0, &i_satd );    return i_satd / 2;}/************************************************************************ Interleaved SAD routines**********************************************************************/static void pixel_sad_x4_16x16_altivec( uint8_t *fenc,                                        uint8_t *pix0, uint8_t *pix1,                                        uint8_t *pix2, uint8_t *pix3,                                        int i_stride, int scores[4] ){    DECLARE_ALIGNED_16( int sum0 );    DECLARE_ALIGNED_16( int sum1 );    DECLARE_ALIGNED_16( int sum2 );    DECLARE_ALIGNED_16( int sum3 );    int y;    LOAD_ZERO;    vec_u8_t temp_lv, temp_hv;    vec_u8_t fencv, pix0v, pix1v, pix2v, pix3v;    //vec_u8_t perm0v, perm1v, perm2v, perm3v;    vec_u8_t perm0vA, perm1vA, perm2vA, perm3vA, perm0vB, perm1vB, perm2vB, perm3vB;    vec_s32_t sum0v, sum1v, sum2v, sum3v;    sum0v = vec_splat_s32(0);    sum1v = vec_splat_s32(0);    sum2v = vec_splat_s32(0);    sum3v = vec_splat_s32(0);    perm0vA = vec_lvsl(0, pix0);    perm1vA = vec_lvsl(0, pix1);    perm2vA = vec_lvsl(0, pix2);    perm3vA = vec_lvsl(0, pix3);    perm0vB = vec_lvsl(0, pix0 + i_stride);    perm1vB = vec_lvsl(0, pix1 + i_stride);    perm2vB = vec_lvsl(0, pix2 + i_stride);    perm3vB = vec_lvsl(0, pix3 + i_stride);    for (y = 0; y < 8; y++)    {        temp_lv = vec_ld(0, pix0);        temp_hv = vec_ld(16, pix0);        pix0v = vec_perm(temp_lv, temp_hv, perm0vA);        pix0 += i_stride;        temp_lv = vec_ld(0, pix1);        temp_hv = vec_ld(16, pix1);        pix1v = vec_perm(temp_lv, temp_hv, perm1vA);        pix1 += i_stride;        fencv = vec_ld(0, fenc);        fenc += FENC_STRIDE;        temp_lv = vec_ld(0, pix2);        temp_hv = vec_ld(16, pix2);        pix2v = vec_perm(temp_lv, temp_hv, perm2vA);        pix2 += i_stride;        temp_lv = vec_ld(0, pix3);        temp_hv = vec_ld(16, pix3);        pix3v = vec_perm(temp_lv, temp_hv, perm3vA);        pix3 += i_stride;        sum0v = (vec_s32_t) vec_sum4s( vec_sub( vec_max( fencv, pix0v ), vec_min( fencv, pix0v ) ), (vec_u32_t) sum0v );        sum1v = (vec_s32_t) vec_sum4s( vec_sub( vec_max( fencv, pix1v ), vec_min( fencv, pix1v ) ), (vec_u32_t) sum1v );        sum2v = (vec_s32_t) vec_sum4s( vec_sub( vec_max( fencv, pix2v ), vec_min( fencv, pix2v ) ), (vec_u32_t) sum2v );        sum3v = (vec_s32_t) vec_sum4s( vec_sub( vec_max( fencv, pix3v ), vec_min( fencv, pix3v ) ), (vec_u32_t) sum3v );        temp_lv = vec_ld(0, pix0);        temp_hv = vec_ld(16, pix0);        pix0v = vec_perm(temp_lv, temp_hv, perm0vB);        pix0 += i_stride;        temp_lv = vec_ld(0, pix1);        temp_hv = vec_ld(16, pix1);        pix1v = vec_perm(temp_lv, temp_hv, perm1vB);        pix1 += i_stride;        fencv = vec_ld(0, fenc);        fenc += FENC_STRIDE;        temp_lv = vec_ld(0, pix2);        temp_hv = vec_ld(16, pix2);        pix2v = vec_perm(temp_lv, temp_hv, perm2vB);        pix2 += i_stride;        temp_lv = vec_ld(0, pix3);        temp_hv = vec_ld(16, pix3);        pix3v = vec_perm(temp_lv, temp_hv, perm3vB);        pix3 += i_stride;        sum0v = (vec_s32_t) vec_sum4s( vec_sub( vec_max( fencv, pix0v ), vec_min( fencv, pix0v ) ), (vec_u32_t) sum0v );        sum1v = (vec_s32_t) vec_sum4s( vec_sub( vec_max( fencv, pix1v ), vec_min( fencv, pix1v ) ), (vec_u32_t) sum1v );        sum2v = (vec_s32_t) vec_sum4s( vec_sub( vec_max( fencv, pix2v ), vec_min( fencv, pix2v ) ), (vec_u32_t) sum2v );        sum3v = (vec_s32_t) vec_sum4s( vec_sub( vec_max( fencv, pix3v ), vec_min( fencv, pix3v ) ), (vec_u32_t) sum3v );

⌨️ 快捷键说明

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