[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