diff -ru a/libavfilter/formats.c b/libavfilter/formats.c --- a/libavfilter/formats.c 2019-07-08 11:45:25.000000000 -0600 +++ b/libavfilter/formats.c 2019-08-08 18:20:27.709164671 -0600 @@ -107,11 +107,13 @@ possibly causing a lossy conversion elsewhere in the graph. To avoid that, pretend that there are no common formats to force the insertion of a conversion filter. */ - if (type == AVMEDIA_TYPE_VIDEO) - for (i = 0; i < a->nb_formats; i++) + if (type == AVMEDIA_TYPE_VIDEO) { + for (i = 0; i < a->nb_formats; i++) { + const AVPixFmtDescriptor *adesc = av_pix_fmt_desc_get(a->formats[i]); + if( !adesc ) continue; for (j = 0; j < b->nb_formats; j++) { - const AVPixFmtDescriptor *adesc = av_pix_fmt_desc_get(a->formats[i]); const AVPixFmtDescriptor *bdesc = av_pix_fmt_desc_get(b->formats[j]); + if( !bdesc ) continue; alpha2 |= adesc->flags & bdesc->flags & AV_PIX_FMT_FLAG_ALPHA; chroma2|= adesc->nb_components > 1 && bdesc->nb_components > 1; if (a->formats[i] == b->formats[j]) { @@ -119,6 +121,8 @@ chroma1|= adesc->nb_components > 1; } } + } + } // If chroma or alpha can be lost through merging then do not merge if (alpha2 > alpha1 || chroma2 > chroma1)