--- a/libavfilter/formats.c +++ b/libavfilter/formats.c @@ -110,11 +110,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) + if (type == AVMEDIA_TYPE_VIDEO) { for (i = 0; i < a->nb_formats; i++) { const AVPixFmtDescriptor *const adesc = av_pix_fmt_desc_get(a->formats[i]); + if( !adesc ) continue; for (j = 0; j < b->nb_formats; j++) { 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]) { @@ -123,6 +125,7 @@ } } } + } // If chroma or alpha can be lost through merging then do not merge if (alpha2 > alpha1 || chroma2 > chroma1)