* modules/demux/avi/avi.c: Fixed infinite loop in the AVI demux on broken/incomplete files

This commit is contained in:
Gildas Bazin 2004-04-29 14:43:12 +00:00
parent 6f2c07b9f4
commit 76e67e8c53
2 changed files with 16 additions and 0 deletions

1
NEWS
View File

@ -29,6 +29,7 @@ Input:
Demux:
* Annodex (http://www.annodex.net) support.
* mmsh streaming fixes.
* Fixed infinite loop in the AVI demux on broken/incomplete files.
Subtitles:
* Subviewer and subviewer v2 subtitles support.

View File

@ -693,6 +693,8 @@ static int Demux_Seekable( demux_t *p_demux )
if( i_pos == -1 )
{
int i_loop_count = 0;
/* no valid index, we will parse directly the stream
* in case we fail we will disable all finished stream */
if( p_sys->i_movi_lastchunk_pos >= p_sys->i_movi_begin + 12 )
@ -727,6 +729,19 @@ static int Demux_Seekable( demux_t *p_demux )
"cannot skip packet, track disabled" );
return( AVI_TrackStopFinishedStreams( p_demux ) ? 0 : 1 );
}
/* Prevents from eating all the CPU with broken files.
* This value should be low enough so that it doesn't
* affect the reading speed too much. */
if( !(++i_loop_count % 1024) )
{
if( p_demux->b_die ) return -1;
msleep( 10000 );
if( !(i_loop_count % (1024 * 10)) )
msg_Warn( p_demux,
"doesn't seem to find any data..." );
}
continue;
}
else