aboutsummaryrefslogtreecommitdiffstats
path: root/libswscale/utils.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-08-14 17:19:32 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-08-15 21:39:32 +0200
commit1e0e193240a8e47a980ac76b8b5af831b17b7928 (patch)
tree94c567820d1581aacfad6d01f1ba79d28a1df195 /libswscale/utils.c
parent60e9b8556ab33af8087968b1de15867ede7c5685 (diff)
downloadffmpeg-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.c12
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)) {