diff options
author | Kostya Shishkov <kostya.shishkov@gmail.com> | 2009-06-02 19:31:51 +0400 |
---|---|---|
committer | Kostya Shishkov <kostya.shishkov@gmail.com> | 2009-06-02 19:31:51 +0400 |
commit | 9706d1c766b609961bea44d475c84c01b7ee10a5 (patch) | |
tree | b1eb7d87648ecaeef176c7ea4791fb2dd7af38e2 /libavcodec/tiff.c | |
parent | 68e7f4828d4e29ffee3fc1709689ec6aa5f6d358 (diff) |
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
Diffstat (limited to 'libavcodec/tiff.c')
-rw-r--r-- | libavcodec/tiff.c | 33 |
1 files 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); |