Browse code

Support 64bit tiff images.

Fixes a part of ticket #503.

Reviewed-by: Paul B Mahol
Reviewed-by: Jean First

Carl Eugen Hoyos authored on 2012/01/14 09:10:13
Showing 3 changed files
... ...
@@ -302,6 +302,9 @@ static int init_image(TiffContext *s)
302 302
     case 483:
303 303
         s->avctx->pix_fmt = s->le ? PIX_FMT_RGB48LE : PIX_FMT_RGB48BE;
304 304
         break;
305
+    case 644:
306
+        s->avctx->pix_fmt = s->le ? PIX_FMT_RGBA64LE : PIX_FMT_RGBA64BE;
307
+        break;
305 308
     default:
306 309
         av_log(s->avctx, AV_LOG_ERROR,
307 310
                "This format is not supported (bpp=%d, bppcount=%d)\n",
... ...
@@ -647,13 +650,15 @@ static int decode_frame(AVCodecContext *avctx,
647 647
         dst = p->data[0];
648 648
         soff = s->bpp >> 3;
649 649
         ssize = s->width * soff;
650
-        if (s->avctx->pix_fmt == PIX_FMT_RGB48LE) {
650
+        if (s->avctx->pix_fmt == PIX_FMT_RGB48LE ||
651
+            s->avctx->pix_fmt == PIX_FMT_RGBA64LE) {
651 652
             for (i = 0; i < s->height; i++) {
652 653
                 for (j = soff; j < ssize; j += 2)
653 654
                     AV_WL16(dst + j, AV_RL16(dst + j) + AV_RL16(dst + j - soff));
654 655
                 dst += stride;
655 656
             }
656
-        } else if (s->avctx->pix_fmt == PIX_FMT_RGB48BE) {
657
+        } else if (s->avctx->pix_fmt == PIX_FMT_RGB48BE ||
658
+                   s->avctx->pix_fmt == PIX_FMT_RGBA64BE) {
657 659
             for (i = 0; i < s->height; i++) {
658 660
                 for (j = soff; j < ssize; j += 2)
659 661
                     AV_WB16(dst + j, AV_RB16(dst + j) + AV_RB16(dst + j - soff));
... ...
@@ -255,6 +255,14 @@ static int encode_frame(AVCodecContext * avctx, unsigned char *buf,
255 255
     s->subsampling[1] = 1;
256 256
 
257 257
     switch (avctx->pix_fmt) {
258
+    case PIX_FMT_RGBA64LE:
259
+        s->bpp = 64;
260
+        s->photometric_interpretation = 2;
261
+        bpp_tab[0] = 16;
262
+        bpp_tab[1] = 16;
263
+        bpp_tab[2] = 16;
264
+        bpp_tab[3] = 16;
265
+        break;
258 266
     case PIX_FMT_RGB48LE:
259 267
         s->bpp = 48;
260 268
         s->photometric_interpretation = 2;
... ...
@@ -498,7 +506,7 @@ AVCodec ff_tiff_encoder = {
498 498
                               PIX_FMT_YUV420P, PIX_FMT_YUV422P,
499 499
                               PIX_FMT_YUV444P, PIX_FMT_YUV410P,
500 500
                               PIX_FMT_YUV411P, PIX_FMT_RGB48LE,
501
-                              PIX_FMT_RGBA, PIX_FMT_NONE},
501
+                              PIX_FMT_RGBA, PIX_FMT_RGBA64LE, PIX_FMT_NONE},
502 502
     .long_name = NULL_IF_CONFIG_SMALL("TIFF image"),
503 503
     .priv_class     = &tiffenc_class,
504 504
 };
... ...
@@ -22,7 +22,7 @@
22 22
 
23 23
 #define LIBAVCODEC_VERSION_MAJOR 53
24 24
 #define LIBAVCODEC_VERSION_MINOR 55
25
-#define LIBAVCODEC_VERSION_MICRO 101
25
+#define LIBAVCODEC_VERSION_MICRO 102
26 26
 
27 27
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
28 28
                                                LIBAVCODEC_VERSION_MINOR, \