+ if( n_call < 10 && !b_bad_position && m_el[mi_level]->IsFiniteSize() &&
+ ( !m_el[mi_level-1]->IsFiniteSize() ||
+ m_el[mi_level]->GetEndPosition() <= m_el[mi_level-1]->GetEndPosition() ) )
+ {
+ /* The element fits inside its upper element */
+ msg_Warn( p_demux, "Dummy element found %"PRIu64"... skipping it",
+ m_el[mi_level]->GetElementPosition() );
+ return Get( ++n_call );
+ }
+ else
+ {
+ /* Too large, misplaced or 10 successive dummy elements */
+ msg_Err( p_demux,
+ "Dummy element too large or misplaced at %"PRIu64"... skipping to next upper element",
+ m_el[mi_level]->GetElementPosition() );
+
+ if( mi_level >= 1 &&
+ m_el[mi_level]->GetElementPosition() >= m_el[mi_level-1]->GetEndPosition() )
+ {
+ msg_Err(p_demux, "This element is outside its known parent... upping level");
+ delete m_el[mi_level - 1];
+ m_got = m_el[mi_level -1] = m_el[mi_level];
+ m_el[mi_level] = NULL;
+
+ mi_level--;
+ return NULL;
+ }
+
+ delete m_el[mi_level];
+ m_el[mi_level] = NULL;
+ m_el[mi_level - 1]->SkipData( *m_es, EBML_CONTEXT(m_el[mi_level - 1]) );
+ return Get();
+ }
+ }
+
+ if( p_prev )
+ {
+ if( !mb_keep )
+ {
+ if( MKV_IS_ID( p_prev, KaxBlockVirtual ) )
+ static_cast<KaxBlockVirtualWorkaround*>(p_prev)->Fix();
+ delete p_prev;
+ }
+ mb_keep = false;
+ }