Use table for determining type sizes
Originally committed as revision 7009 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
9cc6be9d27
commit
339aabd5a8
@ -62,6 +62,11 @@ enum TiffTypes{
|
||||
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 @@ static int tiff_decode_tag(TiffContext *s, uint8_t *start, uint8_t *buf, uint8_t
|
||||
value = -1;
|
||||
buf = start + off;
|
||||
}
|
||||
}else if(type_sizes[type] * count <= 4){
|
||||
buf -= 4;
|
||||
}else{
|
||||
buf = start + off;
|
||||
}
|
||||
@ -397,11 +404,11 @@ static int tiff_decode_tag(TiffContext *s, uint8_t *start, uint8_t *buf, uint8_t
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user