diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2013-08-14 17:19:32 +0200 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2013-08-15 21:39:32 +0200 |
commit | 1e0e193240a8e47a980ac76b8b5af831b17b7928 (patch) | |
tree | 94c567820d1581aacfad6d01f1ba79d28a1df195 /libswscale/utils.c | |
parent | 60e9b8556ab33af8087968b1de15867ede7c5685 (diff) | |
download | ffmpeg-1e0e193240a8e47a980ac76b8b5af831b17b7928.tar.gz |
sws: add dither enum
This allows specifying more dither algorithms without using up flags and
without ambiguities.
Also initialize the new field based on the flags and use it.
Note, improving the logic of the checks is left to subsequent
commits, this here only switches from flags to enum.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
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)) { |