[vlc-devel] [PATCH] demux: ogg: use PCR for DEMUX_GET_POSITION
Francois Cartegnie
fcvlcdev at free.fr
Thu Sep 19 22:49:03 CEST 2013
GET_TIME is based on ogg packets PCR and GET_POSITION was
based on stream byte offset. UI seekbar was never accurate.
---
modules/demux/ogg.c | 16 ++++++++++++++++
1 file changed, 16 insertions(+)
diff --git a/modules/demux/ogg.c b/modules/demux/ogg.c
index b52c673..9a0d842 100644
--- a/modules/demux/ogg.c
+++ b/modules/demux/ogg.c
@@ -501,6 +501,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
demux_sys_t *p_sys = p_demux->p_sys;
vlc_meta_t *p_meta;
int64_t *pi64, i64;
+ double *pf, f;
bool *pb_bool;
switch( i_query )
@@ -543,6 +544,21 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
return VLC_SUCCESS;
}
+ case DEMUX_GET_POSITION:
+ pf = (double*)va_arg( args, double * );
+ if( p_sys->i_length > 0 )
+ {
+ *pf = (double) p_sys->i_pcr /
+ (double) ( p_sys->i_length * (mtime_t)1000000 );
+ }
+ else if( stream_Size( p_demux->s ) > 0 )
+ {
+ double i64 = (uint64_t)stream_Tell( p_demux->s );
+ return i64 / stream_Size( p_demux->s );
+ }
+ else *pf = 0.0;
+ return VLC_SUCCESS;
+
case DEMUX_SET_POSITION:
/* forbid seeking if we haven't initialized all logical bitstreams yet;
if we allowed, some headers would not get backed up and decoder init
--
1.8.1.4
More information about the vlc-devel
mailing list