]> git.sesse.net Git - vlc/commitdiff
mkv.cpp: store the translation between segment IDs for each chapter codec
authorSteve Lhomme <robux@videolan.org>
Mon, 11 Apr 2005 20:07:05 +0000 (20:07 +0000)
committerSteve Lhomme <robux@videolan.org>
Mon, 11 Apr 2005 20:07:05 +0000 (20:07 +0000)
modules/demux/mkv.cpp

index d0e2140c76873ede8455dee0045678125be73c1f..14743a19d9bad297fbfe35dc66b0d4a705558d13 100644 (file)
@@ -80,6 +80,7 @@
 #include "matroska/KaxTrackVideo.h"
 #include "matroska/KaxTrackEntryData.h"
 #include "matroska/KaxContentEncoding.h"
+#include "matroska/KaxVersion.h"
 
 #include "ebml/StdIOCallback.h"
 
@@ -341,6 +342,14 @@ class matroska_script_codec_t : public chapter_codec_cmds_t
 {
 };
 
+class chapter_translation_t
+{
+public:
+    KaxChapterTranslateID  translated;
+    unsigned int           codec_id;
+    std::vector<uint64_t>  editions;
+};
+
 class chapter_item_t
 {
 public:
@@ -526,6 +535,7 @@ public:
     std::vector<chapter_edition_t> stored_editions;
     int                            i_default_edition;
 
+    std::vector<chapter_translation_t> translations;
     std::vector<KaxSegmentFamily>  families;
     
     demux_sys_t                    & sys;
@@ -2900,7 +2910,7 @@ void matroska_segment_t::ParseInfo( EbmlElement *info )
 {
     EbmlElement *el;
     EbmlMaster  *m;
-    unsigned int i;
+    size_t i, j;
     int i_upper_level = 0;
 
     msg_Dbg( &sys.demuxer, "|   + Information" );
@@ -3010,6 +3020,34 @@ void matroska_segment_t::ParseInfo( EbmlElement *info )
                 msg_Dbg( &sys.demuxer, "|   |   + Date=%s", psz_date_utc );
             }
         }
+#endif
+#if LIBMATROSKA_VERSION >= 0x000704
+        else if( MKV_IS_ID( l, KaxChapterTranslate ) )
+        {
+            KaxChapterTranslate *p_trans = static_cast<KaxChapterTranslate*>( l );
+            chapter_translation_t translated;
+
+            p_trans->Read( es, p_trans->Generic().Context, i_upper_level, el, true );
+            for( j = 0; j < p_trans->ListSize(); j++ )
+            {
+                EbmlElement *l = (*p_trans)[j];
+
+                if( MKV_IS_ID( l, KaxChapterTranslateEditionUID ) )
+                {
+                    translated.editions.push_back( uint64( *static_cast<KaxChapterTranslateEditionUID*>( l ) ) );
+                }
+                else if( MKV_IS_ID( l, KaxChapterTranslateCodec ) )
+                {
+                    translated.codec_id = uint32( *static_cast<KaxChapterTranslateCodec*>( l ) );
+                }
+                else if( MKV_IS_ID( l, KaxChapterTranslateID ) )
+                {
+                    translated.translated = *( new KaxChapterTranslateID( *static_cast<KaxChapterTranslateID*>( l ) ) );
+                }
+            }
+
+            translations.push_back( translated );
+        }
 #endif
         else
         {