changeset 4190:405f8395eedc libavcodec

Use table for determining type sizes
author kostya
date Mon, 13 Nov 2006 11:34:46 +0000
parents 3c98b0938897
children c9867abab7e6
files tiff.c
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/tiff.c	Mon Nov 13 11:30:26 2006 +0000
+++ b/tiff.c	Mon Nov 13 11:34:46 2006 +0000
@@ -62,6 +62,11 @@
     TIFF_LONGLONG
 };
 
+/** sizes of various TIFF field types */
+static const int type_sizes[6] = {
+    0, 1, 100, 2, 4, 8
+};
+
 typedef struct TiffContext {
     AVCodecContext *avctx;
     AVFrame picture;
@@ -208,6 +213,8 @@
             value = -1;
             buf = start + off;
         }
+    }else if(type_sizes[type] * count <= 4){
+        buf -= 4;
     }else{
         buf = start + off;
     }
@@ -397,11 +404,11 @@
             return -1;
         }
         pal = s->picture.data[1];
-        off = (type == TIFF_SHORT) ? 2 : 1;
+        off = type_sizes[type];
         rp = buf;
         gp = buf + count / 3 * off;
         bp = buf + count / 3 * off * 2;
-        off = (type == TIFF_SHORT) ? 8 : 0;
+        off = (type_sizes[type] - 1) << 3;
         for(i = 0; i < count / 3; i++){
             j = (tget(&rp, type, s->le) >> off) << 16;
             j |= (tget(&gp, type, s->le) >> off) << 8;