vlc | branch: master | Francois Cartegnie <[email protected]> | Mon Jan 11 15:57:20 2016 +0100| [cb66960231e99041518c118873abe6ff1ff869f5] | committer: Francois Cartegnie
demux: avi: fix non seekable streams > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=cb66960231e99041518c118873abe6ff1ff869f5 --- modules/demux/avi/avi.c | 23 +++++++++++++++-------- modules/demux/avi/libavi.c | 7 +++---- 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/modules/demux/avi/avi.c b/modules/demux/avi/avi.c index 9368e9d..9044986 100644 --- a/modules/demux/avi/avi.c +++ b/modules/demux/avi/avi.c @@ -705,13 +705,16 @@ aviindex: { AVI_IndexCreate( p_demux ); } + else if( p_sys->b_seekable ) + { + AVI_IndexLoad( p_demux ); + } else { msg_Warn( p_demux, "cannot create index (unseekable stream)" ); - AVI_IndexLoad( p_demux ); } } - else + else if( p_sys->b_seekable ) { AVI_IndexLoad( p_demux ); } @@ -877,11 +880,8 @@ block_t * ReadFrame( demux_t *p_demux, const avi_track_t *tk, } /* skip header */ - if( tk->i_idxposb == 0 ) - { - p_frame->p_buffer += i_header; - p_frame->i_buffer -= i_header; - } + p_frame->p_buffer += i_header; + p_frame->i_buffer -= i_header; if ( !tk->i_width_bytes ) return p_frame; @@ -1181,7 +1181,14 @@ static int Demux_Seekable( demux_t *p_demux ) } else { - stream_Seek( p_demux->s, i_pos ); + if( !p_sys->b_fastseekable && (i_pos > stream_Tell( p_demux->s )) ) + { + stream_Read( p_demux->s, NULL, i_pos - stream_Tell( p_demux->s ) ); + } + else + { + stream_Seek( p_demux->s, i_pos ); + } } /* Set the track to use */ diff --git a/modules/demux/avi/libavi.c b/modules/demux/avi/libavi.c index d12ed9f..8deb2b6 100644 --- a/modules/demux/avi/libavi.c +++ b/modules/demux/avi/libavi.c @@ -152,11 +152,10 @@ static int AVI_ChunkRead_list( stream_t *s, avi_chunk_t *p_container ) if( p_container->common.i_chunk_fourcc == AVIFOURCC_LIST && p_container->list.i_type == AVIFOURCC_movi ) { + if( !b_seekable ) + return VLC_SUCCESS; msg_Dbg( (vlc_object_t*)s, "skipping movi chunk" ); - if( b_seekable ) - return AVI_NextChunk( s, p_container ); - else - return VLC_EGENERIC; /* point at begining of LIST-movi */ + return AVI_NextChunk( s, p_container ); /* points at begining of LIST-movi if not seekable */ } if( stream_Read( s, NULL, 12 ) != 12 ) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
