From 7693bbf48434f92e6146be7d9549f2555da65adf Mon Sep 17 00:00:00 2001 From: Matt Ebb Date: Thu, 8 Apr 2010 03:26:49 +0000 Subject: Fix [#21890] YUV->RGB: Color clamping 16-235 in all motion pictures (ffmpeg) Patch by Troy James Sobotka - this uses options in newer FFMPEG versions to convert the full 0-255 YUV range of imported imagery to RGB, rather than clipping at 16-235. This functionality is not available yet in an official FFMPEG release (current precompiled version in /lib for osx at least is v0.5.1 from 2009) so this won't take effect in that situation, but if you've got a newer ffmpeg on your system it will work. --- source/blender/imbuf/intern/anim.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'source/blender/imbuf/intern') diff --git a/source/blender/imbuf/intern/anim.c b/source/blender/imbuf/intern/anim.c index 5a5b5ada4a1..1a46e79470f 100644 --- a/source/blender/imbuf/intern/anim.c +++ b/source/blender/imbuf/intern/anim.c @@ -659,7 +659,25 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) { int pos_found = 1; int filter_y = 0; +#if (LIBAVCODEC_VERSION_MAJOR >= 52) && (LIBAVCODEC_VERSION_MINOR >= 29) + /* The following for color space determination */ + int srcRange, dstRange, brightness, contrast, saturation; + int *inv_table, *table; + + if (anim == 0) return (0); + + /* The magic to assert we get full range for YUV to RGB, instead of + mapping into 16-235 (only supported by newer ffmpeg versions) */ + if (!sws_getColorspaceDetails(anim->img_convert_ctx, &inv_table, &srcRange, + &table, &dstRange, &brightness, &contrast, &saturation)) { + srcRange = srcRange || anim->pCodecCtx->color_range == AVCOL_RANGE_JPEG; + inv_table = sws_getCoefficients(anim->pCodecCtx->colorspace); + sws_setColorspaceDetails(anim->img_convert_ctx, inv_table, srcRange, + table, dstRange, brightness, contrast, saturation); + } +#else if (anim == 0) return (0); +#endif ibuf = IMB_allocImBuf(anim->x, anim->y, 32, IB_rect, 0); -- cgit v1.2.3