diff options
author | Clément Bœsch <ubitux@gmail.com> | 2013-03-09 05:17:01 +0100 |
---|---|---|
committer | Clément Bœsch <ubitux@gmail.com> | 2013-03-10 02:13:02 +0100 |
commit | 3da54858d36c0371e713935b69c5df5f050ca1b3 (patch) | |
tree | 498f8ff6058f03f40504a1d9cb8ab96d6155d91c | |
parent | 4a62f477ea846ee1198c8945237147d00b4f9c3d (diff) | |
download | ffmpeg-3da54858d36c0371e713935b69c5df5f050ca1b3.tar.gz |
lavfi/hue: add an optimized direct path.
-rw-r--r-- | libavfilter/vf_hue.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/libavfilter/vf_hue.c b/libavfilter/vf_hue.c index 2e3a024cae..481113d4f1 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); } |