vlc | branch: master | Francois Cartegnie <[email protected]> | Fri Mar 25 09:47:32 2016 +0100| [a17d698a7c5d12ce7294edcdfee2b0f20f38e1ba] | committer: Francois Cartegnie
demux: mp4: refine sync sample using rap group (refs #16732) > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a17d698a7c5d12ce7294edcdfee2b0f20f38e1ba --- modules/demux/mp4/mp4.c | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c index bd5beee..3a9317a 100644 --- a/modules/demux/mp4/mp4.c +++ b/modules/demux/mp4/mp4.c @@ -2353,6 +2353,7 @@ static int TrackGetNearestSeekPoint( demux_t *p_demux, mp4_track_t *p_track, uint32_t i_sample, uint32_t *pi_sync_sample ) { int i_ret = VLC_EGENERIC; + *pi_sync_sample = 0; const MP4_Box_t *p_stss; if( ( p_stss = MP4_BoxGet( p_track->p_stbl, "stss" ) ) ) @@ -2374,6 +2375,46 @@ static int TrackGetNearestSeekPoint( demux_t *p_demux, mp4_track_t *p_track, } } + /* try rap samples groups */ + const MP4_Box_t *p_sbgp = MP4_BoxGet( p_track->p_stbl, "sbgp" ); + for( ; p_sbgp; p_sbgp = p_sbgp->p_next ) + { + const MP4_Box_data_sbgp_t *p_sbgp_data = BOXDATA(p_sbgp); + if( p_sbgp->i_type != ATOM_sbgp || !p_sbgp_data ) + continue; + + if( p_sbgp_data->i_grouping_type == SAMPLEGROUP_rap ) + { + uint32_t i_group_sample = 0; + for ( uint32_t i=0; i<p_sbgp_data->i_entry_count; i++ ) + { + /* Sample belongs to rap group ? */ + if( p_sbgp_data->entries.pi_group_description_index[i] != 0 ) + { + if( i_sample < i_group_sample ) + { + msg_Dbg( p_demux, "sbgp lookup failed %" PRIu32 " (sample number)", + i_sample ); + break; + } + else if ( i_sample >= i_group_sample && + *pi_sync_sample < i_group_sample ) + { + *pi_sync_sample = i_group_sample; + i_ret = VLC_SUCCESS; + } + } + i_group_sample += p_sbgp_data->entries.pi_sample_count[i]; + } + + if( i_ret == VLC_SUCCESS && *pi_sync_sample ) + { + msg_Dbg( p_demux, "sbgp gives %d --> %" PRIu32 " (sample number)", + i_sample, *pi_sync_sample ); + } + } + } + return i_ret; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
