vlc | branch: master | Filip Roséen <[email protected]> | Mon May 9 14:53:17 2016 +0200| [f79a9ff71a1442abf62c9e732a494d2cf7da60a3] | committer: Jean-Baptiste Kempf
mkv: skip decoding of blocks that are not necessary Since the seeking algorithm(s) will set track.i_skip_until_fpos to a value other than uint64_t( -1 ) (equivalent of the usage of std::numeric_limits), we can ignore blocks with a lower file-position in the Demuxer (and hence not send them to the decoder). This will save us some time, while maintaining the proper state of the relevant decoders. Signed-off-by: Jean-Baptiste Kempf <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f79a9ff71a1442abf62c9e732a494d2cf7da60a3 --- modules/demux/mkv/mkv.cpp | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/modules/demux/mkv/mkv.cpp b/modules/demux/mkv/mkv.cpp index c064376..d85f809 100644 --- a/modules/demux/mkv/mkv.cpp +++ b/modules/demux/mkv/mkv.cpp @@ -736,8 +736,35 @@ static int Demux( demux_t *p_demux) return 0; } + { + matroska_segment_c::tracks_map_t::iterator track_it; + + if( p_segment->FindTrackByBlock( &track_it, block, simpleblock ) ) + { + msg_Err( p_demux, "invalid track number" ); + delete block; + return 0; + } + + matroska_segment_c::tracks_map_t::mapped_type& track = track_it->second; + + + if( track.i_skip_until_fpos != std::numeric_limits<uint64_t>::max() ) { + uint64_t block_fpos = 0; + if( block ) block_fpos = block->GetElementPosition(); + else block_fpos = simpleblock->GetElementPosition(); + + if ( track.i_skip_until_fpos > block_fpos ) + { + delete block; + return 1; // this block shall be ignored + } + + track.i_skip_until_fpos = -1; + } + } /* update pcr */ { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
