aspect ratio encoding for mpeg1
authorMichael Niedermayer <michaelni@gmx.at>
Fri, 6 Dec 2002 16:19:25 +0000 (16:19 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Fri, 6 Dec 2002 16:19:25 +0000 (16:19 +0000)
Originally committed as revision 1319 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/mpeg12.c

index 51ebc950dc6d1e95e73aa62a504064c77c87cbdc..5058d1d5f58f9dd313981f1d044510c38d0d442d 100644 (file)
@@ -131,8 +131,12 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s)
 {
         unsigned int vbv_buffer_size;
         unsigned int fps, v;
-        int n;
+        int n, i;
         UINT64 time_code;
+        float best_aspect_error= 1E10;
+        float aspect_ratio= s->avctx->aspect_ratio;
+        
+        if(aspect_ratio==0.0) aspect_ratio= s->width / (float)s->height; //pixel aspect 1:1 (VGA)
         
         if (s->current_picture.key_frame) {
             /* mpeg1 header repeated every gop */
@@ -154,7 +158,18 @@ static void mpeg1_encode_sequence_header(MpegEncContext *s)
  
             put_bits(&s->pb, 12, s->width);
             put_bits(&s->pb, 12, s->height);
-            put_bits(&s->pb, 4, 1); /* 1/1 aspect ratio */
+            
+            for(i=1; i<15; i++){
+                float error= mpeg1_aspect[i] - s->width/(s->height*aspect_ratio);
+                error= ABS(error);
+                
+                if(error < best_aspect_error){
+                    best_aspect_error= error;
+                    s->aspect_ratio_info= i;
+                }
+            }
+            
+            put_bits(&s->pb, 4, s->aspect_ratio_info);
             put_bits(&s->pb, 4, s->frame_rate_index);
             v = s->bit_rate / 400;
             if (v > 0x3ffff)