]> git.sesse.net Git - vlc/blobdiff - modules/demux/mkv/Ebml_parser.cpp
Fix many ES_OUT_RESET_PCR problems
[vlc] / modules / demux / mkv / Ebml_parser.cpp
index 355f9e5e91bfa0b855d692608370db1a7d09138b..8abe76c138cbcb9b0cc664b5d6ed7aae2cf2090c 100644 (file)
@@ -47,7 +47,14 @@ EbmlParser::EbmlParser( EbmlStream *es, EbmlElement *el_start, demux_t *p_demux
 
 EbmlParser::~EbmlParser( void )
 {
-    for( int i = 1; i < mi_level; i++ )
+    if( !mi_level )
+    {
+        assert( !mb_keep );
+        delete m_el[1];
+        return;
+    }
+
+    for( int i = 1; i <= mi_level; i++ )
     {
         if( !mb_keep )
         {
@@ -145,7 +152,7 @@ EbmlElement *EbmlParser::Get( void )
 
     if( m_el[mi_level] )
     {
-        m_el[mi_level]->SkipData( *m_es, m_el[mi_level]->Generic().Context );
+        m_el[mi_level]->SkipData( *m_es, EBML_CONTEXT(m_el[mi_level]) );
         if( !mb_keep )
         {
             if( MKV_IS_ID( m_el[mi_level], KaxBlockVirtual ) )
@@ -155,7 +162,7 @@ EbmlElement *EbmlParser::Get( void )
         mb_keep = false;
     }
 
-    m_el[mi_level] = m_es->FindNextElement( m_el[mi_level - 1]->Generic().Context, i_ulev, 0xFFFFFFFFL, mb_dummy != 0, 1 );
+    m_el[mi_level] = m_es->FindNextElement( EBML_CONTEXT(m_el[mi_level - 1]), i_ulev, 0xFFFFFFFFL, mb_dummy != 0, 1 );
 //    mi_remain_size[mi_level] = m_el[mi_level]->GetSize();
     if( i_ulev > 0 )
     {