|
|
|
@ -83,6 +83,7 @@ typedef struct { |
|
|
|
|
int wfunc; |
|
|
|
|
int fixed; |
|
|
|
|
int multi; |
|
|
|
|
int zero_phase; |
|
|
|
|
|
|
|
|
|
int nb_gain_entry; |
|
|
|
|
int gain_entry_err; |
|
|
|
@ -109,6 +110,7 @@ static const AVOption firequalizer_options[] = { |
|
|
|
|
{ "bharris", "blackman-harris window", 0, AV_OPT_TYPE_CONST, { .i64 = WFUNC_BHARRIS }, 0, 0, FLAGS, "wfunc" }, |
|
|
|
|
{ "fixed", "set fixed frame samples", OFFSET(fixed), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, |
|
|
|
|
{ "multi", "set multi channels mode", OFFSET(multi), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, |
|
|
|
|
{ "zero_phase", "set zero phase mode", OFFSET(zero_phase), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS }, |
|
|
|
|
{ NULL } |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -493,7 +495,12 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame) |
|
|
|
|
(float *) frame->extended_data[ch], frame->nb_samples); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
s->next_pts = frame->pts + av_rescale_q(frame->nb_samples, av_make_q(1, inlink->sample_rate), inlink->time_base); |
|
|
|
|
s->next_pts = AV_NOPTS_VALUE; |
|
|
|
|
if (frame->pts != AV_NOPTS_VALUE) { |
|
|
|
|
s->next_pts = frame->pts + av_rescale_q(frame->nb_samples, av_make_q(1, inlink->sample_rate), inlink->time_base); |
|
|
|
|
if (s->zero_phase) |
|
|
|
|
frame->pts -= av_rescale_q(s->fir_len/2, av_make_q(1, inlink->sample_rate), inlink->time_base); |
|
|
|
|
} |
|
|
|
|
s->frame_nsamples_max = FFMAX(s->frame_nsamples_max, frame->nb_samples); |
|
|
|
|
return ff_filter_frame(ctx->outputs[0], frame); |
|
|
|
|
} |
|
|
|
|