Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Bœsch <ubitux@gmail.com>2013-03-09 08:17:01 +0400
committerClément Bœsch <ubitux@gmail.com>2013-03-10 05:13:02 +0400
commit3da54858d36c0371e713935b69c5df5f050ca1b3 (patch)
tree498f8ff6058f03f40504a1d9cb8ab96d6155d91c /libavfilter/vf_hue.c
parent4a62f477ea846ee1198c8945237147d00b4f9c3d (diff)
lavfi/hue: add an optimized direct path.
Diffstat (limited to 'libavfilter/vf_hue.c')
-rw-r--r--libavfilter/vf_hue.c8
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);
}