Mercurial > libavcodec.hg
comparison mjpeg.c @ 2442:ba01b8552bd4 libavcodec
jpeg style yuv fixes
author | michael |
---|---|
date | Thu, 20 Jan 2005 00:30:20 +0000 |
parents | 18b8b2dcc037 |
children | f67b63ed036d |
comparison
equal
deleted
inserted
replaced
2441:358813ec4ca2 | 2442:ba01b8552bd4 |
---|---|
395 flush_put_bits(p); | 395 flush_put_bits(p); |
396 ptr = pbBufPtr(p); | 396 ptr = pbBufPtr(p); |
397 put_bits(p, 16, 0); /* patched later */ | 397 put_bits(p, 16, 0); /* patched later */ |
398 put_string(p, LIBAVCODEC_IDENT, 1); | 398 put_string(p, LIBAVCODEC_IDENT, 1); |
399 size = strlen(LIBAVCODEC_IDENT)+3; | 399 size = strlen(LIBAVCODEC_IDENT)+3; |
400 ptr[0] = size >> 8; | |
401 ptr[1] = size; | |
402 } | |
403 | |
404 if( s->avctx->pix_fmt == PIX_FMT_YUV420P | |
405 ||s->avctx->pix_fmt == PIX_FMT_YUV422P | |
406 ||s->avctx->pix_fmt == PIX_FMT_YUV444P){ | |
407 put_marker(p, COM); | |
408 flush_put_bits(p); | |
409 ptr = pbBufPtr(p); | |
410 put_bits(p, 16, 0); /* patched later */ | |
411 put_string(p, "CS=ITU601", 1); | |
412 size = strlen("CS=ITU601")+3; | |
400 ptr[0] = size >> 8; | 413 ptr[0] = size >> 8; |
401 ptr[1] = size; | 414 ptr[1] = size; |
402 } | 415 } |
403 } | 416 } |
404 | 417 |
843 | 856 |
844 int restart_interval; | 857 int restart_interval; |
845 int restart_count; | 858 int restart_count; |
846 | 859 |
847 int buggy_avid; | 860 int buggy_avid; |
861 int cs_itu601; | |
848 int interlace_polarity; | 862 int interlace_polarity; |
849 | 863 |
850 int mjpb_skiptosod; | 864 int mjpb_skiptosod; |
851 } MJpegDecodeContext; | 865 } MJpegDecodeContext; |
852 | 866 |
1131 switch((s->h_count[0] << 4) | s->v_count[0]) { | 1145 switch((s->h_count[0] << 4) | s->v_count[0]) { |
1132 case 0x11: | 1146 case 0x11: |
1133 if(s->rgb){ | 1147 if(s->rgb){ |
1134 s->avctx->pix_fmt = PIX_FMT_RGBA32; | 1148 s->avctx->pix_fmt = PIX_FMT_RGBA32; |
1135 }else if(s->nb_components==3) | 1149 }else if(s->nb_components==3) |
1136 s->avctx->pix_fmt = PIX_FMT_YUV444P; | 1150 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV444P : PIX_FMT_YUVJ444P; |
1137 else | 1151 else |
1138 s->avctx->pix_fmt = PIX_FMT_GRAY8; | 1152 s->avctx->pix_fmt = PIX_FMT_GRAY8; |
1139 break; | 1153 break; |
1140 case 0x21: | 1154 case 0x21: |
1141 s->avctx->pix_fmt = PIX_FMT_YUV422P; | 1155 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV422P : PIX_FMT_YUVJ422P; |
1142 break; | 1156 break; |
1143 default: | 1157 default: |
1144 case 0x22: | 1158 case 0x22: |
1145 s->avctx->pix_fmt = PIX_FMT_YUV420P; | 1159 s->avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420P; |
1146 break; | 1160 break; |
1147 } | 1161 } |
1148 | 1162 |
1149 if(s->picture.data[0]) | 1163 if(s->picture.data[0]) |
1150 s->avctx->release_buffer(s->avctx, &s->picture); | 1164 s->avctx->release_buffer(s->avctx, &s->picture); |
1735 { | 1749 { |
1736 s->buggy_avid = 1; | 1750 s->buggy_avid = 1; |
1737 // if (s->first_picture) | 1751 // if (s->first_picture) |
1738 // printf("mjpeg: workarounding buggy AVID\n"); | 1752 // printf("mjpeg: workarounding buggy AVID\n"); |
1739 } | 1753 } |
1754 else if(!strcmp(cbuf, "CS=ITU601")){ | |
1755 s->cs_itu601= 1; | |
1756 } | |
1740 | 1757 |
1741 av_free(cbuf); | 1758 av_free(cbuf); |
1742 } | 1759 } |
1743 } | 1760 } |
1744 | 1761 |
2170 s->quant_index[2] = 1; | 2187 s->quant_index[2] = 1; |
2171 s->h_max = 2; | 2188 s->h_max = 2; |
2172 s->v_max = 2; | 2189 s->v_max = 2; |
2173 | 2190 |
2174 s->qscale_table = av_mallocz((s->width+15)/16); | 2191 s->qscale_table = av_mallocz((s->width+15)/16); |
2175 avctx->pix_fmt = PIX_FMT_YUV420P; | 2192 avctx->pix_fmt = s->cs_itu601 ? PIX_FMT_YUV420P : PIX_FMT_YUVJ420; |
2176 s->interlaced = 0; | 2193 s->interlaced = 0; |
2177 | 2194 |
2178 s->picture.reference = 0; | 2195 s->picture.reference = 0; |
2179 if (avctx->get_buffer(avctx, &s->picture) < 0) | 2196 if (avctx->get_buffer(avctx, &s->picture) < 0) |
2180 { | 2197 { |