From c1a82127fc2d99293cf27d3821d5ab85c93cc4ec Mon Sep 17 00:00:00 2001 From: jstebbins Date: Mon, 13 Sep 2010 20:30:02 +0000 Subject: fix a rare hang in the muxer. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3525 b64f7644-9d1e-0410-96f1-a4d463321fa5 --- libhb/muxcommon.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'libhb/muxcommon.c') diff --git a/libhb/muxcommon.c b/libhb/muxcommon.c index 05f49d40f..cb61739ac 100644 --- a/libhb/muxcommon.c +++ b/libhb/muxcommon.c @@ -244,10 +244,12 @@ static int muxWork( hb_work_object_t * w, hb_buffer_t ** buf_in, return HB_WORK_OK; } + int more = mux->rdy; // all tracks have at least 'interleave' ticks of data. Output // all that we can in 'interleave' size chunks. - while ( ( mux->rdy & mux->allRdy ) == mux->allRdy ) + while ( ( mux->rdy & mux->allRdy ) == mux->allRdy && more ) { + more = 0; for ( i = 0; i < mux->ntracks; ++i ) { track = mux->track[i]; @@ -270,6 +272,10 @@ static int muxWork( hb_work_object_t * w, hb_buffer_t ** buf_in, { mux->rdy &=~ ( 1 << i ); } + if ( track->mf.out != track->mf.in ) + { + more |= ( 1 << i ); + } } // if all the tracks are at eof we're just purging their -- cgit v1.2.3