[vlc-commits] mkv: abort seek completely if it fails
Filip Roséen
git at videolan.org
Fri May 13 15:42:33 CEST 2016
vlc | branch: master | Filip Roséen <filip at videolabs.io> | Fri May 13 15:34:43 2016 +0200| [38cd4bec5fa18e8b151da96ff5e722c74ffc5944] | committer: Thomas Guillem
mkv: abort seek completely if it fails
Signed-off-by: Thomas Guillem <thomas at gllm.fr>
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=38cd4bec5fa18e8b151da96ff5e722c74ffc5944
---
modules/demux/mkv/matroska_segment.cpp | 12 +++++++++++-
modules/demux/mkv/matroska_segment_seeker.cpp | 3 +--
modules/demux/mkv/mkv.hpp | 1 +
3 files changed, 13 insertions(+), 3 deletions(-)
diff --git a/modules/demux/mkv/matroska_segment.cpp b/modules/demux/mkv/matroska_segment.cpp
index ac5af66..07c431e 100644
--- a/modules/demux/mkv/matroska_segment.cpp
+++ b/modules/demux/mkv/matroska_segment.cpp
@@ -807,7 +807,17 @@ void matroska_segment_c::Seek( mtime_t i_absolute_mk_date, mtime_t i_mk_time_off
mtime_t i_mk_date = i_absolute_mk_date - i_mk_time_offset;
- SegmentSeeker::tracks_seekpoint_t seekpoints = _seeker.get_seekpoints_cues( *this, i_mk_date );
+ SegmentSeeker::tracks_seekpoint_t seekpoints;
+
+ try {
+ seekpoints = _seeker.get_seekpoints_cues( *this, i_mk_date );
+
+ }
+ catch( std::exception const& e )
+ {
+ msg_Err( &sys.demuxer, "error during seek: \"%s\", aborting!", e.what() );
+ return;
+ }
for( SegmentSeeker::tracks_seekpoint_t::iterator it = seekpoints.begin(); it != seekpoints.end(); ++it )
{
diff --git a/modules/demux/mkv/matroska_segment_seeker.cpp b/modules/demux/mkv/matroska_segment_seeker.cpp
index 49750a1..8ae1a4a 100644
--- a/modules/demux/mkv/matroska_segment_seeker.cpp
+++ b/modules/demux/mkv/matroska_segment_seeker.cpp
@@ -283,8 +283,7 @@ SegmentSeeker::index_unsearched_range( matroska_segment_c& ms, Range search_area
if( ms.BlockGet( block, simpleblock, &b_key_picture, &b_discardable_picture, &i_block_duration ) )
{
- msg_Err( &ms.sys.demuxer, "Unable to BlockGet in matroska_segment_c::Seek, EOF?" );
- return;
+ throw std::runtime_error( "Unable to BlockGet in SegmentSeeker::index_unsearched_range, EOF?" );
}
if( simpleblock ) {
diff --git a/modules/demux/mkv/mkv.hpp b/modules/demux/mkv/mkv.hpp
index 8bad7dc..6bbca6b 100644
--- a/modules/demux/mkv/mkv.hpp
+++ b/modules/demux/mkv/mkv.hpp
@@ -53,6 +53,7 @@
#include <vector>
#include <algorithm>
#include <map>
+#include <stdexcept>
/* libebml and matroska */
#include "ebml/EbmlHead.h"
More information about the vlc-commits
mailing list