---
 libavfilter/vf_hqdn3d.c |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/libavfilter/vf_hqdn3d.c b/libavfilter/vf_hqdn3d.c
index cbc4ab9..5a90df3 100644
--- a/libavfilter/vf_hqdn3d.c
+++ b/libavfilter/vf_hqdn3d.c
@@ -294,6 +294,23 @@ static int config_input(AVFilterLink *inlink)
     return 0;
 }
 
+static void start_frame(AVFilterLink *inlink, AVFilterBufferRef *inpicref)
+{
+    AVFilterLink *outlink = inlink->dst->outputs[0];
+    AVFilterBufferRef *outpicref;
+
+    if (inpicref->perms & AV_PERM_PRESERVE) {
+        outpicref = ff_get_video_buffer(outlink, AV_PERM_WRITE, outlink->w, 
outlink->h);
+        avfilter_copy_buffer_ref_props(outpicref, inpicref);
+        outpicref->video->w = outlink->w;
+        outpicref->video->h = outlink->h;
+    } else
+        outpicref = inpicref;
+
+    outlink->out_buf = outpicref;
+    ff_start_frame(outlink, avfilter_ref_buffer(outpicref, ~0));
+}
+
 static void null_draw_slice(AVFilterLink *link, int y, int h, int slice_dir) { 
}
 
 static void end_frame(AVFilterLink *inlink)
@@ -315,7 +332,8 @@ static void end_frame(AVFilterLink *inlink)
     ff_draw_slice(outlink, 0, inpic->video->h, 1);
     ff_end_frame(outlink);
     avfilter_unref_buffer(inpic);
-    avfilter_unref_buffer(outpic);
+    if (outpic != inpic)
+        avfilter_unref_buffer(outpic);
 }
 
 AVFilter avfilter_vf_hqdn3d = {
@@ -329,6 +347,7 @@ AVFilter avfilter_vf_hqdn3d = {
 
     .inputs    = (AVFilterPad[]) {{ .name             = "default",
                                     .type             = AVMEDIA_TYPE_VIDEO,
+                                    .start_frame      = start_frame,
                                     .draw_slice       = null_draw_slice,
                                     .config_props     = config_input,
                                     .end_frame        = end_frame },
-- 
1.7.4.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to