av_cold void ff_h264qpel_init_ppc(H264QpelContext *c, int bit_depth) { #if HAVE_ALTIVEC const int high_bit_depth = bit_depth > 8; if (av_get_cpu_flags() & AV_CPU_FLAG_ALTIVEC) { if (!high_bit_depth) { #define dspfunc(PFX, IDX, NUM) \ c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_altivec; \ c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_altivec; \ c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_altivec; \ c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_altivec; \ c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_altivec; \ c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_altivec; \ c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_altivec; \ c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_altivec; \ c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_altivec; \ c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_altivec; \ c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_altivec; \ c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_altivec; \ c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_altivec; \ c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_altivec; \ c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_altivec; \ c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_altivec dspfunc(put_h264_qpel, 0, 16); dspfunc(avg_h264_qpel, 0, 16); #undef dspfunc } } #endif /* HAVE_ALTIVEC */ }
void dsputil_h264_init_ppc(DSPContext* c, AVCodecContext *avctx) { if (has_altivec()) { c->put_h264_chroma_pixels_tab[0] = put_h264_chroma_mc8_altivec; c->put_no_rnd_h264_chroma_pixels_tab[0] = put_no_rnd_h264_chroma_mc8_altivec; c->avg_h264_chroma_pixels_tab[0] = avg_h264_chroma_mc8_altivec; c->h264_idct_add = ff_h264_idct_add_altivec; c->h264_idct8_add = ff_h264_idct8_add_altivec; c->h264_v_loop_filter_luma= h264_v_loop_filter_luma_altivec; c->h264_h_loop_filter_luma= h264_h_loop_filter_luma_altivec; #define dspfunc(PFX, IDX, NUM) \ c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_altivec; \ c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_altivec; \ c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_altivec; \ c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_altivec; \ c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_altivec; \ c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_altivec; \ c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_altivec; \ c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_altivec; \ c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_altivec; \ c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_altivec; \ c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_altivec; \ c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_altivec; \ c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_altivec; \ c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_altivec; \ c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_altivec; \ c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_altivec dspfunc(put_h264_qpel, 0, 16); dspfunc(avg_h264_qpel, 0, 16); #undef dspfunc } }
void dsputil_h264_init_ppc(DSPContext* c, AVCodecContext *avctx) { #ifdef HAVE_ALTIVEC if (has_altivec()) { c->put_h264_chroma_pixels_tab[0] = put_h264_chroma_mc8_altivec; c->put_no_rnd_h264_chroma_pixels_tab[0] = put_no_rnd_h264_chroma_mc8_altivec; c->avg_h264_chroma_pixels_tab[0] = avg_h264_chroma_mc8_altivec; c->h264_idct8_add = ff_h264_idct8_add_altivec; #define dspfunc(PFX, IDX, NUM) \ c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_altivec; \ c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_altivec; \ c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_altivec; \ c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_altivec; \ c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_altivec; \ c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_altivec; \ c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_altivec; \ c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_altivec; \ c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_altivec; \ c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_altivec; \ c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_altivec; \ c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_altivec; \ c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_altivec; \ c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_altivec; \ c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_altivec; \ c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_altivec dspfunc(put_h264_qpel, 0, 16); dspfunc(avg_h264_qpel, 0, 16); #undef dspfunc } else #endif /* HAVE_ALTIVEC */ { // Non-AltiVec PPC optimisations // ... pending ... } }
void dsputil_init_align(DSPContext* c, AVCodecContext *avctx) { c->put_pixels_tab[0][0] = put_rnd_pixels16_o; c->put_pixels_tab[0][1] = put_rnd_pixels16_x; c->put_pixels_tab[0][2] = put_rnd_pixels16_y; c->put_pixels_tab[0][3] = put_rnd_pixels16_xy; c->put_pixels_tab[1][0] = put_rnd_pixels8_o; c->put_pixels_tab[1][1] = put_rnd_pixels8_x; c->put_pixels_tab[1][2] = put_rnd_pixels8_y; c->put_pixels_tab[1][3] = put_rnd_pixels8_xy; c->put_no_rnd_pixels_tab[0][0] = put_no_rnd_pixels16_o; c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x; c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y; c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy; c->put_no_rnd_pixels_tab[1][0] = put_no_rnd_pixels8_o; c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x; c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y; c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy; c->avg_pixels_tab[0][0] = avg_rnd_pixels16_o; c->avg_pixels_tab[0][1] = avg_rnd_pixels16_x; c->avg_pixels_tab[0][2] = avg_rnd_pixels16_y; c->avg_pixels_tab[0][3] = avg_rnd_pixels16_xy; c->avg_pixels_tab[1][0] = avg_rnd_pixels8_o; c->avg_pixels_tab[1][1] = avg_rnd_pixels8_x; c->avg_pixels_tab[1][2] = avg_rnd_pixels8_y; c->avg_pixels_tab[1][3] = avg_rnd_pixels8_xy; c->avg_no_rnd_pixels_tab[0][0] = avg_no_rnd_pixels16_o; c->avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x; c->avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y; c->avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy; c->avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8_o; c->avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x; c->avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y; c->avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy; #ifdef QPEL #define dspfunc(PFX, IDX, NUM) \ c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_c; \ c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_c; \ c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_c; \ c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_c; \ c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_c; \ c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_c; \ c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_c; \ c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_c; \ c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_c; \ c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_c; \ c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_c; \ c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_c; \ c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_c; \ c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_c; \ c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_c; \ c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_c dspfunc(put_qpel, 0, 16); dspfunc(put_no_rnd_qpel, 0, 16); dspfunc(avg_qpel, 0, 16); /* dspfunc(avg_no_rnd_qpel, 0, 16); */ dspfunc(put_qpel, 1, 8); dspfunc(put_no_rnd_qpel, 1, 8); dspfunc(avg_qpel, 1, 8); /* dspfunc(avg_no_rnd_qpel, 1, 8); */ dspfunc(put_h264_qpel, 0, 16); dspfunc(put_h264_qpel, 1, 8); dspfunc(put_h264_qpel, 2, 4); dspfunc(avg_h264_qpel, 0, 16); dspfunc(avg_h264_qpel, 1, 8); dspfunc(avg_h264_qpel, 2, 4); #undef dspfunc c->put_h264_chroma_pixels_tab[0]= put_h264_chroma_mc8_c; c->put_h264_chroma_pixels_tab[1]= put_h264_chroma_mc4_c; c->put_h264_chroma_pixels_tab[2]= put_h264_chroma_mc2_c; c->avg_h264_chroma_pixels_tab[0]= avg_h264_chroma_mc8_c; c->avg_h264_chroma_pixels_tab[1]= avg_h264_chroma_mc4_c; c->avg_h264_chroma_pixels_tab[2]= avg_h264_chroma_mc2_c; c->put_mspel_pixels_tab[0]= put_mspel8_mc00_c; c->put_mspel_pixels_tab[1]= put_mspel8_mc10_c; c->put_mspel_pixels_tab[2]= put_mspel8_mc20_c; c->put_mspel_pixels_tab[3]= put_mspel8_mc30_c; c->put_mspel_pixels_tab[4]= put_mspel8_mc02_c; c->put_mspel_pixels_tab[5]= put_mspel8_mc12_c; c->put_mspel_pixels_tab[6]= put_mspel8_mc22_c; c->put_mspel_pixels_tab[7]= put_mspel8_mc32_c; c->gmc1 = gmc1_c; c->gmc = gmc_c; #endif }
void ff_dsputil_init_align(DSPContext* c, AVCodecContext *avctx) { const int high_bit_depth = avctx->bits_per_raw_sample > 8; if (!high_bit_depth) { c->put_pixels_tab[0][0] = put_rnd_pixels16_o; c->put_pixels_tab[0][1] = put_rnd_pixels16_x; c->put_pixels_tab[0][2] = put_rnd_pixels16_y; c->put_pixels_tab[0][3] = put_rnd_pixels16_xy; c->put_pixels_tab[1][0] = put_rnd_pixels8_o; c->put_pixels_tab[1][1] = put_rnd_pixels8_x; c->put_pixels_tab[1][2] = put_rnd_pixels8_y; c->put_pixels_tab[1][3] = put_rnd_pixels8_xy; c->put_no_rnd_pixels_tab[0][0] = put_no_rnd_pixels16_o; c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x; c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y; c->put_no_rnd_pixels_tab[0][3] = put_no_rnd_pixels16_xy; c->put_no_rnd_pixels_tab[1][0] = put_no_rnd_pixels8_o; c->put_no_rnd_pixels_tab[1][1] = put_no_rnd_pixels8_x; c->put_no_rnd_pixels_tab[1][2] = put_no_rnd_pixels8_y; c->put_no_rnd_pixels_tab[1][3] = put_no_rnd_pixels8_xy; c->avg_pixels_tab[0][0] = avg_rnd_pixels16_o; c->avg_pixels_tab[0][1] = avg_rnd_pixels16_x; c->avg_pixels_tab[0][2] = avg_rnd_pixels16_y; c->avg_pixels_tab[0][3] = avg_rnd_pixels16_xy; c->avg_pixels_tab[1][0] = avg_rnd_pixels8_o; c->avg_pixels_tab[1][1] = avg_rnd_pixels8_x; c->avg_pixels_tab[1][2] = avg_rnd_pixels8_y; c->avg_pixels_tab[1][3] = avg_rnd_pixels8_xy; c->avg_no_rnd_pixels_tab[0][0] = avg_no_rnd_pixels16_o; c->avg_no_rnd_pixels_tab[0][1] = avg_no_rnd_pixels16_x; c->avg_no_rnd_pixels_tab[0][2] = avg_no_rnd_pixels16_y; c->avg_no_rnd_pixels_tab[0][3] = avg_no_rnd_pixels16_xy; c->avg_no_rnd_pixels_tab[1][0] = avg_no_rnd_pixels8_o; c->avg_no_rnd_pixels_tab[1][1] = avg_no_rnd_pixels8_x; c->avg_no_rnd_pixels_tab[1][2] = avg_no_rnd_pixels8_y; c->avg_no_rnd_pixels_tab[1][3] = avg_no_rnd_pixels8_xy; } #ifdef QPEL #define dspfunc(PFX, IDX, NUM) \ c->PFX ## _pixels_tab[IDX][ 0] = PFX ## NUM ## _mc00_sh4; \ c->PFX ## _pixels_tab[IDX][ 1] = PFX ## NUM ## _mc10_sh4; \ c->PFX ## _pixels_tab[IDX][ 2] = PFX ## NUM ## _mc20_sh4; \ c->PFX ## _pixels_tab[IDX][ 3] = PFX ## NUM ## _mc30_sh4; \ c->PFX ## _pixels_tab[IDX][ 4] = PFX ## NUM ## _mc01_sh4; \ c->PFX ## _pixels_tab[IDX][ 5] = PFX ## NUM ## _mc11_sh4; \ c->PFX ## _pixels_tab[IDX][ 6] = PFX ## NUM ## _mc21_sh4; \ c->PFX ## _pixels_tab[IDX][ 7] = PFX ## NUM ## _mc31_sh4; \ c->PFX ## _pixels_tab[IDX][ 8] = PFX ## NUM ## _mc02_sh4; \ c->PFX ## _pixels_tab[IDX][ 9] = PFX ## NUM ## _mc12_sh4; \ c->PFX ## _pixels_tab[IDX][10] = PFX ## NUM ## _mc22_sh4; \ c->PFX ## _pixels_tab[IDX][11] = PFX ## NUM ## _mc32_sh4; \ c->PFX ## _pixels_tab[IDX][12] = PFX ## NUM ## _mc03_sh4; \ c->PFX ## _pixels_tab[IDX][13] = PFX ## NUM ## _mc13_sh4; \ c->PFX ## _pixels_tab[IDX][14] = PFX ## NUM ## _mc23_sh4; \ c->PFX ## _pixels_tab[IDX][15] = PFX ## NUM ## _mc33_sh4 dspfunc(put_qpel, 0, 16); dspfunc(put_no_rnd_qpel, 0, 16); dspfunc(avg_qpel, 0, 16); /* dspfunc(avg_no_rnd_qpel, 0, 16); */ dspfunc(put_qpel, 1, 8); dspfunc(put_no_rnd_qpel, 1, 8); dspfunc(avg_qpel, 1, 8); /* dspfunc(avg_no_rnd_qpel, 1, 8); */ if (!high_bit_depth) { dspfunc(put_h264_qpel, 0, 16); dspfunc(put_h264_qpel, 1, 8); dspfunc(put_h264_qpel, 2, 4); dspfunc(avg_h264_qpel, 0, 16); dspfunc(avg_h264_qpel, 1, 8); dspfunc(avg_h264_qpel, 2, 4); } #undef dspfunc if (!high_bit_depth) { c->put_h264_chroma_pixels_tab[0]= put_h264_chroma_mc8_sh4; c->put_h264_chroma_pixels_tab[1]= put_h264_chroma_mc4_sh4; c->put_h264_chroma_pixels_tab[2]= put_h264_chroma_mc2_sh4; c->avg_h264_chroma_pixels_tab[0]= avg_h264_chroma_mc8_sh4; c->avg_h264_chroma_pixels_tab[1]= avg_h264_chroma_mc4_sh4; c->avg_h264_chroma_pixels_tab[2]= avg_h264_chroma_mc2_sh4; } c->put_mspel_pixels_tab[0]= put_mspel8_mc00_sh4; c->put_mspel_pixels_tab[1]= put_mspel8_mc10_sh4; c->put_mspel_pixels_tab[2]= put_mspel8_mc20_sh4; c->put_mspel_pixels_tab[3]= put_mspel8_mc30_sh4; c->put_mspel_pixels_tab[4]= put_mspel8_mc02_sh4; c->put_mspel_pixels_tab[5]= put_mspel8_mc12_sh4; c->put_mspel_pixels_tab[6]= put_mspel8_mc22_sh4; c->put_mspel_pixels_tab[7]= put_mspel8_mc32_sh4; c->gmc1 = gmc1_c; #endif }