vlc | branch: master | Denis Charmet <[email protected]> | Sat Mar 22 19:10:46 2014 +0100| [f1457ea32f4241f85e73ac47b7030702a24abebc] | committer: Denis Charmet
Fix MKV multiple edition handling This use the default edition and properly signals the core that the title has changed Fix #10542 > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f1457ea32f4241f85e73ac47b7030702a24abebc --- modules/demux/mkv/mkv.cpp | 3 ++- modules/demux/mkv/virtual_segment.cpp | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/demux/mkv/mkv.cpp b/modules/demux/mkv/mkv.cpp index 8dfe5f1..950fdfe 100644 --- a/modules/demux/mkv/mkv.cpp +++ b/modules/demux/mkv/mkv.cpp @@ -370,8 +370,9 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) p_sys->p_current_segment->p_current_chapter = p_sys->p_current_segment->editions[p_sys->p_current_segment->i_current_edition]->getChapterbyTimecode(0); Seek( p_demux, (int64_t)p_sys->titles[i_idx]->seekpoint[0]->i_time_offset, -1, NULL); - p_demux->info.i_update |= INPUT_UPDATE_SEEKPOINT; + p_demux->info.i_update |= INPUT_UPDATE_SEEKPOINT|INPUT_UPDATE_TITLE; p_demux->info.i_seekpoint = 0; + p_demux->info.i_title = i_idx; p_sys->f_duration = (float) p_sys->titles[i_idx]->i_length / 1000.f; return VLC_SUCCESS; } diff --git a/modules/demux/mkv/virtual_segment.cpp b/modules/demux/mkv/virtual_segment.cpp index 75d8035..3b1b68e 100644 --- a/modules/demux/mkv/virtual_segment.cpp +++ b/modules/demux/mkv/virtual_segment.cpp @@ -267,6 +267,8 @@ virtual_segment_c::virtual_segment_c( std::vector<matroska_segment_c*> * p_opene i_sys_title = 0; p_current_chapter = NULL; + i_current_edition = p_segment->i_default_edition; + for( i = 0; i < p_segment->stored_editions.size(); i++ ) { /* Create a virtual edition from opened */ @@ -276,9 +278,16 @@ virtual_segment_c::virtual_segment_c( std::vector<matroska_segment_c*> * p_opene * on an other segment which couldn't be found... ignore it */ if(p_vedition->b_ordered && p_vedition->i_duration == 0) { + msg_Warn( &p_segment->sys.demuxer, "Edition %s (%zu) links to other segments not found and is empty... ignoring it", p_vedition->GetMainName().c_str(), i ); + if(i_current_edition == i) + { + msg_Warn( &p_segment->sys.demuxer, + "Empty edition was the default... defaulting to 0"); + i_current_edition = 0; + } delete p_vedition; } else _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
