From 9706d1c766b609961bea44d475c84c01b7ee10a5 Mon Sep 17 00:00:00 2001 From: Kostya Shishkov Date: Tue, 2 Jun 2009 15:31:51 +0000 Subject: [PATCH] Check combined depth and number of components in TIFF decoder, thus eliminating additional checks for each depth (like 48-bit gray vs. 48-bit RGB) Originally committed as revision 19076 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/tiff.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c index 82327d0838..b7f4db3170 100644 --- a/libavcodec/tiff.c +++ b/libavcodec/tiff.c @@ -243,31 +243,28 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t * s->bpp = -1; } } - switch(s->bpp){ - case 1: + if(count > 4){ + av_log(s->avctx, AV_LOG_ERROR, "This format is not supported (bpp=%d, %d components)\n", s->bpp, count); + return -1; + } + switch(s->bpp*10 + count){ + case 11: s->avctx->pix_fmt = PIX_FMT_MONOBLACK; break; - case 8: + case 81: s->avctx->pix_fmt = PIX_FMT_PAL8; break; - case 24: + case 243: s->avctx->pix_fmt = PIX_FMT_RGB24; break; - case 16: - if(count == 1){ - s->avctx->pix_fmt = PIX_FMT_GRAY16BE; - }else{ - av_log(s->avctx, AV_LOG_ERROR, "This format is not supported (bpp=%i)\n", s->bpp); - return -1; - } + case 161: + s->avctx->pix_fmt = PIX_FMT_GRAY16BE; break; - case 32: - if(count == 4){ - s->avctx->pix_fmt = PIX_FMT_RGBA; - }else{ - av_log(s->avctx, AV_LOG_ERROR, "This format is not supported (bpp=%d, %d components)\n", s->bpp, count); - return -1; - } + case 324: + s->avctx->pix_fmt = PIX_FMT_RGBA; + break; + case 483: + s->avctx->pix_fmt = s->le ? PIX_FMT_RGB48LE : PIX_FMT_RGB48BE; break; default: av_log(s->avctx, AV_LOG_ERROR, "This format is not supported (bpp=%d, %d components)\n", s->bpp, count);