[vlc-devel] [PATCH] demux: ts: support get length for non fastseekable
Zhao Zhili
wantlamy at gmail.com
Wed Mar 9 16:09:34 CET 2016
---
modules/demux/mpeg/ts.c | 6 +++++-
modules/demux/mpeg/ts_psi.c | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/modules/demux/mpeg/ts.c b/modules/demux/mpeg/ts.c
index f70844b..e673cc7 100644
--- a/modules/demux/mpeg/ts.c
+++ b/modules/demux/mpeg/ts.c
@@ -1976,10 +1976,14 @@ int ProbeEnd( demux_t *p_demux, int i_program )
int64_t i_stream_size = stream_Size( p_sys->stream );
int i_probe_count = PROBE_CHUNK_COUNT;
+ const int i_probe_max = 5 * PROBE_CHUNK_COUNT;
int64_t i_pos;
mtime_t i_pcr = -1;
bool b_found = false;
+ if ( p_sys->b_canfastseek == false )
+ i_probe_count = i_probe_max;
+
do
{
i_pos = i_stream_size - (p_sys->i_packet_size * i_probe_count);
@@ -1992,7 +1996,7 @@ int ProbeEnd( demux_t *p_demux, int i_program )
/* Go ahead one more chunk if end of file contained only stuffing
packets */
i_probe_count += PROBE_CHUNK_COUNT;
- } while( i_pos > 0 && (i_pcr == -1 || !b_found) && i_probe_count < (6
* PROBE_CHUNK_COUNT) );
+ } while( i_pos > 0 && (i_pcr == -1 || !b_found) && i_probe_count <=
i_probe_max );
if( stream_Seek( p_sys->stream, i_initial_pos ) )
return VLC_EGENERIC;
diff --git a/modules/demux/mpeg/ts_psi.c b/modules/demux/mpeg/ts_psi.c
index ac14b79..05623ac 100644
--- a/modules/demux/mpeg/ts_psi.c
+++ b/modules/demux/mpeg/ts_psi.c
@@ -1714,7 +1714,7 @@ static void PMTCallBack( void *data, dvbpsi_pmt_t
*p_dvbpsipmt )
}
/* Probe Boundaries */
- if( p_sys->b_canfastseek && p_pmt->i_last_dts == -1 )
+ if( p_sys->b_canseek && p_pmt->i_last_dts == -1 )
{
p_pmt->i_last_dts = 0;
ProbeStart( p_demux, p_pmt->i_number );
--
1.9.1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20160309/0fc99c26/attachment.html>
More information about the vlc-devel
mailing list