diff mpegvideo_enc.c @ 5273:101f20612a94 libavcodec

Split ff_set_mpeg4_time() and move the non mpeg4 specific part into mpegvideo_enc.c.
author aurel
date Tue, 10 Jul 2007 14:37:33 +0000
parents 604a09d6cf2e
children 7b3fcb7c61ce
line wrap: on
line diff
--- a/mpegvideo_enc.c	Tue Jul 10 14:30:57 2007 +0000
+++ b/mpegvideo_enc.c	Tue Jul 10 14:37:33 2007 +0000
@@ -2671,6 +2671,21 @@
     return 0;
 }
 
+/* must be called before writing the header */
+static void set_frame_distances(MpegEncContext * s){
+    assert(s->current_picture_ptr->pts != AV_NOPTS_VALUE);
+    s->time= s->current_picture_ptr->pts*s->avctx->time_base.num;
+
+    if(s->pict_type==B_TYPE){
+        s->pb_time= s->pp_time - (s->last_non_b_time - s->time);
+        assert(s->pb_time > 0 && s->pb_time < s->pp_time);
+    }else{
+        s->pp_time= s->time - s->last_non_b_time;
+        s->last_non_b_time= s->time;
+        assert(s->picture_number==0 || s->pp_time > 0);
+    }
+}
+
 static int encode_picture(MpegEncContext *s, int picture_number)
 {
     int i;
@@ -2685,7 +2700,9 @@
     /* we need to initialize some time vars before we can encode b-frames */
     // RAL: Condition added for MPEG1VIDEO
     if (s->codec_id == CODEC_ID_MPEG1VIDEO || s->codec_id == CODEC_ID_MPEG2VIDEO || (s->h263_pred && !s->h263_msmpeg4))
-        ff_set_mpeg4_time(s, s->picture_number);  //FIXME rename and use has_b_frames or similar
+        set_frame_distances(s);
+    if(ENABLE_MPEG4_ENCODER && s->codec_id == CODEC_ID_MPEG4)
+        ff_set_mpeg4_time(s);
 
     s->me.scene_change_score=0;