[vlc-commits] mkv: add DEMUX_GET_(TITLE|SEEKPOINT)

Rémi Denis-Courmont git at videolan.org
Sun Dec 3 13:27:23 CET 2017


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Sun Dec  3 12:14:15 2017 +0200| [db33e6a2ed90aaa1989ee471d08742597f35e1e7] | committer: Rémi Denis-Courmont

mkv: add DEMUX_GET_(TITLE|SEEKPOINT)

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=db33e6a2ed90aaa1989ee471d08742597f35e1e7
---

 modules/demux/mkv/demux.hpp           |  2 ++
 modules/demux/mkv/mkv.cpp             | 13 ++++++++++---
 modules/demux/mkv/virtual_segment.cpp |  8 ++++----
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/modules/demux/mkv/demux.hpp b/modules/demux/mkv/demux.hpp
index f5b0b0d9db..1d6c3d5bf5 100644
--- a/modules/demux/mkv/demux.hpp
+++ b/modules/demux/mkv/demux.hpp
@@ -337,6 +337,7 @@ public:
         ,i_mk_chapter_time(0)
         ,meta(NULL)
         ,i_current_title(0)
+        ,i_current_seekpoint(0)
         ,p_current_vsegment(NULL)
         ,dvd_interpretor( *this )
         ,f_duration(-1.0)
@@ -360,6 +361,7 @@ public:
 
     std::vector<input_title_t*>      titles; // matroska editions
     size_t                           i_current_title;
+    size_t                           i_current_seekpoint;
 
     std::vector<matroska_stream_c*>  streams;
     std::vector<attachment_c*>       stored_attachments;
diff --git a/modules/demux/mkv/mkv.cpp b/modules/demux/mkv/mkv.cpp
index 3a8a0baaae..95d4308ab3 100644
--- a/modules/demux/mkv/mkv.cpp
+++ b/modules/demux/mkv/mkv.cpp
@@ -394,8 +394,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
                     Seek( p_demux, static_cast<int64_t>( p_sys->titles[i_idx]->seekpoint[0]->i_time_offset ), -1, NULL) )
                 {
                     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->i_current_seekpoint = 0;
                     p_sys->f_duration = (float) p_sys->titles[i_idx]->i_length / 1000.f;
                     return VLC_SUCCESS;
                 }
@@ -417,12 +416,20 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
                 if( i_ret == VLC_SUCCESS )
                 {
                     p_demux->info.i_update |= INPUT_UPDATE_SEEKPOINT;
-                    p_demux->info.i_seekpoint = i_skp;
+                    p_sys->i_current_seekpoint = i_skp;
                 }
                 return i_ret;
             }
             return VLC_EGENERIC;
 
+        case DEMUX_GET_TITLE:
+            *va_arg( args, int * ) = p_sys->i_current_title;
+            return VLC_SUCCESS;
+
+        case DEMUX_GET_SEEKPOINT:
+            *va_arg( args, int * ) = p_sys->i_current_seekpoint;
+            return VLC_SUCCESS;
+
         case DEMUX_GET_FPS:
             pf = va_arg( args, double * );
             *pf = 0.0;
diff --git a/modules/demux/mkv/virtual_segment.cpp b/modules/demux/mkv/virtual_segment.cpp
index a3b2e34127..eea846ffd5 100644
--- a/modules/demux/mkv/virtual_segment.cpp
+++ b/modules/demux/mkv/virtual_segment.cpp
@@ -474,8 +474,8 @@ bool virtual_segment_c::UpdateCurrentToChapter( demux_t & demux )
             if ( p_cur_vchapter->i_seekpoint_num > 0 )
             {
                 demux.info.i_update |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
-                demux.info.i_title = sys.i_current_title = i_sys_title;
-                demux.info.i_seekpoint = p_cur_vchapter->i_seekpoint_num - 1;
+                sys.i_current_title = i_sys_title;
+                sys.i_current_seekpoint = p_cur_vchapter->i_seekpoint_num - 1;
             }
 
             return b_has_seeked;
@@ -531,8 +531,8 @@ bool virtual_segment_c::Seek( demux_t & demuxer, mtime_t i_mk_date,
         if ( p_vchapter->p_chapter && p_vchapter->i_seekpoint_num > 0 )
         {
             demuxer.info.i_update |= INPUT_UPDATE_TITLE | INPUT_UPDATE_SEEKPOINT;
-            demuxer.info.i_title = p_sys->i_current_title = i_sys_title;
-            demuxer.info.i_seekpoint = p_vchapter->i_seekpoint_num - 1;
+            p_sys->i_current_title = i_sys_title;
+            p_sys->i_current_seekpoint = p_vchapter->i_seekpoint_num - 1;
         }
 
         if( p_current_vchapter == NULL || &p_current_vchapter->segment != &p_vchapter->segment )



More information about the vlc-commits mailing list