Merge remote-tracking branch 'qatar/master'
* qatar/master: dcadsp: split lfe_dir cases Conflicts: libavcodec/arm/dcadsp_init_arm.c See: 45854df9a5220bdde400a447f63f61618b89dde2 Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
		
						commit
						5794e9fce2
					
				@ -24,16 +24,22 @@
 | 
			
		||||
#include "libavutil/attributes.h"
 | 
			
		||||
#include "libavcodec/dcadsp.h"
 | 
			
		||||
 | 
			
		||||
void ff_dca_lfe_fir_vfp(float *out, const float *in, const float *coefs,
 | 
			
		||||
                        int decifactor, float scale);
 | 
			
		||||
void ff_dca_lfe_fir0_neon(float *out, const float *in, const float *coefs,
 | 
			
		||||
                          float scale);
 | 
			
		||||
void ff_dca_lfe_fir1_neon(float *out, const float *in, const float *coefs,
 | 
			
		||||
                          float scale);
 | 
			
		||||
 | 
			
		||||
void ff_dca_lfe_fir32_vfp(float *out, const float *in, const float *coefs,
 | 
			
		||||
                          float scale);
 | 
			
		||||
void ff_dca_lfe_fir64_vfp(float *out, const float *in, const float *coefs,
 | 
			
		||||
                          float scale);
 | 
			
		||||
 | 
			
		||||
void ff_dca_qmf_32_subbands_vfp(float samples_in[32][8], int sb_act,
 | 
			
		||||
                                SynthFilterContext *synth, FFTContext *imdct,
 | 
			
		||||
                                float synth_buf_ptr[512],
 | 
			
		||||
                                int *synth_buf_offset, float synth_buf2[32],
 | 
			
		||||
                                const float window[512], float *samples_out,
 | 
			
		||||
                                float raXin[32], float scale);
 | 
			
		||||
void ff_dca_lfe_fir_neon(float *out, const float *in, const float *coefs,
 | 
			
		||||
                         int decifactor, float scale);
 | 
			
		||||
 | 
			
		||||
