diff options
Diffstat (limited to 'libavfilter/vf_lut.c')
-rw-r--r-- | libavfilter/vf_lut.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/libavfilter/vf_lut.c b/libavfilter/vf_lut.c index 76db0f31db..be497ac14f 100644 --- a/libavfilter/vf_lut.c +++ b/libavfilter/vf_lut.c @@ -260,14 +260,20 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) AVFilterLink *outlink = ctx->outputs[0]; AVFrame *out; uint8_t *inrow, *outrow, *inrow0, *outrow0; - int i, j, plane; + int i, j, plane, direct = 0; + if (av_frame_is_writable(in)) { + direct = 1; + out = in; + } else { + /* TODO reindent */ out = ff_get_video_buffer(outlink, outlink->w, outlink->h); if (!out) { av_frame_free(&in); return AVERROR(ENOMEM); } av_frame_copy_props(out, in); + } if (lut->is_rgb) { /* packed */ @@ -316,7 +322,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) } } - av_frame_free(&in); + if (!direct) + av_frame_free(&in); + return ff_filter_frame(outlink, out); } |