[FFmpeg-cvslog] vf_colorspace: don't enable passthrough if bitdepth doesn't match.

Ronald S. Bultje git at videolan.org
Tue May 10 16:17:34 CEST 2016


ffmpeg | branch: master | Ronald S. Bultje <rsbultje at gmail.com> | Fri May  6 12:26:55 2016 -0400| [531ff7161d9d6b0cf8f71125319c1f5df5041637] | committer: Ronald S. Bultje

vf_colorspace: don't enable passthrough if bitdepth doesn't match.

Also check return value of av_frame_copy() in passthrough mode, so that
if a copy fails (as it did here, because bitdepth didn't match), the filter
doesn't return success, which would mean sending an uninitialized framebuffer
further down the filtergraph.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=531ff7161d9d6b0cf8f71125319c1f5df5041637
---

 libavfilter/vf_colorspace.c |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/libavfilter/vf_colorspace.c b/libavfilter/vf_colorspace.c
index 3f299a7..3d39f13 100644
--- a/libavfilter/vf_colorspace.c
+++ b/libavfilter/vf_colorspace.c
@@ -719,7 +719,8 @@ static int create_filtergraph(AVFilterContext *ctx,
     s->yuv2yuv_fastmode = s->rgb2rgb_passthrough && fmt_identical;
     s->yuv2yuv_passthrough = s->yuv2yuv_fastmode && s->in_rng == s->out_rng &&
                              !memcmp(s->in_lumacoef, s->out_lumacoef,
-                                     sizeof(*s->in_lumacoef));
+                                     sizeof(*s->in_lumacoef)) &&
+                             in_desc->comp[0].depth == out_desc->comp[0].depth;
     if (!s->yuv2yuv_passthrough) {
         if (redo_yuv2rgb) {
             double rgb2yuv[3][3], (*yuv2rgb)[3] = s->yuv2rgb_dbl_coeffs;
@@ -937,7 +938,9 @@ static int filter_frame(AVFilterLink *link, AVFrame *in)
     td.in_ss_h = av_pix_fmt_desc_get(in->format)->log2_chroma_h;
     td.out_ss_h = av_pix_fmt_desc_get(out->format)->log2_chroma_h;
     if (s->yuv2yuv_passthrough) {
-        av_frame_copy(out, in);
+        res = av_frame_copy(out, in);
+        if (res < 0)
+            return res;
     } else {
         ctx->internal->execute(ctx, convert, &td, NULL,
                                FFMIN((in->height + 1) >> 1, ctx->graph->nb_threads));



More information about the ffmpeg-cvslog mailing list