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

Ronald S. Bultje rsbultje at gmail.com
Fri May 6 21:47:22 CEST 2016


Hi,

On Fri, May 6, 2016 at 3:23 PM, Michael Niedermayer <michael at niedermayer.cc>
wrote:

> On Fri, May 06, 2016 at 12:27:02PM -0400, Ronald S. Bultje wrote:
> > ---
> >  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 7776a61..f932ce9 100644
> > --- a/libavfilter/vf_colorspace.c
> > +++ b/libavfilter/vf_colorspace.c
> > @@ -754,7 +754,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;
>
> LGTM
>
>
> > @@ -986,7 +987,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 {
>
> unrelated ?
> but LGTM


Hm, it's sort of related to the same bug. What happened is that when
converting from yuv444p to yuv444p10, it would set passthrough=1 (because
of the bug in hunk 1), and then the lack of the check in hunk 2 would cause
the dest buffer to be uninitialized but the function would return as if it
converted succesfully.

So hunk 2 makes it fail correctly, and hunk 1 makes it then not use
passthrough for that conversion so it actually succeeds.

I'll adjust the log message to make that clearer.

Ronald


More information about the ffmpeg-devel mailing list