Commit 9c61cbf6 authored by michaelni's avatar michaelni

fixing aspect


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@1273 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 17212593
...@@ -120,24 +120,25 @@ int h263_get_picture_format(int width, int height) ...@@ -120,24 +120,25 @@ int h263_get_picture_format(int width, int height)
return format; return format;
} }
static void init_aspect_info(MpegEncContext * s){ static void float_aspect_to_info(MpegEncContext * s, float aspect){
double aspect; int i;
emms_c(); //paranoia ;) aspect*= s->height/(double)s->width;
//printf("%f\n", aspect);
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); 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_EXTENDED;
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;
} }
void h263_encode_picture_header(MpegEncContext * s, int picture_number) void h263_encode_picture_header(MpegEncContext * s, int picture_number)
...@@ -216,7 +217,7 @@ void h263_encode_picture_header(MpegEncContext * s, int picture_number) ...@@ -216,7 +217,7 @@ void h263_encode_picture_header(MpegEncContext * s, int picture_number)
if (format == 7) { if (format == 7) {
/* Custom Picture Format (CPFMT) */ /* 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,4,s->aspect_ratio_info);
put_bits(&s->pb,9,(s->width >> 2) - 1); put_bits(&s->pb,9,(s->width >> 2) - 1);
...@@ -1527,7 +1528,7 @@ static void mpeg4_encode_vol_header(MpegEncContext * s) ...@@ -1527,7 +1528,7 @@ static void mpeg4_encode_vol_header(MpegEncContext * s)
put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */ put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
put_bits(&s->pb, 3, 1); /* is obj layer priority */ 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 */ put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) if (s->aspect_ratio_info == FF_ASPECT_EXTENDED)
...@@ -3833,6 +3834,9 @@ int h263_decode_picture_header(MpegEncContext *s) ...@@ -3833,6 +3834,9 @@ int h263_decode_picture_header(MpegEncContext *s)
/* aspected dimensions */ /* aspected dimensions */
s->aspected_width = get_bits(&s->gb, 8); s->aspected_width = get_bits(&s->gb, 8);
s->aspected_height = 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 { } else {
width = h263_format[format][0]; width = h263_format[format][0];
...@@ -4098,6 +4102,9 @@ static int decode_vol_header(MpegEncContext *s, GetBitContext *gb){ ...@@ -4098,6 +4102,9 @@ static int decode_vol_header(MpegEncContext *s, GetBitContext *gb){
if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){ if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){
s->aspected_width = get_bits(gb, 8); // par_width s->aspected_width = get_bits(gb, 8); // par_width
s->aspected_height = get_bits(gb, 8); // par_height 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 */ if ((s->vol_control_parameters=get_bits1(gb))) { /* vol control parameter */
......
...@@ -495,10 +495,10 @@ retry: ...@@ -495,10 +495,10 @@ retry:
/* FIXME: By the way H263 decoder is evolving it should have */ /* FIXME: By the way H263 decoder is evolving it should have */
/* an H263EncContext */ /* an H263EncContext */
if(s->aspected_height) 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 else
new_aspect=0; new_aspect=0;
if ( s->width != avctx->width || s->height != avctx->height if ( s->width != avctx->width || s->height != avctx->height
|| ABS(new_aspect - avctx->aspect_ratio) > 0.001) { || ABS(new_aspect - avctx->aspect_ratio) > 0.001) {
/* H.263 could change picture size any time */ /* H.263 could change picture size any time */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment