summaryrefslogtreecommitdiff
path: root/libavfilter/af_firequalizer.c
diff options
context:
space:
mode:
authorMuhammad Faiz <mfcc64@gmail.com>2016-06-06 06:28:09 +0700
committerMuhammad Faiz <mfcc64@gmail.com>2016-06-07 07:55:48 +0700
commit77d4dfbec69f6697ba8931ffa8833bf9bda96ce6 (patch)
tree630bc83f4b50e14cccce4f841ccc3437b24566e2 /libavfilter/af_firequalizer.c
parente7f658be5747d33e341f03a95e3a27c37c67a34d (diff)
downloadffmpeg-77d4dfbec69f6697ba8931ffa8833bf9bda96ce6.tar.gz
avfilter/af_firequalizer: add zero_phase option
simply by substracting pts to compensate delay also handle AV_NOPTS_VALUE Signed-off-by: Muhammad Faiz <mfcc64@gmail.com>
Diffstat (limited to 'libavfilter/af_firequalizer.c')
-rw-r--r--libavfilter/af_firequalizer.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/libavfilter/af_firequalizer.c b/libavfilter/af_firequalizer.c
index a5c35502fd..6a9c64187e 100644
--- a/libavfilter/af_firequalizer.c
+++ b/libavfilter/af_firequalizer.c
@@ -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);
}