]> git.sesse.net Git - vlc/commitdiff
* ps.c: Base SET_TIME on the current byteposition. This helps seeking in VBR files...
authorDerk-Jan Hartman <hartman@videolan.org>
Mon, 13 Nov 2006 21:51:55 +0000 (21:51 +0000)
committerDerk-Jan Hartman <hartman@videolan.org>
Mon, 13 Nov 2006 21:51:55 +0000 (21:51 +0000)
modules/demux/ps.c

index 63d32f405bf67b990ed917b55e3de5c92fb2e5c0..5abacc54974b475c8ab6764a1dbeb21f3ff289cd 100644 (file)
@@ -482,6 +482,19 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
             return VLC_EGENERIC;
 
         case DEMUX_SET_TIME:
+            i64 = (int64_t)va_arg( args, int64_t );
+            if( p_sys->i_time_track >= 0 && p_sys->i_current_pts > 0 )
+            {
+                int64_t i_now = p_sys->i_current_pts - p_sys->tk[p_sys->i_time_track].i_first_pts;
+                int64_t i_pos = stream_Tell( p_demux->s );
+                int64_t i_offset = i_pos / (i_now / 1000000) * ((i64 - i_now) / 1000000);
+                stream_Seek( p_demux->s, i_pos + i_offset);
+
+                es_out_Control( p_demux->out, ES_OUT_RESET_PCR );
+                return VLC_SUCCESS;
+            }
+            return VLC_EGENERIC;
+
         case DEMUX_GET_FPS:
         default:
             return VLC_EGENERIC;