diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
index a42b27f..2ac8355 100644
|
a
|
b
|
static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uin |
| 166 | 166 | return ret; |
| 167 | 167 | } |
| 168 | 168 | for(line = 0; line < lines; line++){ |
| | 169 | int i; |
| 169 | 170 | if(src - ssrc > size){ |
| 170 | 171 | av_log(s->avctx, AV_LOG_ERROR, "Source data overread\n"); |
| 171 | 172 | return -1; |
| … |
… |
static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uin |
| 173 | 174 | switch(s->compr){ |
| 174 | 175 | case TIFF_RAW: |
| 175 | 176 | if (!s->fill_order) { |
| 176 | | memcpy(dst, src, width); |
| | 177 | if (s->bpp == 2) { |
| | 178 | for(i = 0; i < width; i++) { |
| | 179 | dst[i*4+0] = src[i] >> 6; |
| | 180 | dst[i*4+1] = src[i] >> 4 & 0x3; |
| | 181 | dst[i*4+2] = src[i] >> 2 & 0x3; |
| | 182 | dst[i*4+3] = src[i] & 0x3; |
| | 183 | } |
| | 184 | } else if (s->bpp == 4) { |
| | 185 | for(i = 0; i < width; i++) { |
| | 186 | dst[i*2+0] = src[i] >> 4; |
| | 187 | dst[i*2+1] = src[i] & 0xF; |
| | 188 | } |
| | 189 | } else { |
| | 190 | memcpy(dst, src, width); |
| | 191 | } |
| 177 | 192 | } else { |
| 178 | | int i; |
| 179 | 193 | for (i = 0; i < width; i++) |
| 180 | 194 | dst[i] = av_reverse[src[i]]; |
| 181 | 195 | } |
| … |
… |
static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uin |
| 190 | 204 | av_log(s->avctx, AV_LOG_ERROR, "Copy went out of bounds\n"); |
| 191 | 205 | return -1; |
| 192 | 206 | } |
| 193 | | memcpy(dst + pixels, src, code); |
| | 207 | if (s->bpp == 2) { |
| | 208 | for (i = 0; i < code; i++) { |
| | 209 | dst[(pixels+i)*4+0] = src[i] >> 6; |
| | 210 | dst[(pixels+i)*4+1] = src[i] >> 4 & 0x3; |
| | 211 | dst[(pixels+i)*4+2] = src[i] >> 2 & 0x3; |
| | 212 | dst[(pixels+i)*4+3] = src[i] & 0x3; |
| | 213 | } |
| | 214 | } else if (s->bpp == 4) { |
| | 215 | for(i = 0; i < code; i++) { |
| | 216 | dst[(pixels+i)*2+0] = src[i] >> 4; |
| | 217 | dst[(pixels+i)*2+1] = src[i] & 0xF; |
| | 218 | } |
| | 219 | } else { |
| | 220 | memcpy(dst + pixels, src, code); |
| | 221 | } |
| 194 | 222 | src += code; |
| 195 | 223 | pixels += code; |
| 196 | 224 | }else if(code != -128){ // -127..-1 |
| … |
… |
static int tiff_unpack_strip(TiffContext *s, uint8_t* dst, int stride, const uin |
| 200 | 228 | return -1; |
| 201 | 229 | } |
| 202 | 230 | c = *src++; |
| 203 | | memset(dst + pixels, c, code); |
| | 231 | if (s->bpp == 2) { |
| | 232 | for (i = 0; i < code; i++) { |
| | 233 | dst[(pixels+i)*4+0] = c >> 6; |
| | 234 | dst[(pixels+i)*4+1] = c >> 4 & 0x3; |
| | 235 | dst[(pixels+i)*4+2] = c >> 2 & 0x3; |
| | 236 | dst[(pixels+i)*4+3] = c & 0x3; |
| | 237 | } |
| | 238 | } else if (s->bpp == 4) { |
| | 239 | for(i = 0; i < code; i++) { |
| | 240 | dst[(pixels+i)*2+0] = c >> 4; |
| | 241 | dst[(pixels+i)*2+1] = c & 0xF; |
| | 242 | } |
| | 243 | } else { |
| | 244 | memset(dst + pixels, c, code); |
| | 245 | } |
| 204 | 246 | pixels += code; |
| 205 | 247 | } |
| 206 | 248 | } |
| … |
… |
static int init_image(TiffContext *s) |
| 227 | 269 | case 11: |
| 228 | 270 | s->avctx->pix_fmt = PIX_FMT_MONOBLACK; |
| 229 | 271 | break; |
| | 272 | case 21: |
| | 273 | case 41: |
| 230 | 274 | case 81: |
| 231 | 275 | s->avctx->pix_fmt = PIX_FMT_PAL8; |
| 232 | 276 | break; |