diff options
author | Muhammad Faiz <mfcc64@gmail.com> | 2016-06-06 06:28:09 +0700 |
---|---|---|
committer | Muhammad Faiz <mfcc64@gmail.com> | 2016-06-07 07:55:48 +0700 |
commit | 77d4dfbec69f6697ba8931ffa8833bf9bda96ce6 (patch) | |
tree | 630bc83f4b50e14cccce4f841ccc3437b24566e2 /libavfilter | |
parent | e7f658be5747d33e341f03a95e3a27c37c67a34d (diff) | |
download | ffmpeg-streaming-77d4dfbec69f6697ba8931ffa8833bf9bda96ce6.zip ffmpeg-streaming-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')
-rw-r--r-- | libavfilter/af_firequalizer.c | 9 | ||||
-rw-r--r-- | libavfilter/version.h | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/libavfilter/af_firequalizer.c b/libavfilter/af_firequalizer.c index a5c3550..6a9c641 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); } diff --git a/libavfilter/version.h b/libavfilter/version.h index d693d6d..cb9b092 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -31,7 +31,7 @@ #define LIBAVFILTER_VERSION_MAJOR 6 #define LIBAVFILTER_VERSION_MINOR 46 -#define LIBAVFILTER_VERSION_MICRO 100 +#define LIBAVFILTER_VERSION_MICRO 101 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \ LIBAVFILTER_VERSION_MINOR, \ |