vlc | branch: master | Frédéric Yhuel <yhu...@gmail.com> | Sun Sep 23 18:23:38 2012 +0200| [5a72f814368a14e31bfbce3c7a3402068e3f648a] | committer: Jean-Baptiste Kempf
demux/mp4: fix PTS computation p_sample_offset_pts must be NULL if MP4_TRUN_SAMPLE_TIME_OFFSET is not present. Then MP4_TrackGetPTSDelta would return -1 (instead of 0 previously), and PTS of video frames would be set to VLC_TS_INVALID, which is the right thing to do in that case. Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=5a72f814368a14e31bfbce3c7a3402068e3f648a --- modules/demux/mp4/mp4.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c index c83be06..f45e9fd 100644 --- a/modules/demux/mp4/mp4.c +++ b/modules/demux/mp4/mp4.c @@ -3459,11 +3459,16 @@ static int MP4_frg_GetChunk( demux_t *p_demux, MP4_Box_t *p_chunk, unsigned *i_t return VLC_ENOMEM; ret->p_sample_count_pts = calloc( ret->i_sample_count, sizeof( uint32_t ) ); - ret->p_sample_offset_pts = calloc( ret->i_sample_count, sizeof( int32_t ) ); - - if( !ret->p_sample_count_pts || !ret->p_sample_offset_pts ) + if( !ret->p_sample_count_pts ) return VLC_ENOMEM; + if( p_trun_data->i_flags & MP4_TRUN_SAMPLE_TIME_OFFSET ) + { + ret->p_sample_offset_pts = calloc( ret->i_sample_count, sizeof( int32_t ) ); + if( !ret->p_sample_offset_pts ) + return VLC_ENOMEM; + } + ret->p_sample_size = calloc( ret->i_sample_count, sizeof( uint32_t ) ); if( !ret->p_sample_size ) return VLC_ENOMEM; @@ -3489,13 +3494,11 @@ static int MP4_frg_GetChunk( demux_t *p_demux, MP4_Box_t *p_chunk, unsigned *i_t ret->p_sample_count_dts[i] = ret->p_sample_count_pts[i] = 1; - if( p_trun_data->i_flags & MP4_TRUN_SAMPLE_TIME_OFFSET ) + if( ret->p_sample_offset_pts ) { ret->p_sample_offset_pts[i] = p_trun_data->p_samples[i].i_composition_time_offset; } - else - ret->p_sample_offset_pts[i] = 0; if( p_trun_data->i_flags & MP4_TRUN_SAMPLE_SIZE ) len = ret->p_sample_size[i] = p_trun_data->p_samples[i].i_size; _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org http://mailman.videolan.org/listinfo/vlc-commits