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 {