diff options
Diffstat (limited to 'libswscale/utils.c')
-rw-r--r-- | libswscale/utils.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/libswscale/utils.c b/libswscale/utils.c index 5aacd817b8..f5826c37be 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -1196,23 +1196,27 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter, } } + if (c->dither == SWS_DITHER_AUTO) { + if (flags & SWS_ERROR_DIFFUSION) + c->dither = SWS_DITHER_ED; + } + if(dstFormat == AV_PIX_FMT_BGR4_BYTE || dstFormat == AV_PIX_FMT_RGB4_BYTE || dstFormat == AV_PIX_FMT_BGR8 || dstFormat == AV_PIX_FMT_RGB8) { - if (flags & SWS_ERROR_DIFFUSION && !(flags & SWS_FULL_CHR_H_INT)) { + if (c->dither == SWS_DITHER_ED && !(flags & SWS_FULL_CHR_H_INT)) { av_log(c, AV_LOG_DEBUG, "Error diffusion dither is only supported in full chroma interpolation for destination format '%s'\n", av_get_pix_fmt_name(dstFormat)); flags |= SWS_FULL_CHR_H_INT; c->flags = flags; } - if (!(flags & SWS_ERROR_DIFFUSION) && (flags & SWS_FULL_CHR_H_INT)) { + if (c->dither != SWS_DITHER_ED && (flags & SWS_FULL_CHR_H_INT)) { av_log(c, AV_LOG_DEBUG, "Ordered dither is not supported in full chroma interpolation for destination format '%s'\n", av_get_pix_fmt_name(dstFormat)); - flags |= SWS_ERROR_DIFFUSION; - c->flags = flags; + c->dither = SWS_DITHER_ED; } } if (isPlanarRGB(dstFormat)) { |