vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Dec 22 15:58:18 2016 +0100| [dd12f84ea33f10b38d39bb8b686fdc50c1a2c2e4] | committer: Francois Cartegnie
demux: ts: don't pass corrupted packets to sections handler > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=dd12f84ea33f10b38d39bb8b686fdc50c1a2c2e4 --- modules/demux/mpeg/ts.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/modules/demux/mpeg/ts.c b/modules/demux/mpeg/ts.c index 2464cbe..8414819 100644 --- a/modules/demux/mpeg/ts.c +++ b/modules/demux/mpeg/ts.c @@ -176,6 +176,7 @@ static mtime_t GetPCR( const block_t * ); static block_t * ProcessTSPacket( demux_t *p_demux, ts_pid_t *pid, block_t *p_pkt, int * ); static bool GatherPESData( demux_t *p_demux, ts_pid_t *pid, block_t *p_bk, size_t ); +static bool GatherSectionsData( demux_t *p_demux, ts_pid_t *, block_t *, size_t ); static void ProgramSetPCR( demux_t *p_demux, ts_pmt_t *p_prg, mtime_t i_pcr ); static block_t* ReadTSPacket( demux_t *p_demux ); @@ -706,11 +707,9 @@ static int Demux( demux_t *p_demux ) { b_frame = GatherPESData( p_demux, p_pid, p_pkt, i_header ); } - else if( p_pid->u.p_pes->transport == TS_TRANSPORT_SECTIONS && - !(p_pkt->i_flags & BLOCK_FLAG_SCRAMBLED) ) + else if( p_pid->u.p_pes->transport == TS_TRANSPORT_SECTIONS ) { - ts_sections_processor_Push( p_pid->u.p_pes->p_sections_proc, p_pkt->p_buffer ); - b_frame = true; + b_frame = GatherSectionsData( p_demux, p_pid, p_pkt, i_header ); } else // pid->u.p_pes->transport == TS_TRANSPORT_IGNORE { @@ -2670,6 +2669,27 @@ static bool GatherPESData( demux_t *p_demux, ts_pid_t *pid, block_t *p_pkt, size return b_ret; } +static bool GatherSectionsData( demux_t *p_demux, ts_pid_t *p_pid, block_t *p_pkt, size_t i_skip ) +{ + VLC_UNUSED(i_skip); VLC_UNUSED(p_demux); + bool b_ret = false; + + if( p_pkt->i_flags & BLOCK_FLAG_DISCONTINUITY ) + { + ts_sections_processor_Reset( p_pid->u.p_pes->p_sections_proc ); + } + + if( (p_pkt->i_flags & (BLOCK_FLAG_SCRAMBLED | BLOCK_FLAG_CORRUPTED)) == 0 ) + { + ts_sections_processor_Push( p_pid->u.p_pes->p_sections_proc, p_pkt->p_buffer ); + b_ret = true; + } + + block_Release( p_pkt ); + + return b_ret; +} + void TsChangeStandard( demux_sys_t *p_sys, ts_standards_e v ) { if( p_sys->standard != TS_STANDARD_AUTO && _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
