void ff_diracdsp_init_x86(DiracDSPContext* c) { int mm_flags = av_get_cpu_flags(); if (EXTERNAL_MMX(mm_flags)) { c->add_dirac_obmc[0] = ff_add_dirac_obmc8_mmx; #if !ARCH_X86_64 c->add_dirac_obmc[1] = ff_add_dirac_obmc16_mmx; c->add_dirac_obmc[2] = ff_add_dirac_obmc32_mmx; c->dirac_hpel_filter = dirac_hpel_filter_mmx; c->add_rect_clamped = ff_add_rect_clamped_mmx; c->put_signed_rect_clamped[0] = (void *)ff_put_signed_rect_clamped_mmx; #endif PIXFUNC(put, 0, mmx); PIXFUNC(avg, 0, mmx); } if (EXTERNAL_MMXEXT(mm_flags)) { PIXFUNC(avg, 0, mmxext); } if (EXTERNAL_SSE2(mm_flags)) { c->dirac_hpel_filter = dirac_hpel_filter_sse2; c->add_rect_clamped = ff_add_rect_clamped_sse2; c->put_signed_rect_clamped[0] = (void *)ff_put_signed_rect_clamped_sse2; c->add_dirac_obmc[1] = ff_add_dirac_obmc16_sse2; c->add_dirac_obmc[2] = ff_add_dirac_obmc32_sse2; c->put_dirac_pixels_tab[1][0] = ff_put_dirac_pixels16_sse2; c->avg_dirac_pixels_tab[1][0] = ff_avg_dirac_pixels16_sse2; c->put_dirac_pixels_tab[2][0] = ff_put_dirac_pixels32_sse2; c->avg_dirac_pixels_tab[2][0] = ff_avg_dirac_pixels32_sse2; } }
void ff_diracdsp_init_mmx(DiracDSPContext* c) { int mm_flags = av_get_cpu_flags(); if (!(mm_flags & AV_CPU_FLAG_MMX)) return; #if HAVE_YASM c->add_dirac_obmc[0] = ff_add_dirac_obmc8_mmx; #if !ARCH_X86_64 c->add_dirac_obmc[1] = ff_add_dirac_obmc16_mmx; c->add_dirac_obmc[2] = ff_add_dirac_obmc32_mmx; c->dirac_hpel_filter = dirac_hpel_filter_mmx; c->add_rect_clamped = ff_add_rect_clamped_mmx; c->put_signed_rect_clamped = ff_put_signed_rect_clamped_mmx; #endif #endif #if HAVE_MMX_INLINE PIXFUNC(put, 0, mmx); PIXFUNC(avg, 0, mmx); #endif #if HAVE_MMXEXT_INLINE if (mm_flags & AV_CPU_FLAG_MMX2) { PIXFUNC(avg, 0, mmxext); } #endif if (mm_flags & AV_CPU_FLAG_SSE2) { #if HAVE_YASM c->dirac_hpel_filter = dirac_hpel_filter_sse2; c->add_rect_clamped = ff_add_rect_clamped_sse2; c->put_signed_rect_clamped = ff_put_signed_rect_clamped_sse2; c->add_dirac_obmc[1] = ff_add_dirac_obmc16_sse2; c->add_dirac_obmc[2] = ff_add_dirac_obmc32_sse2; #endif #if HAVE_SSE2_INLINE c->put_dirac_pixels_tab[1][0] = ff_put_dirac_pixels16_sse2; c->avg_dirac_pixels_tab[1][0] = ff_avg_dirac_pixels16_sse2; c->put_dirac_pixels_tab[2][0] = ff_put_dirac_pixels32_sse2; c->avg_dirac_pixels_tab[2][0] = ff_avg_dirac_pixels32_sse2; #endif } }
av_cold void ff_diracdsp_init(DiracDSPContext *c) { c->dirac_hpel_filter = dirac_hpel_filter; c->add_rect_clamped = add_rect_clamped_c; c->put_signed_rect_clamped[0] = put_signed_rect_clamped_8bit_c; c->put_signed_rect_clamped[1] = put_signed_rect_clamped_10bit_c; c->put_signed_rect_clamped[2] = put_signed_rect_clamped_12bit_c; c->add_dirac_obmc[0] = add_obmc8_c; c->add_dirac_obmc[1] = add_obmc16_c; c->add_dirac_obmc[2] = add_obmc32_c; c->weight_dirac_pixels_tab[0] = weight_dirac_pixels8_c; c->weight_dirac_pixels_tab[1] = weight_dirac_pixels16_c; c->weight_dirac_pixels_tab[2] = weight_dirac_pixels32_c; c->biweight_dirac_pixels_tab[0] = biweight_dirac_pixels8_c; c->biweight_dirac_pixels_tab[1] = biweight_dirac_pixels16_c; c->biweight_dirac_pixels_tab[2] = biweight_dirac_pixels32_c; PIXFUNC(put, 8); PIXFUNC(put, 16); PIXFUNC(put, 32); PIXFUNC(avg, 8); PIXFUNC(avg, 16); PIXFUNC(avg, 32); if (HAVE_MMX && HAVE_YASM) ff_diracdsp_init_mmx(c); }