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

Reply via email to