Browse code

lavfi/hue: add an optimized direct path.

Clément Bœsch authored on 2013/03/09 13:17:01
Showing 1 changed files
... ...
@@ -281,13 +281,19 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
281 281
     HueContext *hue = inlink->dst->priv;
282 282
     AVFilterLink *outlink = inlink->dst->outputs[0];
283 283
     AVFrame *outpic;
284
+    int direct = 0;
284 285
 
286
+    if (av_frame_is_writable(inpic)) {
287
+        direct = 1;
288
+        outpic = inpic;
289
+    } else {
285 290
     outpic = ff_get_video_buffer(outlink, outlink->w, outlink->h);
286 291
     if (!outpic) {
287 292
         av_frame_free(&inpic);
288 293
         return AVERROR(ENOMEM);
289 294
     }
290 295
     av_frame_copy_props(outpic, inpic);
296
+    }
291 297
 
292 298
     if (!hue->flat_syntax) {
293 299
         hue->var_values[VAR_T]   = TS2T(inpic->pts, inlink->time_base);
... ...
@@ -321,6 +327,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
321 321
 
322 322
     hue->var_values[VAR_N] += 1;
323 323
 
324
+    if (!direct)
324 325
     av_image_copy_plane(outpic->data[0], outpic->linesize[0],
325 326
                         inpic->data[0],  inpic->linesize[0],
326 327
                         inlink->w, inlink->h);
... ...
@@ -330,6 +337,7 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *inpic)
330 330
                         inlink->w >> hue->hsub, inlink->h >> hue->vsub,
331 331
                         hue->hue_cos, hue->hue_sin);
332 332
 
333
+    if (!direct)
333 334
     av_frame_free(&inpic);
334 335
     return ff_filter_frame(outlink, outpic);
335 336
 }