# HG changeset patch # User michaelni # Date 1038216199 0 # Node ID 19f5b8b7c6d5a04945e789238e975eaa1a4fd4bf # Parent 3abff5a875482998625b930e52cc202ef2b2ffaf fixing aspect diff -r 3abff5a87548 -r 19f5b8b7c6d5 h263.c --- a/h263.c Sat Nov 23 10:58:05 2002 +0000 +++ b/h263.c Mon Nov 25 09:23:19 2002 +0000 @@ -120,24 +120,25 @@ return format; } -static void init_aspect_info(MpegEncContext * s){ - double aspect; +static void float_aspect_to_info(MpegEncContext * s, float aspect){ + int i; + + aspect*= s->height/(double)s->width; +//printf("%f\n", aspect); - emms_c(); //paranoia ;) - - if(s->avctx->aspect_ratio==0) aspect= 1.0; - aspect= s->avctx->aspect_ratio; - + if(aspect==0) aspect= 1.0; + ff_float2fraction(&s->aspected_width, &s->aspected_height, aspect, 255); + +//printf("%d %d\n", s->aspected_width, s->aspected_height); + for(i=1; i<6; i++){ + if(s->aspected_width == pixel_aspect[i][0] && s->aspected_height== pixel_aspect[i][1]){ + s->aspect_ratio_info=i; + return; + } + } - if(s->aspected_width == 4 && s->aspected_height == 3) - s->aspect_ratio_info= FF_ASPECT_4_3_625; - else if(s->aspected_width == 16 && s->aspected_height == 9) - s->aspect_ratio_info= FF_ASPECT_16_9_625; - else if(s->aspected_width == 1 && s->aspected_height == 1) - s->aspect_ratio_info= FF_ASPECT_SQUARE; - else - s->aspect_ratio_info= FF_ASPECT_EXTENDED; + s->aspect_ratio_info= FF_ASPECT_EXTENDED; } void h263_encode_picture_header(MpegEncContext * s, int picture_number) @@ -216,7 +217,7 @@ if (format == 7) { /* Custom Picture Format (CPFMT) */ - init_aspect_info(s); + float_aspect_to_info(s, s->avctx->aspect_ratio); put_bits(&s->pb,4,s->aspect_ratio_info); put_bits(&s->pb,9,(s->width >> 2) - 1); @@ -1527,7 +1528,7 @@ put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */ put_bits(&s->pb, 3, 1); /* is obj layer priority */ - init_aspect_info(s); + float_aspect_to_info(s, s->avctx->aspect_ratio); put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */ if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) @@ -3833,6 +3834,9 @@ /* aspected dimensions */ s->aspected_width = get_bits(&s->gb, 8); s->aspected_height = get_bits(&s->gb, 8); + }else{ + s->aspected_width = pixel_aspect[s->aspect_ratio_info][0]; + s->aspected_height= pixel_aspect[s->aspect_ratio_info][1]; } } else { width = h263_format[format][0]; @@ -4098,6 +4102,9 @@ if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){ s->aspected_width = get_bits(gb, 8); // par_width s->aspected_height = get_bits(gb, 8); // par_height + }else{ + s->aspected_width = pixel_aspect[s->aspect_ratio_info][0]; + s->aspected_height= pixel_aspect[s->aspect_ratio_info][1]; } if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */ diff -r 3abff5a87548 -r 19f5b8b7c6d5 h263dec.c --- a/h263dec.c Sat Nov 23 10:58:05 2002 +0000 +++ b/h263dec.c Mon Nov 25 09:23:19 2002 +0000 @@ -495,10 +495,10 @@ /* FIXME: By the way H263 decoder is evolving it should have */ /* an H263EncContext */ if(s->aspected_height) - new_aspect= (float)s->aspected_width / (float)s->aspected_height; + new_aspect= s->aspected_width*s->width / (float)(s->height*s->aspected_height); else new_aspect=0; - + if ( s->width != avctx->width || s->height != avctx->height || ABS(new_aspect - avctx->aspect_ratio) > 0.001) { /* H.263 could change picture size any time */