[FFmpeg-cvslog] avcodec/tiff: add packed/planar 32bit float support

Paul B Mahol git at videolan.org
Sun Sep 25 19:33:15 EEST 2022


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Wed Sep 14 13:58:21 2022 +0200| [baf9099cf380fad2be4ae17379f6cb5762bb2c92] | committer: Paul B Mahol

avcodec/tiff: add packed/planar 32bit float support

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=baf9099cf380fad2be4ae17379f6cb5762bb2c92
---

 libavcodec/tiff.c | 36 ++++++++++++++++++++++++------------
 1 file changed, 24 insertions(+), 12 deletions(-)

diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
index 4da77a3a31..750c42ca51 100644
--- a/libavcodec/tiff.c
+++ b/libavcodec/tiff.c
@@ -1026,14 +1026,14 @@ static int init_image(TiffContext *s, AVFrame *frame)
     int create_gray_palette = 0;
 
     // make sure there is no aliasing in the following switch
-    if (s->bpp >= 100 || s->bppcount >= 10) {
+    if (s->bpp > 128 || s->bppcount >= 10) {
         av_log(s->avctx, AV_LOG_ERROR,
                "Unsupported image parameters: bpp=%d, bppcount=%d\n",
                s->bpp, s->bppcount);
         return AVERROR_INVALIDDATA;
     }
 
-    switch (s->planar * 1000 + s->bpp * 10 + s->bppcount + s->is_bayer * 10000) {
+    switch (s->planar * 10000 + s->bpp * 10 + s->bppcount + s->is_bayer * 100000) {
     case 11:
         if (!s->palette_is_set) {
             s->avctx->pix_fmt = AV_PIX_FMT_MONOBLACK;
@@ -1052,7 +1052,7 @@ static int init_image(TiffContext *s, AVFrame *frame)
     case 121:
         s->avctx->pix_fmt = AV_PIX_FMT_GRAY12;
         break;
-    case 10081:
+    case 100081:
         switch (AV_RL32(s->pattern)) {
         case 0x02010100:
             s->avctx->pix_fmt = AV_PIX_FMT_BAYER_RGGB8;
@@ -1072,10 +1072,10 @@ static int init_image(TiffContext *s, AVFrame *frame)
             return AVERROR_PATCHWELCOME;
         }
         break;
-    case 10101:
-    case 10121:
-    case 10141:
-    case 10161:
+    case 100101:
+    case 100121:
+    case 100141:
+    case 100161:
         switch (AV_RL32(s->pattern)) {
         case 0x02010100:
             s->avctx->pix_fmt = AV_PIX_FMT_BAYER_RGGB16;
@@ -1143,18 +1143,30 @@ static int init_image(TiffContext *s, AVFrame *frame)
     case 644:
         s->avctx->pix_fmt = s->le ? AV_PIX_FMT_RGBA64LE  : AV_PIX_FMT_RGBA64BE;
         break;
-    case 1243:
+    case 10243:
         s->avctx->pix_fmt = AV_PIX_FMT_GBRP;
         break;
-    case 1324:
+    case 10324:
         s->avctx->pix_fmt = AV_PIX_FMT_GBRAP;
         break;
-    case 1483:
+    case 10483:
         s->avctx->pix_fmt = s->le ? AV_PIX_FMT_GBRP16LE : AV_PIX_FMT_GBRP16BE;
         break;
-    case 1644:
+    case 10644:
         s->avctx->pix_fmt = s->le ? AV_PIX_FMT_GBRAP16LE : AV_PIX_FMT_GBRAP16BE;
         break;
+    case 963:
+        s->avctx->pix_fmt = s->le ? AV_PIX_FMT_RGBF32LE : AV_PIX_FMT_RGBF32BE;
+        break;
+    case 1284:
+        s->avctx->pix_fmt = s->le ? AV_PIX_FMT_RGBAF32LE : AV_PIX_FMT_RGBAF32BE;
+        break;
+    case 10963:
+        s->avctx->pix_fmt = s->le ? AV_PIX_FMT_GBRPF32LE : AV_PIX_FMT_GBRPF32BE;
+        break;
+    case 11284:
+        s->avctx->pix_fmt = s->le ? AV_PIX_FMT_GBRAPF32LE : AV_PIX_FMT_GBRAPF32BE;
+        break;
     default:
         av_log(s->avctx, AV_LOG_ERROR,
                "This format is not supported (bpp=%d, bppcount=%d)\n",
@@ -1732,7 +1744,7 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
         }
     }
 end:
-    if (s->bpp > 64U) {
+    if (s->bpp > 128U) {
         av_log(s->avctx, AV_LOG_ERROR,
                 "This format is not supported (bpp=%d, %d components)\n",
                 s->bpp, count);



More information about the ffmpeg-cvslog mailing list