diff --git a/modules/demux/mp4/libmp4.h b/modules/demux/mp4/libmp4.h index 30f0f87c674132c2c6f85f0a147bbe9a57de7c1a..6850b2b2e2fb70549258ed16f00e172c52c3c3bf 100644 --- a/modules/demux/mp4/libmp4.h +++ b/modules/demux/mp4/libmp4.h @@ -953,7 +953,7 @@ typedef struct MP4_descriptor_trun_sample_t uint32_t i_duration; uint32_t i_size; uint32_t i_flags; - uint32_t i_composition_time_offset; + uint32_t i_composition_time_offset; /* version == 0 ? signed : unsigned */ } MP4_descriptor_trun_sample_t; typedef struct MP4_Box_data_trun_s diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c index 71d2d8e97edb6203448d1a2afd23969e309db31c..a36599231262035203089a33700fd58a872fa32d 100644 --- a/modules/demux/mp4/mp4.c +++ b/modules/demux/mp4/mp4.c @@ -3933,8 +3933,10 @@ static int MP4_frg_GetChunk( demux_t *p_demux, MP4_Box_t *p_chunk, unsigned *i_t if( ret->p_sample_offset_pts ) { - ret->p_sample_offset_pts[i] = - p_trun_data->p_samples[i].i_composition_time_offset; + if ( p_trun_data->i_version == 0 ) + ret->p_sample_offset_pts[i] = (int32_t) p_trun_data->p_samples[i].i_composition_time_offset; + else + ret->p_sample_offset_pts[i] = __MIN( INT32_MAX, p_trun_data->p_samples[i].i_composition_time_offset ); } if( p_trun_data->i_flags & MP4_TRUN_SAMPLE_SIZE )