[vlc-commits] demux: avi: fix interleaved/seekable confusion
Francois Cartegnie
git at videolan.org
Sat Jul 26 01:30:25 CEST 2014
vlc/vlc-2.2 | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Sat Jul 19 00:42:22 2014 +0900| [28f0a772bb90a1dfc5a268edd7c9ec956d68b2ca] | committer: Jean-Baptiste Kempf
demux: avi: fix interleaved/seekable confusion
(cherry picked from commit 99ddaf5a8a8d1013fe7cc40006f5fb8150189d06)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=28f0a772bb90a1dfc5a268edd7c9ec956d68b2ca
---
modules/demux/avi/avi.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
diff --git a/modules/demux/avi/avi.c b/modules/demux/avi/avi.c
index 902af36..d1a6b89 100644
--- a/modules/demux/avi/avi.c
+++ b/modules/demux/avi/avi.c
@@ -173,6 +173,7 @@ struct demux_sys_t
mtime_t i_time;
mtime_t i_length;
+ bool b_interleaved;
bool b_seekable;
bool b_fastseekable;
bool b_indexloaded; /* if we read indexes from end of file before starting */
@@ -298,12 +299,7 @@ static int Open( vlc_object_t * p_this )
p_demux->pf_control = Control;
p_demux->pf_demux = Demux_Seekable;
- /* For unseekable stream, automatically use Demux_UnSeekable */
- if( !p_sys->b_seekable
- || var_InheritBool( p_demux, "avi-interleaved" ) )
- {
- p_demux->pf_demux = Demux_UnSeekable;
- }
+ p_sys->b_interleaved = var_InheritBool( p_demux, "avi-interleaved" );
if( i_peeker > 0 )
{
@@ -375,6 +371,8 @@ static int Open( vlc_object_t * p_this )
p_avih->i_flags&AVIF_ISINTERLEAVED?" IS_INTERLEAVED":"",
p_avih->i_flags&AVIF_TRUSTCKTYPE?" TRUST_CKTYPE":"" );
+ p_sys->b_interleaved |= (p_avih->i_flags & AVIF_ISINTERLEAVED);
+
AVI_MetaLoad( p_demux, p_riff, p_avih );
p_sys->i_avih_flags = p_avih->i_flags;
@@ -1583,15 +1581,14 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
return VLC_SUCCESS;
case DEMUX_SET_POSITION:
f = (double)va_arg( args, double );
- if( p_sys->b_seekable )
+ if ( !p_sys->b_seekable )
{
- i64 = (mtime_t)(f * CLOCK_FREQ * p_sys->i_length);
- return Seek( p_demux, i64, (int)(f * 100) );
+ return VLC_EGENERIC;
}
else
{
- int64_t i_pos = stream_Size( p_demux->s ) * f;
- return stream_Seek( p_demux->s, i_pos );
+ i64 = (mtime_t)(f * CLOCK_FREQ * p_sys->i_length);
+ return Seek( p_demux, i64, (int)(f * 100) );
}
case DEMUX_GET_TIME:
More information about the vlc-commits
mailing list