Mercurial > libavcodec.hg
comparison mjpegdec.c @ 7930:fae5e74eef1b libavcodec
Check the 4th plane too when selecting the pixfmt.
Fixes a crash with Test-4-component-YCCK.jpg.
author | michael |
---|---|
date | Sat, 27 Sep 2008 01:50:57 +0000 |
parents | 12d42593e467 |
children | fd6c05a225aa |
comparison
equal
deleted
inserted
replaced
7929:5b81784c5fe6 | 7930:fae5e74eef1b |
---|---|
282 | 282 |
283 if(s->interlaced && (s->bottom_field == !s->interlace_polarity)) | 283 if(s->interlaced && (s->bottom_field == !s->interlace_polarity)) |
284 return 0; | 284 return 0; |
285 | 285 |
286 /* XXX: not complete test ! */ | 286 /* XXX: not complete test ! */ |
287 pix_fmt_id = (s->h_count[0] << 20) | (s->v_count[0] << 16) | | 287 pix_fmt_id = (s->h_count[0] << 28) | (s->v_count[0] << 24) | |
288 (s->h_count[1] << 12) | (s->v_count[1] << 8) | | 288 (s->h_count[1] << 20) | (s->v_count[1] << 16) | |
289 (s->h_count[2] << 4) | s->v_count[2]; | 289 (s->h_count[2] << 12) | (s->v_count[2] << 8) | |
290 (s->h_count[3] << 4) | s->v_count[3]; | |
290 av_log(s->avctx, AV_LOG_DEBUG, "pix fmt id %x\n", pix_fmt_id); | 291 av_log(s->avctx, AV_LOG_DEBUG, "pix fmt id %x\n", pix_fmt_id); |
291 switch(pix_fmt_id){ | 292 switch(pix_fmt_id){ |
292 case 0x222222: | 293 case 0x22222200: |
293 case 0x111111: | 294 case 0x11111100: |
294 if(s->rgb){ | 295 if(s->rgb){ |
295 s->avctx->pix_fmt = PIX_FMT_RGB32; | 296 s->avctx->pix_fmt = PIX_FMT_RGB32; |
296 }else if(s->nb_components==3) | 297 }else if(s->nb_components==3) |
297 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV444P : PIX_FMT_YUVJ444P; | 298 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV444P : PIX_FMT_YUVJ444P; |
298 else | 299 else |
299 s->avctx->pix_fmt = PIX_FMT_GRAY8; | 300 s->avctx->pix_fmt = PIX_FMT_GRAY8; |
300 break; | 301 break; |
301 case 0x110000: | 302 case 0x11000000: |
302 s->avctx->pix_fmt = PIX_FMT_GRAY8; | 303 s->avctx->pix_fmt = PIX_FMT_GRAY8; |
303 break; | 304 break; |
304 case 0x121111: | 305 case 0x12111100: |
305 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV440P : PIX_FMT_YUVJ440P; | 306 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV440P : PIX_FMT_YUVJ440P; |
306 break; | 307 break; |
307 case 0x211111: | 308 case 0x21111100: |
308 case 0x221212: | 309 case 0x22121200: |
309 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV422P : PIX_FMT_YUVJ422P; | 310 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV422P : PIX_FMT_YUVJ422P; |
310 break; | 311 break; |
311 case 0x221111: | 312 case 0x22111100: |
312 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420P; | 313 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420P; |
313 break; | 314 break; |
314 default: | 315 default: |
315 av_log(s->avctx, AV_LOG_ERROR, "Unhandled pixel format 0x%x\n", pix_fmt_id); | 316 av_log(s->avctx, AV_LOG_ERROR, "Unhandled pixel format 0x%x\n", pix_fmt_id); |
316 return -1; | 317 return -1; |