From 050fe8bab5e772f04e271c069e9d85c17f08e94f Mon Sep 17 00:00:00 2001 From: Alex Beregszaszi Date: Fri, 13 Sep 2002 19:31:32 +0000 Subject: [PATCH] aspect (ext. par too) support for h263 and mpeg4 (inc. build becouse of new vars) Originally committed as revision 941 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/avcodec.h | 4 ++-- libavcodec/h263.c | 28 +++++++++++++++++++--------- libavcodec/h263dec.c | 5 +++++ 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 18973c6372..acedebaf34 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -5,8 +5,8 @@ #define LIBAVCODEC_VERSION_INT 0x000406 #define LIBAVCODEC_VERSION "0.4.6" -#define LIBAVCODEC_BUILD 4622 -#define LIBAVCODEC_BUILD_STR "4622" +#define LIBAVCODEC_BUILD 4623 +#define LIBAVCODEC_BUILD_STR "4623" enum CodecID { CODEC_ID_NONE, diff --git a/libavcodec/h263.c b/libavcodec/h263.c index e9c2b3fa35..26758a6640 100644 --- a/libavcodec/h263.c +++ b/libavcodec/h263.c @@ -187,12 +187,17 @@ void h263_encode_picture_header(MpegEncContext * s, int picture_number) /* Custom Picture Format (CPFMT) */ if (s->aspect_ratio_info) - put_bits(&s->pb,4,s->aspect_ratio_info); + put_bits(&s->pb,4,s->aspect_ratio_info); else - put_bits(&s->pb,4,2); /* Aspect ratio: CIF 12:11 (4:3) picture */ + put_bits(&s->pb,4,2); /* Aspect ratio: CIF 12:11 (4:3) picture */ put_bits(&s->pb,9,(s->width >> 2) - 1); put_bits(&s->pb,1,1); /* "1" to prevent start code emulation */ put_bits(&s->pb,9,(s->height >> 2)); + if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) + { + put_bits(&s->pb, 8, s->aspected_width); + put_bits(&s->pb, 8, s->aspected_height); + } } /* Unlimited Unrestricted Motion Vectors Indicator (UUI) */ @@ -1361,6 +1366,11 @@ static void mpeg4_encode_vol_header(MpegEncContext * s) put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */ else put_bits(&s->pb, 4, 1); /* aspect ratio info= sqare pixel */ + if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) + { + put_bits(&s->pb, 8, s->aspected_width); + put_bits(&s->pb, 8, s->aspected_height); + } if(s->low_delay){ put_bits(&s->pb, 1, 1); /* vol control parameters= yes */ @@ -3158,7 +3168,7 @@ static int h263_decode_block(MpegEncContext * s, DCTELEM * block, if (s->h263_rv10 && level == -128) { /* XXX: should patch encoder too */ level = get_bits(&s->gb, 12); - level= (level + ((-1)<<11)) ^ ((-1)<<11); //sign extension + level= (level + ((-1)<<11)) ^ ((-1)<<11); //sign extension } } else { run = rl->table_run[code]; @@ -3547,10 +3557,10 @@ int h263_decode_picture_header(MpegEncContext *s) skip_bits1(&s->gb); height = get_bits(&s->gb, 9) * 4; dprintf("\nH.263+ Custom picture: %dx%d\n",width,height); - if (s->aspect_ratio_info == EXTENDED_PAR) { + if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) { /* aspected dimensions */ - skip_bits(&s->gb, 8); /* width */ - skip_bits(&s->gb, 8); /* height */ + s->aspected_width = get_bits(&s->gb, 8); + s->aspected_height = get_bits(&s->gb, 8); } } else { width = h263_format[format][0]; @@ -3817,9 +3827,9 @@ int mpeg4_decode_picture_header(MpegEncContext * s) } //printf("vo type:%d\n",s->vo_type); s->aspect_ratio_info= get_bits(&s->gb, 4); - if(s->aspect_ratio_info == EXTENDED_PAR){ - skip_bits(&s->gb, 8); //par_width - skip_bits(&s->gb, 8); // par_height + if(s->aspect_ratio_info == FF_ASPECT_EXTENDED){ + s->aspected_width = get_bits(&s->gb, 8); // par_width + s->aspected_height = get_bits(&s->gb, 8); // par_height } if ((s->vol_control_parameters=get_bits1(&s->gb))) { /* vol control parameter */ diff --git a/libavcodec/h263dec.c b/libavcodec/h263dec.c index 90b5a708f2..ffecbc932b 100644 --- a/libavcodec/h263dec.c +++ b/libavcodec/h263dec.c @@ -193,6 +193,11 @@ uint64_t time= rdtsc(); avctx->width = s->width; avctx->height = s->height; avctx->aspect_ratio_info= s->aspect_ratio_info; + if (s->aspect_ratio_info == FF_ASPECT_EXTENDED) + { + avctx->aspected_width = s->aspected_width; + avctx->aspected_height = s->aspected_height; + } if (MPV_common_init(s) < 0) return -1; }