Mercurial > libavcodec.hg
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){ |