FFmpeg  4.0
sbrdsp_template.c
Go to the documentation of this file.
1 /*
2  * AAC Spectral Band Replication decoding functions
3  * Copyright (c) 2008-2009 Robert Swain ( rob opendot cl )
4  * Copyright (c) 2009-2010 Alex Converse <alex.converse@gmail.com>
5  *
6  * This file is part of FFmpeg.
7  *
8  * FFmpeg is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later version.
12  *
13  * FFmpeg is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with FFmpeg; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21  */
22 
23 static void sbr_sum64x5_c(INTFLOAT *z)
24 {
25  int k;
26  for (k = 0; k < 64; k++) {
27  INTFLOAT f = z[k] + z[k + 64] + z[k + 128] + z[k + 192] + z[k + 256];
28  z[k] = f;
29  }
30 }
31 
32 static void sbr_qmf_deint_bfly_c(INTFLOAT *v, const INTFLOAT *src0, const INTFLOAT *src1)
33 {
34  int i;
35  for (i = 0; i < 64; i++) {
36 #if USE_FIXED
37  v[ i] = (int)(0x10U + src0[i] - src1[63 - i]) >> 5;
38  v[127 - i] = (int)(0x10U + src0[i] + src1[63 - i]) >> 5;
39 #else
40  v[ i] = src0[i] - src1[63 - i];
41  v[127 - i] = src0[i] + src1[63 - i];
42 #endif
43  }
44 }
45 
46 static void sbr_hf_apply_noise_0(INTFLOAT (*Y)[2], const AAC_FLOAT *s_m,
47  const AAC_FLOAT *q_filt, int noise,
48  int kx, int m_max)
49 {
50  sbr_hf_apply_noise(Y, s_m, q_filt, noise, (INTFLOAT)1.0, (INTFLOAT)0.0, m_max);
51 }
52 
53 static void sbr_hf_apply_noise_1(INTFLOAT (*Y)[2], const AAC_FLOAT *s_m,
54  const AAC_FLOAT *q_filt, int noise,
55  int kx, int m_max)
56 {
57  INTFLOAT phi_sign = 1 - 2 * (kx & 1);
58  sbr_hf_apply_noise(Y, s_m, q_filt, noise, (INTFLOAT)0.0, phi_sign, m_max);
59 }
60 
61 static void sbr_hf_apply_noise_2(INTFLOAT (*Y)[2], const AAC_FLOAT *s_m,
62  const AAC_FLOAT *q_filt, int noise,
63  int kx, int m_max)
64 {
65  sbr_hf_apply_noise(Y, s_m, q_filt, noise, (INTFLOAT)-1.0, (INTFLOAT)0.0, m_max);
66 }
67 
68 static void sbr_hf_apply_noise_3(INTFLOAT (*Y)[2], const AAC_FLOAT *s_m,
69  const AAC_FLOAT *q_filt, int noise,
70  int kx, int m_max)
71 {
72  INTFLOAT phi_sign = 1 - 2 * (kx & 1);
73  sbr_hf_apply_noise(Y, s_m, q_filt, noise, (INTFLOAT)0.0, -phi_sign, m_max);
74 }
75 
77 {
78  s->sum64x5 = sbr_sum64x5_c;
79  s->sum_square = sbr_sum_square_c;
80  s->neg_odd_64 = sbr_neg_odd_64_c;
81  s->qmf_pre_shuffle = sbr_qmf_pre_shuffle_c;
82  s->qmf_post_shuffle = sbr_qmf_post_shuffle_c;
83  s->qmf_deint_neg = sbr_qmf_deint_neg_c;
84  s->qmf_deint_bfly = sbr_qmf_deint_bfly_c;
85  s->autocorrelate = sbr_autocorrelate_c;
86  s->hf_gen = sbr_hf_gen_c;
87  s->hf_g_filt = sbr_hf_g_filt_c;
88 
89  s->hf_apply_noise[0] = sbr_hf_apply_noise_0;
90  s->hf_apply_noise[1] = sbr_hf_apply_noise_1;
91  s->hf_apply_noise[2] = sbr_hf_apply_noise_2;
92  s->hf_apply_noise[3] = sbr_hf_apply_noise_3;
93 
94 #if !USE_FIXED
95  if (ARCH_ARM)
97  if (ARCH_AARCH64)
99  if (ARCH_X86)
101  if (ARCH_MIPS)
103 #endif /* !USE_FIXED */
104 }
const char * s
Definition: avisynth_c.h:768
static void sbr_qmf_pre_shuffle_c(float *z)
Definition: sbrdsp.c:57
static av_always_inline void sbr_hf_apply_noise(float(*Y)[2], const float *s_m, const float *q_filt, int noise, float phi_sign0, float phi_sign1, int m_max)
Definition: sbrdsp.c:198
static void sbr_hf_apply_noise_1(INTFLOAT(*Y)[2], const AAC_FLOAT *s_m, const AAC_FLOAT *q_filt, int noise, int kx, int m_max)
static void sbr_hf_apply_noise_2(INTFLOAT(*Y)[2], const AAC_FLOAT *s_m, const AAC_FLOAT *q_filt, int noise, int kx, int m_max)
static void sbr_qmf_deint_neg_c(float *v, const float *src)
Definition: sbrdsp.c:87
av_cold void ff_sbrdsp_init_arm(SBRDSPContext *s)
float INTFLOAT
Definition: aac_defines.h:86
av_cold void AAC_RENAME() ff_sbrdsp_init(SBRDSPContext *s)
#define av_cold
Definition: attributes.h:82
#define Y
Definition: vf_boxblur.c:76
static void sbr_hf_g_filt_c(float(*Y)[2], const float(*X_high)[40][2], const float *g_filt, int m_max, intptr_t ixh)
Definition: sbrdsp.c:187
static void sbr_qmf_deint_bfly_c(INTFLOAT *v, const INTFLOAT *src0, const INTFLOAT *src1)
#define ARCH_X86
Definition: config.h:38
static void sbr_hf_apply_noise_3(INTFLOAT(*Y)[2], const AAC_FLOAT *s_m, const AAC_FLOAT *q_filt, int noise, int kx, int m_max)
#define AAC_RENAME(x)
Definition: aac_defines.h:84
#define ARCH_ARM
Definition: config.h:19
static void sbr_neg_odd_64_c(float *x)
Definition: sbrdsp.c:47
void ff_sbrdsp_init_mips(SBRDSPContext *s)
Definition: sbrdsp_mips.c:890
static void sbr_sum64x5_c(INTFLOAT *z)
float AAC_FLOAT
Definition: aac_defines.h:90
#define src1
Definition: h264pred.c:139
static void sbr_hf_apply_noise_0(INTFLOAT(*Y)[2], const AAC_FLOAT *s_m, const AAC_FLOAT *q_filt, int noise, int kx, int m_max)
void ff_sbrdsp_init_x86(SBRDSPContext *s)
Definition: sbrdsp_init.c:59
#define src0
Definition: h264pred.c:138
#define ARCH_MIPS
Definition: config.h:26
static int noise(AVBSFContext *ctx, AVPacket *pkt)
Definition: noise_bsf.c:38
int
static void sbr_autocorrelate_c(const float x[40][2], float phi[3][2][2])
Definition: sbrdsp.c:135
static void sbr_hf_gen_c(float(*X_high)[2], const float(*X_low)[2], const float alpha0[2], const float alpha1[2], float bw, int start, int end)
Definition: sbrdsp.c:159
static void sbr_qmf_post_shuffle_c(float W[32][2], const float *z)
Definition: sbrdsp.c:74
static float sbr_sum_square_c(float(*x)[2], int n)
Definition: sbrdsp.c:31
#define ARCH_AARCH64
Definition: config.h:17
av_cold void ff_sbrdsp_init_aarch64(SBRDSPContext *s)