comparison tiff.c @ 6256:e7c178d397ea libavcodec

const
author michael
date Fri, 01 Feb 2008 14:28:22 +0000
parents a6c9aa23d379
children 48759bfbd073
comparison
equal deleted inserted replaced
6255:80148ad7bb3c 6256:e7c178d397ea
42 int compr; 42 int compr;
43 int invert; 43 int invert;
44 44
45 int strips, rps; 45 int strips, rps;
46 int sot; 46 int sot;
47 uint8_t* stripdata; 47 const uint8_t* stripdata;
48 uint8_t* stripsizes; 48 const uint8_t* stripsizes;
49 int stripsize, stripoff; 49 int stripsize, stripoff;
50 LZWState *lzw; 50 LZWState *lzw;
51 } TiffContext; 51 } TiffContext;
52 52
53 static int tget_short(uint8_t **p, int le){ 53 static int tget_short(const uint8_t **p, int le){
54 int v = le ? AV_RL16(*p) : AV_RB16(*p); 54 int v = le ? AV_RL16(*p) : AV_RB16(*p);
55 *p += 2; 55 *p += 2;
56 return v; 56 return v;
57 } 57 }
58 58
59 static int tget_long(uint8_t **p, int le){ 59 static int tget_long(const uint8_t **p, int le){
60 int v = le ? AV_RL32(*p) : AV_RB32(*p); 60 int v = le ? AV_RL32(*p) : AV_RB32(*p);
61 *p += 4; 61 *p += 4;
62 return v; 62 return v;
63 } 63 }
64 64
65 static int tget(uint8_t **p, int type, int le){ 65 static int tget(const uint8_t **p, int type, int le){
66 switch(type){ 66 switch(type){
67 case TIFF_BYTE : return *(*p)++; 67 case TIFF_BYTE : return *(*p)++;
68 case TIFF_SHORT: return tget_short(p, le); 68 case TIFF_SHORT: return tget_short(p, le);
69 case TIFF_LONG : return tget_long (p, le); 69 case TIFF_LONG : return tget_long (p, le);
70 default : return -1; 70 default : return -1;
71 } 71 }
72 } 72 }
73 73
74 static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, uint8_t *src, int size, int lines){ 74 static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uint8_t *src, int size, int lines){
75 int c, line, pixels, code; 75 int c, line, pixels, code;
76 uint8_t *ssrc = src; 76 const uint8_t *ssrc = src;
77 int width = s->width * (s->bpp / 8); 77 int width = s->width * (s->bpp / 8);
78 #ifdef CONFIG_ZLIB 78 #ifdef CONFIG_ZLIB
79 uint8_t *zbuf; unsigned long outlen; 79 uint8_t *zbuf; unsigned long outlen;
80 80
81 if(s->compr == TIFF_DEFLATE || s->compr == TIFF_ADOBE_DEFLATE){ 81 if(s->compr == TIFF_DEFLATE || s->compr == TIFF_ADOBE_DEFLATE){
148 } 148 }
149 return 0; 149 return 0;
150 } 150 }
151 151
152 152
153 static int tiff_decode_tag(TiffContext *s, uint8_t *start, uint8_t *buf, uint8_t *end_buf, AVFrame *pic) 153 static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *buf, const uint8_t *end_buf, AVFrame *pic)
154 { 154 {
155 int tag, type, count, off, value = 0; 155 int tag, type, count, off, value = 0;
156 uint8_t *src, *dst; 156 const uint8_t *src;
157 uint8_t *dst;
157 int i, j, ssize, soff, stride; 158 int i, j, ssize, soff, stride;
158 uint32_t *pal; 159 uint32_t *pal;
159 uint8_t *rp, *gp, *bp; 160 const uint8_t *rp, *gp, *bp;
160 161
161 tag = tget_short(&buf, s->le); 162 tag = tget_short(&buf, s->le);
162 type = tget_short(&buf, s->le); 163 type = tget_short(&buf, s->le);
163 count = tget_long(&buf, s->le); 164 count = tget_long(&buf, s->le);
164 off = tget_long(&buf, s->le); 165 off = tget_long(&buf, s->le);
344 if(!pic->data[0]){ 345 if(!pic->data[0]){
345 av_log(s->avctx, AV_LOG_ERROR, "Picture initialization missing\n"); 346 av_log(s->avctx, AV_LOG_ERROR, "Picture initialization missing\n");
346 return -1; 347 return -1;
347 } 348 }
348 if(value == 2){ 349 if(value == 2){
349 src = pic->data[0]; 350 dst = pic->data[0];
350 stride = pic->linesize[0]; 351 stride = pic->linesize[0];
351 soff = s->bpp >> 3; 352 soff = s->bpp >> 3;
352 ssize = s->width * soff; 353 ssize = s->width * soff;
353 for(i = 0; i < s->height; i++) { 354 for(i = 0; i < s->height; i++) {
354 for(j = soff; j < ssize; j++) 355 for(j = soff; j < ssize; j++)
355 src[j] += src[j - soff]; 356 dst[j] += dst[j - soff];
356 src += stride; 357 dst += stride;
357 } 358 }
358 } 359 }
359 break; 360 break;
360 case TIFF_INVERT: 361 case TIFF_INVERT:
361 switch(value){ 362 switch(value){
401 return 0; 402 return 0;
402 } 403 }
403 404
404 static int decode_frame(AVCodecContext *avctx, 405 static int decode_frame(AVCodecContext *avctx,
405 void *data, int *data_size, 406 void *data, int *data_size,
406 uint8_t *buf, int buf_size) 407 const uint8_t *buf, int buf_size)
407 { 408 {
408 TiffContext * const s = avctx->priv_data; 409 TiffContext * const s = avctx->priv_data;
409 AVFrame *picture = data; 410 AVFrame *picture = data;
410 AVFrame * const p= (AVFrame*)&s->picture; 411 AVFrame * const p= (AVFrame*)&s->picture;
411 uint8_t *orig_buf = buf, *end_buf = buf + buf_size; 412 const uint8_t *orig_buf = buf, *end_buf = buf + buf_size;
412 int id, le, off; 413 int id, le, off;
413 int i, entries; 414 int i, entries;
414 415
415 //parse image header 416 //parse image header
416 id = AV_RL16(buf); buf += 2; 417 id = AV_RL16(buf); buf += 2;