2 * Copyright (C) 2016 foo86
4 * This file is part of FFmpeg.
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 #ifndef AVCODEC_DCADSP_H
22 #define AVCODEC_DCADSP_H
24 #include "libavutil/common.h"
25 #include "libavutil/tx.h"
28 #include "synth_filter.h"
30 typedef struct DCADSPContext
{
31 void (*decode_hf
)(int32_t **dst
,
32 const int32_t *vq_index
,
33 const int8_t hf_vq
[1024][32],
34 int32_t scale_factors
[32][2],
35 ptrdiff_t sb_start
, ptrdiff_t sb_end
,
36 ptrdiff_t ofs
, ptrdiff_t len
);
38 void (*decode_joint
)(int32_t **dst
, int32_t **src
,
39 const int32_t *scale_factors
,
40 ptrdiff_t sb_start
, ptrdiff_t sb_end
,
41 ptrdiff_t ofs
, ptrdiff_t len
);
43 void (*lfe_fir_float
[2])(float *pcm_samples
, int32_t *lfe_samples
,
44 const float *filter_coeff
, ptrdiff_t npcmblocks
);
46 void (*lfe_x96_float
)(float *dst
, const float *src
,
47 float *hist
, ptrdiff_t len
);
49 void (*sub_qmf_float
[2])(SynthFilterContext
*synth
,
53 int32_t **subband_samples_lo
,
54 int32_t **subband_samples_hi
,
55 float *hist1
, int *offset
, float *hist2
,
56 const float *filter_coeff
, ptrdiff_t npcmblocks
,
59 void (*lfe_fir_fixed
)(int32_t *pcm_samples
, int32_t *lfe_samples
,
60 const int32_t *filter_coeff
, ptrdiff_t npcmblocks
);
62 void (*lfe_x96_fixed
)(int32_t *dst
, const int32_t *src
,
63 int32_t *hist
, ptrdiff_t len
);
65 void (*sub_qmf_fixed
[2])(SynthFilterContext
*synth
,
68 int32_t **subband_samples_lo
,
69 int32_t **subband_samples_hi
,
70 int32_t *hist1
, int *offset
, int32_t *hist2
,
71 const int32_t *filter_coeff
, ptrdiff_t npcmblocks
);
73 void (*decor
)(int32_t *dst
, const int32_t *src
, int coeff
, ptrdiff_t len
);
75 void (*dmix_sub_xch
)(int32_t *dst1
, int32_t *dst2
,
76 const int32_t *src
, ptrdiff_t len
);
78 void (*dmix_sub
)(int32_t *dst
, const int32_t *src
, int coeff
, ptrdiff_t len
);
80 void (*dmix_add
)(int32_t *dst
, const int32_t *src
, int coeff
, ptrdiff_t len
);
82 void (*dmix_scale
)(int32_t *dst
, int scale
, ptrdiff_t len
);
84 void (*dmix_scale_inv
)(int32_t *dst
, int scale_inv
, ptrdiff_t len
);
86 void (*assemble_freq_bands
)(int32_t *dst
, int32_t *src0
, int32_t *src1
,
87 const int32_t *coeff
, ptrdiff_t len
);
89 void (*lbr_bank
)(float output
[32][4], float **input
,
90 const float *coeff
, ptrdiff_t ofs
, ptrdiff_t len
);
92 void (*lfe_iir
)(float *output
, const float *input
,
93 const float iir
[5][4], float hist
[5][2],
97 av_cold
void ff_dcadsp_init(DCADSPContext
*s
);
98 av_cold
void ff_dcadsp_init_x86(DCADSPContext
*s
);