Mercurial > libavcodec.hg
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; |