diff mpegvideo.c @ 1697:f3287b5d8d9f libavcodec

vbv_delay
author michael
date Wed, 17 Dec 2003 19:53:05 +0000
parents 1a2db2073848
children fbab59f03144
line wrap: on
line diff
--- a/mpegvideo.c	Tue Dec 16 11:17:06 2003 +0000
+++ b/mpegvideo.c	Wed Dec 17 19:53:05 2003 +0000
@@ -1865,7 +1865,23 @@
         flush_put_bits(&s->pb);
         s->frame_bits  = (pbBufPtr(&s->pb) - s->pb.buf) * 8;
     }
-    
+
+    /* update mpeg1/2 vbv_delay for CBR */    
+    if(s->avctx->rc_max_rate && s->avctx->rc_min_rate == s->avctx->rc_max_rate){
+        int vbv_delay;
+
+        assert(s->repeat_first_field==0 && s->avctx->repeat_pic==0);
+        
+        vbv_delay= lrint(90000 * s->rc_context.buffer_index / s->avctx->rc_max_rate);
+        assert(vbv_delay < 0xFFFF);
+
+        s->vbv_delay_ptr[0] &= 0xF8;
+        s->vbv_delay_ptr[0] |= vbv_delay>>13;
+        s->vbv_delay_ptr[1]  = vbv_delay>>5;
+        s->vbv_delay_ptr[2] &= 0x07;
+        s->vbv_delay_ptr[2] |= vbv_delay<<3;
+    }
+
     s->total_bits += s->frame_bits;
     avctx->frame_bits  = s->frame_bits;