[FFmpeg-devel] [PATCH] lavfi/settb: do not modify the input reference, pass along a new modified copy

Stefano Sabatini stefasab at gmail.com
Mon Jul 30 15:16:53 CEST 2012


Avoid to modify the internal properties which may be accessed by another
filter before in the filterchain, in case that is not caching an internal
reference and needs to access the unaltered data later after start_frame().

Also improve consistency with filter_samples() of asettb, allowing a
pending factorization.
---
 libavfilter/f_settb.c |   14 ++++++++------
 1 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/libavfilter/f_settb.c b/libavfilter/f_settb.c
index 033e1f7..9558d26 100644
--- a/libavfilter/f_settb.c
+++ b/libavfilter/f_settb.c
@@ -99,21 +99,23 @@ static int config_output_props(AVFilterLink *outlink)
     return 0;
 }
 
-static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *picref)
+static int start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
 {
     AVFilterContext *ctx = inlink->dst;
     AVFilterLink *outlink = ctx->outputs[0];
+    AVFilterBufferRef *outpicref = outpicref;
 
     if (av_cmp_q(inlink->time_base, outlink->time_base)) {
-        int64_t orig_pts = picref->pts;
-        picref->pts = av_rescale_q(picref->pts, inlink->time_base, outlink->time_base);
+        outpicref = avfilter_ref_buffer(inpicref, ~0);
+        outpicref->pts = av_rescale_q(inpicref->pts, inlink->time_base, outlink->time_base);
         av_log(ctx, AV_LOG_DEBUG, "tb:%d/%d pts:%"PRId64" -> tb:%d/%d pts:%"PRId64"\n",
-               inlink ->time_base.num, inlink ->time_base.den, orig_pts,
-               outlink->time_base.num, outlink->time_base.den, picref->pts);
+               inlink ->time_base.num, inlink ->time_base.den, inpicref ->pts,
+               outlink->time_base.num, outlink->time_base.den, outpicref->pts);
+        avfilter_unref_buffer(inpicref);
     }
     inlink->cur_buf = NULL;
 
-    return ff_start_frame(outlink, picref);
+    return ff_start_frame(outlink, outpicref);
 }
 
 static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples)
-- 
1.7.5.4



More information about the ffmpeg-devel mailing list