History

avfilter/af_superequalizer: switch rdft to lavu/tx

Paul B Mahol committed 4 years ago

Commit 18ad9fb1 parent a6387902 files · +30 −31Browse files

Unified · Split

2 files
  1. configure +0 −2
  2. libavfilter/af_superequalizer.c +30 −29
configure+0−2
@@ -3714,8 +3714,6 @@ stereo3d_filter_deps="gpl" · 3713 unmodified lines
37143714 subtitles_filter_deps="avformat avcodec libass"
37153715 super2xsai_filter_deps="gpl"
37163716 pixfmts_super2xsai_test_deps="super2xsai_filter"
3717−superequalizer_filter_deps="avcodec"
3718−superequalizer_filter_select="rdft"
37193717 tinterlace_filter_deps="gpl"
37203718 tinterlace_merge_test_deps="tinterlace_filter"
37213719 tinterlace_pad_test_deps="tinterlace_filter"
libavfilter/af_superequalizer.c+30−29
@@ -20,8 +20,7 @@ · 19 unmodified lines
2020 */
2121
2222 #include "libavutil/opt.h"
23−
24−#include "libavcodec/avfft.h"
23+#include "libavutil/tx.h"
2524
2625 #include "audio.h"
2726 #include "avfilter.h"
@@ -46,11 +45,12 @@ typedef struct SuperEqualizerContext { · 18 unmodified lines
4645 float aa;
4746 float iza;
4847 float *ires, *irest;
49− float *fsamples;
48+ float *fsamples, *fsamples_out;
5049 int winlen, tabsize;
5150
5251 AVFrame *in, *out;
53− RDFTContext *rdft, *irdft;
52+ AVTXContext *rdft, *irdft;
53+ av_tx_fn tx_fn, itx_fn;
5454 } SuperEqualizerContext;
5555
5656 static const float bands[] = {
@@ -134,21 +134,26 @@ static void process_param(float *bc, EqParameter *param, float fs) · 77 unmodified lines
134134
135135 static int equ_init(SuperEqualizerContext *s, int wb)
136136 {
137− int i,j;
137+ float scale = 1.f, iscale = 1.f;
138+ int i, j, ret;
138139
139− s->rdft = av_rdft_init(wb, DFT_R2C);
140− s->irdft = av_rdft_init(wb, IDFT_C2R);
141− if (!s->rdft || !s->irdft)
142− return AVERROR(ENOMEM);
140+ ret = av_tx_init(&s->rdft, &s->tx_fn, AV_TX_FLOAT_RDFT, 0, 1 << wb, &scale, 0);
141+ if (ret < 0)
142+ return ret;
143+
144+ ret = av_tx_init(&s->irdft, &s->itx_fn, AV_TX_FLOAT_RDFT, 1, 1 << wb, &iscale, 0);
145+ if (ret < 0)
146+ return ret;
143147
144148 s->aa = 96;
145149 s->winlen = (1 << (wb-1))-1;
146150 s->tabsize = 1 << wb;
147151
148− s->ires = av_calloc(s->tabsize, sizeof(float));
152+ s->ires = av_calloc(s->tabsize + 2, sizeof(float));
149153 s->irest = av_calloc(s->tabsize, sizeof(float));
150154 s->fsamples = av_calloc(s->tabsize, sizeof(float));
151− if (!s->ires || !s->irest || !s->fsamples)
155+ s->fsamples_out = av_calloc(s->tabsize + 2, sizeof(float));
156+ if (!s->ires || !s->irest || !s->fsamples || !s->fsamples_out)
152157 return AVERROR(ENOMEM);
153158
154159 for (i = 0; i <= M; i++) {
@@ -166,7 +171,6 @@ static void make_fir(SuperEqualizerContext *s, float *lbc, float *rbc, EqParamet · 11 unmodified lines
166171 {
167172 const int winlen = s->winlen;
168173 const int tabsize = s->tabsize;
169− float *nires;
170174 int i;
171175
172176 if (fs <= 0)
@@ -178,10 +182,7 @@ static void make_fir(SuperEqualizerContext *s, float *lbc, float *rbc, EqParamet · 5 unmodified lines
178182 for (; i < tabsize; i++)
179183 s->irest[i] = 0;
180184
181− av_rdft_calc(s->rdft, s->irest);
182− nires = s->ires;
183− for (i = 0; i < tabsize; i++)
184− nires[i] = s->irest[i];
185+ s->tx_fn(s->rdft, s->ires, s->irest, sizeof(float));
185186 }
186187
187188 static int filter_frame(AVFilterLink *inlink, AVFrame *in)
@@ -190,6 +191,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) · 2 unmodified lines
190191 SuperEqualizerContext *s = ctx->priv;
191192 AVFilterLink *outlink = ctx->outputs[0];
192193 const float *ires = s->ires;
194+ float *fsamples_out = s->fsamples_out;
193195 float *fsamples = s->fsamples;
194196 int ch, i;
195197
@@ -211,26 +213,24 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) · 15 unmodified lines
211213 for (; i < s->tabsize; i++)
212214 fsamples[i] = 0;
213215
214− av_rdft_calc(s->rdft, fsamples);
216+ s->tx_fn(s->rdft, fsamples_out, fsamples, sizeof(float));
215217
216− fsamples[0] = ires[0] * fsamples[0];
217− fsamples[1] = ires[1] * fsamples[1];
218− for (i = 1; i < s->tabsize / 2; i++) {
218+ for (i = 0; i <= s->tabsize / 2; i++) {
219219 float re, im;
220220
221− re = ires[i*2 ] * fsamples[i*2] - ires[i*2+1] * fsamples[i*2+1];
222− im = ires[i*2+1] * fsamples[i*2] + ires[i*2 ] * fsamples[i*2+1];
221+ re = ires[i*2 ] * fsamples_out[i*2] - ires[i*2+1] * fsamples_out[i*2+1];
222+ im = ires[i*2+1] * fsamples_out[i*2] + ires[i*2 ] * fsamples_out[i*2+1];
223223
224− fsamples[i*2 ] = re;
225− fsamples[i*2+1] = im;
224+ fsamples_out[i*2 ] = re;
225+ fsamples_out[i*2+1] = im;
226226 }
227227
228− av_rdft_calc(s->irdft, fsamples);
228+ s->itx_fn(s->irdft, fsamples, fsamples_out, sizeof(float));
229229
230230 for (i = 0; i < s->winlen; i++)
231− dst[i] += fsamples[i] / s->tabsize * 2;
231+ dst[i] += fsamples[i] / s->tabsize;
232232 for (i = s->winlen; i < s->tabsize; i++)
233− dst[i] = fsamples[i] / s->tabsize * 2;
233+ dst[i] = fsamples[i] / s->tabsize;
234234 for (i = 0; i < s->winlen; i++)
235235 ptr[i] = dst[i];
236236 for (i = 0; i < s->winlen; i++)
@@ -302,8 +302,9 @@ static av_cold void uninit(AVFilterContext *ctx) · 65 unmodified lines
302302 av_freep(&s->irest);
303303 av_freep(&s->ires);
304304 av_freep(&s->fsamples);
305− av_rdft_end(s->rdft);
306− av_rdft_end(s->irdft);
305+ av_freep(&s->fsamples_out);
306+ av_tx_uninit(&s->rdft);
307+ av_tx_uninit(&s->irdft);
307308 }
308309
309310 static const AVFilterPad superequalizer_inputs[] = {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t