[MPlayer-cvslog] r22927 - trunk/libmpdemux/muxer_mpeg.c

nicodvb subversion at mplayerhq.hu
Sat Apr 7 10:51:27 CEST 2007


Author: nicodvb
Date: Sat Apr  7 10:51:26 2007
New Revision: 22927

Modified:
   trunk/libmpdemux/muxer_mpeg.c

Log:
reversed r22879 until I discover why it's giving so many sync problems; I'll eventually recommit it in a fixed form

Modified: trunk/libmpdemux/muxer_mpeg.c
==============================================================================
--- trunk/libmpdemux/muxer_mpeg.c	(original)
+++ trunk/libmpdemux/muxer_mpeg.c	Sat Apr  7 10:51:26 2007
@@ -1460,6 +1460,8 @@ static int flush_buffers(muxer_t *muxer,
 	muxer_stream_t *s, *vs, *as;
 	muxer_headers_t *vpriv = NULL, *apriv = NULL;
 	muxer_priv_t *priv = (muxer_priv_t *) muxer->priv;
+	double duration;
+	uint64_t iduration, iaduration;
 	
 	/* 
 		analyzes all streams and decides what to flush
@@ -1495,11 +1497,30 @@ static int flush_buffers(muxer_t *muxer,
 		mp_msg(MSGT_MUXER, MSGL_DBG2, "\nVIDEO, FLUSH %d frames (of %d), 0 to %d\n", n, vpriv->framebuf_used, n-1);
 
 		vpriv = (muxer_headers_t*) vs->priv;
-
-		if(as != NULL) apriv = (muxer_headers_t*) as->priv;
-		if(as != NULL && (apriv->size == 0))
+		
+		duration = 0;
+		iduration = 0;
+		for(i = 0; i < n; i++)
+			iduration += vpriv->framebuf[i].idur;
+		duration = (double) (iduration / 27000000.0);
+		
+		if(as != NULL)
 		{
 			apriv = (muxer_headers_t*) as->priv;
+			iaduration = 0;
+			for(i = 0; i < apriv->framebuf_used; i++)
+			{
+				iaduration += apriv->framebuf[i].idur;
+			}
+			if(iaduration < iduration)
+			{
+				mp_msg(MSGT_MUXER, MSGL_DBG2, "Not enough audio data exit\n");
+				return 0;
+			}
+		}
+		
+		if(as != NULL && (apriv->size == 0))
+		{
 			init_delay = vpriv->framebuf[0].pts - vpriv->framebuf[0].dts;
 		
 			for(i = 0; i < apriv->framebuf_cnt; i++)



More information about the MPlayer-cvslog mailing list