vlc | branch: master | Francois Cartegnie <[email protected]> | Thu Dec 22 13:36:45 2016 +0100| [71089d390f1a2bbcfe1645fcedd54e06e30b4b61] | committer: Francois Cartegnie
demux: ts: early reject corrupted packets There's no way to know if any of the bits is valid. We can't even flag pid with corrupted/discontinuity as its number can also be corrupted. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=71089d390f1a2bbcfe1645fcedd54e06e30b4b61 --- modules/demux/mpeg/ts.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/modules/demux/mpeg/ts.c b/modules/demux/mpeg/ts.c index a7091e2..4bcc00c 100644 --- a/modules/demux/mpeg/ts.c +++ b/modules/demux/mpeg/ts.c @@ -623,6 +623,15 @@ static int Demux( demux_t *p_demux ) continue; } + /* Reject any fully uncorrected packet. Even PID can be incorrect */ + if( p_pkt->p_buffer[1]&0x80 ) + { + msg_Dbg( p_demux, "transport_error_indicator set (pid=%d)", + PIDGet( p_pkt ) ); + block_Release( p_pkt ); + continue; + } + /* Parse the TS packet */ ts_pid_t *p_pid = GetPID( p_sys, PIDGet( p_pkt ) ); @@ -1940,7 +1949,8 @@ static int ProbeChunk( demux_t *p_demux, int i_program, bool b_end, int64_t *pi_ break; } - if( p_pkt->i_size < TS_PACKET_SIZE_188 ) + if( p_pkt->i_size < TS_PACKET_SIZE_188 && + ( p_pkt->p_buffer[1]&0x80 ) /* transport error */ ) { block_Release( p_pkt ); continue; @@ -2351,14 +2361,6 @@ static bool ProcessTSPacket( demux_t *p_demux, ts_pid_t *pid, block_t *p_pkt ) * TODO: handle Reed-Solomon 204,188 error correction */ p_pkt->i_buffer = TS_PACKET_SIZE_188; - if( p[1]&0x80 ) - { - msg_Dbg( p_demux, "transport_error_indicator set (pid=%d)", - pid->i_pid ); - if( p_pes->gather.p_data ) //&& pid->es->fmt.i_cat == VIDEO_ES ) - p_pes->gather.p_data->i_flags |= BLOCK_FLAG_CORRUPTED; - } - if( SCRAMBLED(*pid) ) { if( p_demux->p_sys->csa ) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
