[vlc-commits] mux: ts: handle borked dts in mux
Francois Cartegnie
git at videolan.org
Wed Apr 18 11:01:08 CEST 2018
vlc/vlc-3.0 | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Tue Apr 17 19:35:19 2018 +0200| [6e63157bc8ecb2f96ac7d4ac08c65627b1a38258] | committer: Hugo Beauzée-Luyssen
mux: ts: handle borked dts in mux
(cherry picked from commit b71afa275dc68448693bed83dd6f98034ce08120)
Signed-off-by: Hugo Beauzée-Luyssen <hugo at beauzee.fr>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=6e63157bc8ecb2f96ac7d4ac08c65627b1a38258
---
modules/mux/mpeg/ts.c | 17 ++++++++++++++---
1 file changed, 14 insertions(+), 3 deletions(-)
diff --git a/modules/mux/mpeg/ts.c b/modules/mux/mpeg/ts.c
index c3b0d6d33a..c3b715a7c4 100644
--- a/modules/mux/mpeg/ts.c
+++ b/modules/mux/mpeg/ts.c
@@ -1274,7 +1274,9 @@ static bool MuxStreams(sout_mux_t *p_mux )
(p_input->p_fmt->i_codec != VLC_CODEC_MP3) ) )
{
p_data = block_FifoGet( p_input->p_fifo );
- if (p_data->i_pts <= VLC_TS_INVALID)
+ if( p_data->i_dts <= VLC_TS_INVALID )
+ p_data->i_dts = p_data->i_pts;
+ else if ( p_data->i_pts <= VLC_TS_INVALID )
p_data->i_pts = p_data->i_dts;
if( p_input->p_fmt->i_codec == VLC_CODEC_MP4A )
@@ -1287,6 +1289,13 @@ static bool MuxStreams(sout_mux_t *p_mux )
SetBlockDuration( p_input, p_data );
+ if( p_data->i_dts == VLC_TS_INVALID )
+ {
+ msg_Err( p_mux, "non dated packet dropped" );
+ block_Release( p_data );
+ continue;
+ }
+
if ( p_sys->first_dts == 0 )
{
/* Pick the really first DTS */
@@ -1638,8 +1647,10 @@ static block_t *FixPES( sout_mux_t *p_mux, block_fifo_t *p_fifo )
i_copy = __MIN( STD_PES_PAYLOAD - i_size, p_next->i_buffer );
memcpy( &p_data->p_buffer[i_size], p_next->p_buffer, i_copy );
- p_next->i_pts += p_next->i_length * i_copy / p_next->i_buffer;
- p_next->i_dts += p_next->i_length * i_copy / p_next->i_buffer;
+ if( p_next->i_pts )
+ p_next->i_pts += p_next->i_length * i_copy / p_next->i_buffer;
+ if( p_next->i_dts )
+ p_next->i_dts += p_next->i_length * i_copy / p_next->i_buffer;
p_next->i_length -= p_next->i_length * i_copy / p_next->i_buffer;
p_next->i_buffer -= i_copy;
p_next->p_buffer += i_copy;
More information about the vlc-commits
mailing list