aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/h263.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2002-11-20 13:08:04 +0000
committerMichael Niedermayer <michaelni@gmx.at>2002-11-20 13:08:04 +0000
commit5d3cea3a86a9b994591998fb05cacfc16ae4852d (patch)
treef9611b77616e2f574eb57c531cafa62d916c58a4 /libavcodec/h263.c
parent67d06418daaee0ec43418f5e9a6288fc12203f54 (diff)
downloadffmpeg-5d3cea3a86a9b994591998fb05cacfc16ae4852d.tar.gz
aspect ratio cleanup
Originally committed as revision 1254 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavcodec/h263.c')
-rw-r--r--libavcodec/h263.c36
1 files changed, 27 insertions, 9 deletions
diff --git a/libavcodec/h263.c b/libavcodec/h263.c
index b2c37ccb57..8bb23eac5f 100644
--- a/libavcodec/h263.c
+++ b/libavcodec/h263.c
@@ -120,6 +120,26 @@ int h263_get_picture_format(int width, int height)
return format;
}
+static void init_aspect_info(MpegEncContext * s){
+ double aspect;
+
+ emms_c(); //paranoia ;)
+
+ if(s->avctx->aspect_ratio==0) aspect= 1.0;
+ aspect= s->avctx->aspect_ratio;
+
+ ff_float2fraction(&s->aspected_width, &s->aspected_height, aspect, 255);
+
+ 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;
+}
+
void h263_encode_picture_header(MpegEncContext * s, int picture_number)
{
int format;
@@ -196,11 +216,9 @@ void h263_encode_picture_header(MpegEncContext * s, int picture_number)
if (format == 7) {
/* Custom Picture Format (CPFMT) */
-
- if (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 */
+ init_aspect_info(s);
+
+ put_bits(&s->pb,4,s->aspect_ratio_info);
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));
@@ -1508,10 +1526,10 @@ static void mpeg4_encode_vol_header(MpegEncContext * s)
put_bits(&s->pb, 1, 1); /* is obj layer id= yes */
put_bits(&s->pb, 4, vo_ver_id); /* is obj layer ver id */
put_bits(&s->pb, 3, 1); /* is obj layer priority */
- if(s->aspect_ratio_info)
- put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
- else
- put_bits(&s->pb, 4, 1); /* aspect ratio info= sqare pixel */
+
+ init_aspect_info(s);
+
+ put_bits(&s->pb, 4, s->aspect_ratio_info);/* aspect ratio info */
if (s->aspect_ratio_info == FF_ASPECT_EXTENDED)
{
put_bits(&s->pb, 8, s->aspected_width);