void ff_synth_filter_float_vfp(FFTContext *imdct,
 | 
			
		||||
                               float *synth_buf_ptr, int *synth_buf_offset,
 | 
			
		||||
@ -47,42 +53,18 @@ void ff_synth_filter_float_neon(FFTContext *imdct,
 | 
			
		||||
                                float out[32], const float in[32],
 | 
			
		||||
                                float scale);
 | 
			
		||||
 | 
			
		||||
static void lfe_fir0_vfp(float *out, const float *in, const float *coefs,
 | 
			
		||||
                         float scale)
 | 
			
		||||
{
 | 
			
		||||
    ff_dca_lfe_fir_vfp(out, in, coefs, 32, scale);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void lfe_fir1_vfp(float *out, const float *in, const float *coefs,
 | 
			
		||||
                         float scale)
 | 
			
		||||
{
 | 
			
		||||
    ff_dca_lfe_fir_vfp(out, in, coefs, 64, scale);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void lfe_fir0_neon(float *out, const float *in, const float *coefs,
 | 
			
		||||
                          float scale)
 | 
			
		||||
{
 | 
			
		||||
    ff_dca_lfe_fir_neon(out, in, coefs, 32, scale);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void lfe_fir1_neon(float *out, const float *in, const float *coefs,
 | 
			
		||||
                          float scale)
 | 
			
		||||
{
 | 
			
		||||
    ff_dca_lfe_fir_neon(out, in, coefs, 64, scale);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
av_cold void ff_dcadsp_init_arm(DCADSPContext *s)
 | 
			
		||||
{
 | 
			
		||||
    int cpu_flags = av_get_cpu_flags();
 | 
			
		||||
 | 
			
		||||
    if (have_vfp(cpu_flags) && !have_vfpv3(cpu_flags)) {
 | 
			
		||||
        s->lfe_fir[0]      = lfe_fir0_vfp;
 | 
			
		||||
        s->lfe_fir[1]      = lfe_fir1_vfp;
 | 
			
		||||
        s->lfe_fir[0]      = ff_dca_lfe_fir32_vfp;
 | 
			
		||||
        s->lfe_fir[1]      = ff_dca_lfe_fir64_vfp;
 | 
			
		||||
        s->qmf_32_subbands = ff_dca_qmf_32_subbands_vfp;
 | 
			
		||||
    }
 | 
			
		||||
    if (have_neon(cpu_flags)) {
 | 
			
		||||
        s->lfe_fir[0] = lfe_fir0_neon;
 | 
			
		||||
        s->lfe_fir[1] = lfe_fir1_neon;
 | 
			
		||||
        s->lfe_fir[0] = ff_dca_lfe_fir0_neon;
 | 
			
		||||
        s->lfe_fir[1] = ff_dca_lfe_fir1_neon;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,17 +20,23 @@
 | 
			
		||||
 | 
			
		||||
#include "libavutil/arm/asm.S"
 | 
			
		||||
 | 
			
		||||
function ff_dca_lfe_fir_neon, export=1
 | 
			
		||||
function ff_dca_lfe_fir0_neon, export=1
 | 
			
		||||
        push            {r4-r6,lr}
 | 
			
		||||
NOVFP   vmov            s0,  r3                 @ scale
 | 
			
		||||
        mov             r3,  #32                @ decifactor
 | 
			
		||||
        mov             r6,  #256/32
 | 
			
		||||
        b               dca_lfe_fir
 | 
			
		||||
endfunc
 | 
			
		||||
 | 
			
		||||
function ff_dca_lfe_fir1_neon, export=1
 | 
			
		||||
        push            {r4-r6,lr}
 | 
			
		||||
NOVFP   vmov            s0,  r3                 @ scale
 | 
			
		||||
        mov             r3,  #64                @ decifactor
 | 
			
		||||
        mov             r6,  #256/64
 | 
			
		||||
dca_lfe_fir:
 | 
			
		||||
        add             r4,  r0,  r3,  lsl #2   @ out2
 | 
			
		||||
        add             r5,  r2,  #256*4-16     @ cf1
 | 
			
		||||
        sub             r1,  r1,  #12
 | 
			
		||||
        cmp             r3,  #32
 | 
			
		||||
        ite             eq
 | 
			
		||||
        moveq           r6,  #256/32
 | 
			
		||||
        movne           r6,  #256/64
 | 
			
		||||
NOVFP   vldr            s0,  [sp, #16]          @ scale
 | 
			
		||||
        mov             lr,  #-16
 | 
			
		||||
1:
 | 
			
		||||
        vmov.f32        q2,  #0.0               @ v0
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,6 @@
 | 
			
		||||
POUT          .req    a1
 | 
			
		||||
PIN           .req    a2
 | 
			
		||||
PCOEF         .req    a3
 | 
			
		||||
DECIFACTOR    .req    a4
 | 
			
		||||
OLDFPSCR      .req    a4
 | 
			
		||||
COUNTER       .req    ip
 | 
			
		||||
 | 
			
		||||
@ -129,6 +128,15 @@ POST3         .req    s27
 | 
			
		||||
.endm
 | 
			
		||||
 | 
			
		||||
.macro dca_lfe_fir  decifactor
 | 
			
		||||
function ff_dca_lfe_fir\decifactor\()_vfp, export=1
 | 
			
		||||
NOVFP   vmov    s0, r3
 | 
			
		||||
        fmrx    OLDFPSCR, FPSCR
 | 
			
		||||
        ldr     ip, =0x03030000         @ RunFast mode, short vectors of length 4, stride 1
 | 
			
		||||
        fmxr    FPSCR, ip
 | 
			
		||||
        vldr    IN0, [PIN, #-0*4]
 | 
			
		||||
        vldr    IN1, [PIN, #-1*4]
 | 
			
		||||
        vldr    IN2, [PIN, #-2*4]
 | 
			
		||||
        vldr    IN3, [PIN, #-3*4]
 | 
			
		||||
 .if \decifactor == 32
 | 
			
		||||
  .set JMAX, 8
 | 
			
		||||
        vpush   {s16-s31}
 | 
			
		||||
@ -165,32 +173,16 @@ POST3         .req    s27
 | 
			
		||||
 .endif
 | 
			
		||||
        fmxr    FPSCR, OLDFPSCR
 | 
			
		||||
        bx      lr
 | 
			
		||||
endfunc
 | 
			
		||||
.endm
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/* void ff_dca_lfe_fir_vfp(float *out, const float *in, const float *coefs,
 | 
			
		||||
 *                         int decifactor, float scale)
 | 
			
		||||
 */
 | 
			
		||||
function ff_dca_lfe_fir_vfp, export=1
 | 
			
		||||
        teq     DECIFACTOR, #32
 | 
			
		||||
        fmrx    OLDFPSCR, FPSCR
 | 
			
		||||
        ldr     ip, =0x03030000         @ RunFast mode, short vectors of length 4, stride 1
 | 
			
		||||
        fmxr    FPSCR, ip
 | 
			
		||||
NOVFP   vldr    s0, [sp]
 | 
			
		||||
        vldr    IN0, [PIN, #-0*4]
 | 
			
		||||
        vldr    IN1, [PIN, #-1*4]
 | 
			
		||||
        vldr    IN2, [PIN, #-2*4]
 | 
			
		||||
        vldr    IN3, [PIN, #-3*4]
 | 
			
		||||
        beq     32f
 | 
			
		||||
64:     dca_lfe_fir  64
 | 
			
		||||
        dca_lfe_fir  64
 | 
			
		||||
 .ltorg
 | 
			
		||||
32:     dca_lfe_fir  32
 | 
			
		||||
endfunc
 | 
			
		||||
        dca_lfe_fir  32
 | 
			
		||||
 | 
			
		||||
        .unreq  POUT
 | 
			
		||||
        .unreq  PIN
 | 
			
		||||
        .unreq  PCOEF
 | 
			
		||||
        .unreq  DECIFACTOR
 | 
			
		||||
        .unreq  OLDFPSCR
 | 
			
		||||
        .unreq  COUNTER
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user