comparison h263.c @ 1548:dd544554ed42 libavcodec

AVRational sample_aspect_ratio aspect ratio in JPEG JFIF is SAR not DAR ! removed nonsense SAR guessing code various related cleanups bugs?
author michael
date Mon, 20 Oct 2003 20:23:46 +0000
parents 576861d6343a
children 853d2107ce5b
comparison
equal deleted inserted replaced
1547:0183874861fd 1548:dd544554ed42
129 return format; 129 return format;
130 } 130 }
131 131
132 #ifdef CONFIG_ENCODERS 132 #ifdef CONFIG_ENCODERS
133 133
134 static void float_aspect_to_info(MpegEncContext * s, float aspect){ 134 static void aspect_to_info(MpegEncContext * s, AVRational aspect){
135 int i; 135 int i;
136 136
137 aspect*= s->height/(double)s->width; 137 if(aspect.num==0) aspect= (AVRational){1,1};
138 //printf("%f\n", aspect); 138
139
140 if(aspect==0) aspect= 1.0;
141
142 ff_float2fraction(&s->aspected_width, &s->aspected_height, aspect, 255);
143
144 //printf("%d %d\n", s->aspected_width, s->aspected_height);
145 for(i=1; i<6; i++){ 139 for(i=1; i<6; i++){
146 if(s->aspected_width == pixel_aspect[i][0] && s->aspected_height== pixel_aspect[i][1]){ 140 if(av_cmp_q(pixel_aspect[i], aspect) == 0){
147 s->aspect_ratio_info=i; 141 s->aspect_ratio_info=i;
148 return; 142 return;
149 } 143 }
150 } 144 }
151 145
268 /* This should be here if PLUSPTYPE */ 262 /* This should be here if PLUSPTYPE */
269 put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */ 263 put_bits(&s->pb, 1, 0); /* Continuous Presence Multipoint mode: off */
270 264
271 if (format == 7) { 265 if (format == 7) {
272 /* Custom Picture Format (CPFMT) */ 266 /* Custom Picture Format (CPFMT) */
273 float_aspect_to_info(s, s->avctx->aspect_ratio); 267 aspect_to_info(s, s->avctx->sample_aspect_ratio);
274 268
275 put_bits(&s->pb,4,s->aspect_ratio_info); 269 put_bits(&s->pb,4,s->aspect_ratio_info);
276 put_bits(&s->pb,9,(s->width >> 2) - 1); 270 put_bits(&s->pb,9,(s->width >> 2) - 1);
277 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */ 271 put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */
278 put_bits(&s->pb,9,(s->height >> 2)); 272 put_bits(&s->pb,9,(s->height >> 2));
279 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) 273 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
280 { 274 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
281 put_bits(&s->pb, 8, s->aspected_width); 275 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
282 put_bits(&s->pb, 8, s->aspected_height);
283 } 276 }
284 } 277 }
285 278
286 /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */ 279 /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */
287 if (s->umvplus) 280 if (s->umvplus)
1947 put_bits(&s->pb, 8, s->vo_type); /* video obj type indication */ 1940 put_bits(&s->pb, 8, s->vo_type); /* video obj type indication */
1948 put_bits(&s->pb, 1, 1); /* is obj layer id= yes */ 1941 put_bits(&s->pb, 1, 1); /* is obj layer id= yes */
1949 put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */ 1942 put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
1950 put_bits(&s->pb, 3, 1); /* is obj layer priority */ 1943 put_bits(&s->pb, 3, 1); /* is obj layer priority */
1951 1944
1952 float_aspect_to_info(s, s->avctx->aspect_ratio); 1945 aspect_to_info(s, s->avctx->sample_aspect_ratio);
1953 1946
1954 put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */ 1947 put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
1955 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) 1948 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED){
1956 { 1949 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.num);
1957 put_bits(&s->pb, 8, s->aspected_width); 1950 put_bits(&s->pb, 8, s->avctx->sample_aspect_ratio.den);
1958 put_bits(&s->pb, 8, s->aspected_height);
1959 } 1951 }
1960 1952
1961 if(s->low_delay){ 1953 if(s->low_delay){
1962 put_bits(&s->pb, 1, 1); /* vol control parameters= yes */ 1954 put_bits(&s->pb, 1, 1); /* vol control parameters= yes */
1963 put_bits(&s->pb, 2, 1); /* chroma format YUV 420/YV12 */ 1955 put_bits(&s->pb, 2, 1); /* chroma format YUV 420/YV12 */
4339 skip_bits1(&s->gb); 4331 skip_bits1(&s->gb);
4340 height = get_bits(&s->gb, 9) * 4; 4332 height = get_bits(&s->gb, 9) * 4;
4341 dprintf("\nH.263+ Custom picture: %dx%d\n",width,height); 4333 dprintf("\nH.263+ Custom picture: %dx%d\n",width,height);
4342 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) { 4334 if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) {
4343 /* aspected dimensions */ 4335 /* aspected dimensions */
4344 s->aspected_width = get_bits(&s->gb, 8); 4336 s->avctx->sample_aspect_ratio.num= get_bits(&s->gb, 8);
4345 s->aspected_height = get_bits(&s->gb, 8); 4337 s->avctx->sample_aspect_ratio.den= get_bits(&s->gb, 8);
4346 }else{ 4338 }else{
4347 s->aspected_width = pixel_aspect[s->aspect_ratio_info][0]; 4339 s->avctx->sample_aspect_ratio= pixel_aspect[s->aspect_ratio_info];
4348 s->aspected_height= pixel_aspect[s->aspect_ratio_info][1];
4349 } 4340 }
4350 } else { 4341 } else {
4351 width = h263_format[format][0]; 4342 width = h263_format[format][0];
4352 height = h263_format[format][1]; 4343 height = h263_format[format][1];
4353 } 4344 }
4630 vo_ver_id = 1; 4621 vo_ver_id = 1;
4631 } 4622 }
4632 //printf("vo type:%d\n",s->vo_type); 4623 //printf("vo type:%d\n",s->vo_type);
4633 s->aspect_ratio_info= get_bits(gb, 4); 4624 s->aspect_ratio_info= get_bits(gb, 4);
4634 if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){ 4625 if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){
4635 s->aspected_width = get_bits(gb, 8); // par_width 4626 s->avctx->sample_aspect_ratio.num= get_bits(gb, 8); // par_width
4636 s->aspected_height = get_bits(gb, 8); // par_height 4627 s->avctx->sample_aspect_ratio.den= get_bits(gb, 8); // par_height
4637 }else{ 4628 }else{
4638 s->aspected_width = pixel_aspect[s->aspect_ratio_info][0]; 4629 s->avctx->sample_aspect_ratio= pixel_aspect[s->aspect_ratio_info];
4639 s->aspected_height= pixel_aspect[s->aspect_ratio_info][1];
4640 } 4630 }
4641 4631
4642 if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */ 4632 if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */
4643 int chroma_format= get_bits(gb, 2); 4633 int chroma_format= get_bits(gb, 2);
4644 if(chroma_format!=1){ 4634 if(chroma_format!=1){