From 3da54858d36c0371e713935b69c5df5f050ca1b3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= <ubitux@gmail.com>
Date: Sat, 9 Mar 2013 05:17:01 +0100
Subject: [PATCH] lavfi/hue: add an optimized direct path.

---
 libavfilter/vf_hue.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/libavfilter/vf_hue.c b/libavfilter/vf_hue.c
index 2e3a024cae2..481113d4f1f 100644
--- a/libavfilter/vf_hue.c
+++ b/libavfilter/vf_hue.c
@@ -281,13 +281,19 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
     HueContext *hue = inlink->dst->priv;
     AVFilterLink *outlink = inlink->dst->outputs[0];
     AVFrame *outpic;
+    int direct = 0;
 
+    if (av_frame_is_writable(inpic)) {
+        direct = 1;
+        outpic = inpic;
+    } else {
     outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h);
     if (!outpic) {
         av_frame_free(&inpic);
         return AVERROR(ENOMEM);
     }
     av_frame_copy_props(outpic, inpic);
+    }
 
     if (!hue->flat_syntax) {
         hue->var_values[VAR_T]   = TS2T(inpic->pts, inlink->time_base);
@@ -321,6 +327,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
 
     hue->var_values[VAR_N] += 1;
 
+    if (!direct)
     av_image_copy_plane(outpic->data[0], outpic->linesize[0],
                         inpic->data[0],  inpic->linesize[0],
                         inlink->w, inlink->h);
@@ -330,6 +337,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
                         inlink->w >> hue->hsub, inlink->h >> hue->vsub,
                         hue->hue_cos, hue->hue_sin);
 
+    if (!direct)
     av_frame_free(&inpic);
     return ff_filter_frame(outlink, outpic);
 }
-- 
GitLab