Пример #1
0
av_cold void ff_dsputil_init_arm(DSPContext *c, AVCodecContext *avctx)
{
    int cpu_flags = av_get_cpu_flags();

    ff_put_pixels_clamped = c->put_pixels_clamped;
    ff_add_pixels_clamped = c->add_pixels_clamped;

    if (!avctx->lowres && avctx->bits_per_raw_sample <= 8) {
        if(avctx->idct_algo == FF_IDCT_AUTO ||
           avctx->idct_algo == FF_IDCT_ARM){
            c->idct_put              = j_rev_dct_arm_put;
            c->idct_add              = j_rev_dct_arm_add;
            c->idct                  = ff_j_rev_dct_arm;
            c->idct_permutation_type = FF_LIBMPEG2_IDCT_PERM;
        } else if (avctx->idct_algo == FF_IDCT_SIMPLEARM){
            c->idct_put              = simple_idct_arm_put;
            c->idct_add              = simple_idct_arm_add;
            c->idct                  = ff_simple_idct_arm;
            c->idct_permutation_type = FF_NO_IDCT_PERM;
        }
    }

    c->add_pixels_clamped = ff_add_pixels_clamped_arm;

    if (have_armv5te(cpu_flags)) ff_dsputil_init_armv5te(c, avctx);
    if (have_armv6(cpu_flags))   ff_dsputil_init_armv6(c, avctx);
    if (have_neon(cpu_flags))    ff_dsputil_init_neon(c, avctx);
}
av_cold void ff_hpeldsp_init_arm(HpelDSPContext *c, int flags)
{
    int cpu_flags = av_get_cpu_flags();

    c->put_pixels_tab[0][0] = ff_put_pixels16_arm;
    c->put_pixels_tab[0][1] = ff_put_pixels16_x2_arm;
    c->put_pixels_tab[0][2] = ff_put_pixels16_y2_arm;
    c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_arm;
    c->put_pixels_tab[1][0] = ff_put_pixels8_arm;
    c->put_pixels_tab[1][1] = ff_put_pixels8_x2_arm;
    c->put_pixels_tab[1][2] = ff_put_pixels8_y2_arm;
    c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_arm;

    c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_arm;
    c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_arm;
    c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_arm;
    c->put_no_rnd_pixels_tab[0][3] = ff_put_no_rnd_pixels16_xy2_arm;
    c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_arm;
    c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_arm;
    c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_arm;
    c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_arm;

    if (have_armv6(cpu_flags))
        ff_hpeldsp_init_armv6(c, flags);
    if (have_neon(cpu_flags))
        ff_hpeldsp_init_neon(c, flags);
}
Пример #3
0
av_cold void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx,
                                 unsigned high_bit_depth)
{
    int cpu_flags = av_get_cpu_flags();

    if (!avctx->lowres && !high_bit_depth) {
        if ((avctx->idct_algo == FF_IDCT_AUTO && !(avctx->flags & CODEC_FLAG_BITEXACT)) ||
            avctx->idct_algo == FF_IDCT_ARM) {
            c->idct_put  = j_rev_dct_arm_put;
            c->idct_add  = j_rev_dct_arm_add;
            c->idct      = ff_j_rev_dct_arm;
            c->perm_type = FF_IDCT_PERM_LIBMPEG2;
        } else if (avctx->idct_algo == FF_IDCT_SIMPLEARM) {
            c->idct_put  = simple_idct_arm_put;
            c->idct_add  = simple_idct_arm_add;
            c->idct      = ff_simple_idct_arm;
            c->perm_type = FF_IDCT_PERM_NONE;
        }
    }

    c->add_pixels_clamped = ff_add_pixels_clamped_arm;

    if (have_armv5te(cpu_flags))
        ff_idctdsp_init_armv5te(c, avctx, high_bit_depth);
    if (have_armv6(cpu_flags))
        ff_idctdsp_init_armv6(c, avctx, high_bit_depth);
    if (have_neon(cpu_flags))
        ff_idctdsp_init_neon(c, avctx, high_bit_depth);
}
Пример #4
0
av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_vfp(cpu_flags) && have_armv6(cpu_flags)) {
        if (!have_vfpv3(cpu_flags)) {
            // These functions don't use anything armv6 specific in themselves,
            // but ff_float_to_int16_vfp which is in the same assembly source
            // file does, thus the whole file requires armv6 to be built.
            c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_vfp;
            c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_vfp;
        }

        c->float_to_int16 = ff_float_to_int16_vfp;
    }

    if (have_neon(cpu_flags)) {
        c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_neon;

        if (!(avctx->flags & CODEC_FLAG_BITEXACT)) {
            c->float_to_int16            = ff_float_to_int16_neon;
            c->float_to_int16_interleave = ff_float_to_int16_interleave_neon;
        }
    }
}
Пример #5
0
av_cold void ff_dsputil_init_arm(DSPContext *c, AVCodecContext *avctx)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_armv6(cpu_flags))
        ff_dsputil_init_armv6(c, avctx);
}
Пример #6
0
av_cold void ff_mpadsp_init_arm(MPADSPContext *s)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_armv6(cpu_flags)) {
        s->apply_window_fixed = ff_mpadsp_apply_window_fixed_armv6;
    }
}
av_cold void ff_vp8dsp_init_arm(VP8DSPContext *dsp, int vp7)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_armv6(cpu_flags))
        ff_vp8dsp_init_armv6(dsp, vp7);
    if (have_neon(cpu_flags))
        ff_vp8dsp_init_neon(dsp, vp7);
}
Пример #8
0
av_cold void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth,
                                 const int chroma_format_idc)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_armv6(cpu_flags))
        c->h264_find_start_code_candidate = ff_startcode_find_candidate_armv6;
    if (have_neon(cpu_flags))
        h264dsp_init_neon(c, bit_depth, chroma_format_idc);
}
Пример #9
0
av_cold void ff_mlpdsp_init_arm(MLPDSPContext *c)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_armv5te(cpu_flags)) {
        c->mlp_filter_channel = ff_mlp_filter_channel_arm;
        c->mlp_rematrix_channel = ff_mlp_rematrix_channel_arm;
    }
    if (have_armv6(cpu_flags))
        c->mlp_select_pack_output = mlp_select_pack_output_armv6;
}
Пример #10
0
av_cold void ff_h264dsp_init_arm(H264DSPContext *c, const int bit_depth,
                                 const int chroma_format_idc)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_armv6(cpu_flags) && !(have_vfpv3(cpu_flags) || have_neon(cpu_flags))) {
        // This function uses the 'setend' instruction which is deprecated
        // on ARMv8. This instruction is serializing on some ARMv7 cores as
        // well. Therefore, only use the function on ARMv6.
        c->h264_find_start_code_candidate = ff_startcode_find_candidate_armv6;
    }
    if (have_neon(cpu_flags))
        h264dsp_init_neon(c, bit_depth, chroma_format_idc);
}
void ff_dsputil_init_arm(DSPContext* c, AVCodecContext *avctx)
{
    const int high_bit_depth = avctx->bits_per_raw_sample > 8;
    int cpu_flags = av_get_cpu_flags();

    ff_put_pixels_clamped = c->put_pixels_clamped;
    ff_add_pixels_clamped = c->add_pixels_clamped;

    if (!avctx->lowres && avctx->bits_per_raw_sample <= 8) {
        if(avctx->idct_algo == FF_IDCT_AUTO ||
           avctx->idct_algo == FF_IDCT_ARM){
            c->idct_put              = j_rev_dct_arm_put;
            c->idct_add              = j_rev_dct_arm_add;
            c->idct                  = ff_j_rev_dct_arm;
            c->idct_permutation_type = FF_LIBMPEG2_IDCT_PERM;
        } else if (avctx->idct_algo == FF_IDCT_SIMPLEARM){
            c->idct_put              = simple_idct_arm_put;
            c->idct_add              = simple_idct_arm_add;
            c->idct                  = ff_simple_idct_arm;
            c->idct_permutation_type = FF_NO_IDCT_PERM;
        }
    }

    c->add_pixels_clamped = ff_add_pixels_clamped_arm;

    if (!high_bit_depth) {
    c->put_pixels_tab[0][0] = ff_put_pixels16_arm;
    c->put_pixels_tab[0][1] = ff_put_pixels16_x2_arm;
    c->put_pixels_tab[0][2] = ff_put_pixels16_y2_arm;
    c->put_pixels_tab[0][3] = ff_put_pixels16_xy2_arm;
    c->put_pixels_tab[1][0] = ff_put_pixels8_arm;
    c->put_pixels_tab[1][1] = ff_put_pixels8_x2_arm;
    c->put_pixels_tab[1][2] = ff_put_pixels8_y2_arm;
    c->put_pixels_tab[1][3] = ff_put_pixels8_xy2_arm;

    c->put_no_rnd_pixels_tab[0][0] = ff_put_pixels16_arm;
    c->put_no_rnd_pixels_tab[0][1] = ff_put_no_rnd_pixels16_x2_arm;
    c->put_no_rnd_pixels_tab[0][2] = ff_put_no_rnd_pixels16_y2_arm;
    c->put_no_rnd_pixels_tab[0][3] = ff_put_no_rnd_pixels16_xy2_arm;
    c->put_no_rnd_pixels_tab[1][0] = ff_put_pixels8_arm;
    c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_arm;
    c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_arm;
    c->put_no_rnd_pixels_tab[1][3] = ff_put_no_rnd_pixels8_xy2_arm;
    }

    if (have_armv5te(cpu_flags)) ff_dsputil_init_armv5te(c, avctx);
    if (have_armv6(cpu_flags))   ff_dsputil_init_armv6(c, avctx);
    if (have_neon(cpu_flags))    ff_dsputil_init_neon(c, avctx);
}
Пример #12
0
av_cold void ff_ac3dsp_init_arm(AC3DSPContext *c, int bit_exact)
{
  int cpu_flags = av_get_cpu_flags();

  c->update_bap_counts         = ff_ac3_update_bap_counts_arm;

  if (have_armv6(cpu_flags)) {
    c->bit_alloc_calc_bap    = ff_ac3_bit_alloc_calc_bap_armv6;
  }

  if (have_neon(cpu_flags)) {
    c->ac3_exponent_min      = ff_ac3_exponent_min_neon;
    c->ac3_max_msb_abs_int16 = ff_ac3_max_msb_abs_int16_neon;
    c->ac3_lshift_int16      = ff_ac3_lshift_int16_neon;
    c->ac3_rshift_int32      = ff_ac3_rshift_int32_neon;
    c->float_to_fixed24      = ff_float_to_fixed24_neon;
    c->extract_exponents     = ff_ac3_extract_exponents_neon;
    c->sum_square_butterfly_int32 = ff_ac3_sum_square_butterfly_int32_neon;
    c->sum_square_butterfly_float = ff_ac3_sum_square_butterfly_float_neon;
  }
}
Пример #13
0
av_cold void ff_fmt_convert_init_arm(FmtConvertContext *c, AVCodecContext *avctx)
{
    int cpu_flags = av_get_cpu_flags();

    if (have_vfp(cpu_flags)) {
        if (!have_vfpv3(cpu_flags)) {
            c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_vfp;
            c->int32_to_float_fmul_array8 = ff_int32_to_float_fmul_array8_vfp;
        }

        if (have_armv6(cpu_flags)) {
            c->float_to_int16 = ff_float_to_int16_vfp;
        }
    }

    if (have_neon(cpu_flags)) {
        c->int32_to_float_fmul_scalar = ff_int32_to_float_fmul_scalar_neon;

        if (!(avctx->flags & CODEC_FLAG_BITEXACT)) {
            c->float_to_int16            = ff_float_to_int16_neon;
            c->float_to_int16_interleave = ff_float_to_int16_interleave_neon;
        }
    }
}