Hi, patch attached.
From 77075d790275f1d3728890c1ef82e89345490966 Mon Sep 17 00:00:00 2001 From: Paul B Mahol <one...@gmail.com> Date: Fri, 12 Feb 2016 18:17:30 +0100 Subject: [PATCH] avfilter/avf_showcqt: improve pts handling
Makes seeking possible with mpv. Signed-off-by: Paul B Mahol <one...@gmail.com> --- libavfilter/avf_showcqt.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/libavfilter/avf_showcqt.c b/libavfilter/avf_showcqt.c index 712a999..2d60279 100644 --- a/libavfilter/avf_showcqt.c +++ b/libavfilter/avf_showcqt.c @@ -989,7 +989,7 @@ static void process_cqt(ShowCQTContext *s) yuv_from_cqt(s->c_buf, s->cqt_result, s->sono_g, s->width); } -static int plot_cqt(AVFilterContext *ctx) +static int plot_cqt(AVFilterContext *ctx, int64_t pts) { AVFilterLink *outlink = ctx->outputs[0]; ShowCQTContext *s = ctx->priv; @@ -1013,9 +1013,8 @@ static int plot_cqt(AVFilterContext *ctx) s->draw_axis(out, s->axis_frame, s->c_buf, s->bar_h); if (s->sono_h) s->draw_sono(out, s->sono_frame, s->bar_h + s->axis_h, s->sono_idx); - out->pts = s->frame_count; + out->pts = pts; ret = ff_filter_frame(outlink, out); - s->frame_count++; } s->sono_count = (s->sono_count + 1) % s->count; if (s->sono_h) @@ -1133,7 +1132,7 @@ static int config_output(AVFilterLink *outlink) s->format = outlink->format; outlink->sample_aspect_ratio = av_make_q(1, 1); outlink->frame_rate = s->rate; - outlink->time_base = av_inv_q(s->rate); + outlink->time_base = inlink->time_base; av_log(ctx, AV_LOG_INFO, "video: %dx%d %s %d/%d fps, bar_h = %d, axis_h = %d, sono_h = %d.\n", s->width, s->height, av_get_pix_fmt_name(s->format), s->rate.num, s->rate.den, s->bar_h, s->axis_h, s->sono_h); @@ -1209,7 +1208,6 @@ static int config_output(AVFilterLink *outlink) return AVERROR(ENOMEM); s->sono_count = 0; - s->frame_count = 0; s->sono_idx = 0; s->remaining_fill = s->fft_len / 2; s->remaining_frac = 0; @@ -1239,7 +1237,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples) if (!insamples) { while (s->remaining_fill < s->fft_len / 2) { memset(&s->fft_data[s->fft_len - s->remaining_fill], 0, sizeof(*s->fft_data) * s->remaining_fill); - ret = plot_cqt(ctx); + ret = plot_cqt(ctx, AV_NOPTS_VALUE); if (ret < 0) return ret; @@ -1263,7 +1261,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *insamples) s->fft_data[j+m].re = audio_data[2*(i+m)]; s->fft_data[j+m].im = audio_data[2*(i+m)+1]; } - ret = plot_cqt(ctx); + ret = plot_cqt(ctx, insamples->pts + i); if (ret < 0) { av_frame_free(&insamples); return ret; -- 1.9.1
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel