>From 8c9180f2380878bad37edd6477a1cfafbb162a70 Mon Sep 17 00:00:00 2001 From: Daniel Mierswa Date: Thu, 3 Feb 2011 04:31:23 +0100 Subject: [PATCH 1/2] backport libebml macros patch based on vlc.git b985df9294dc563ba9da13795b3fb1a728db7073 --- modules/demux/mkv/Ebml_parser.cpp | 6 ++-- modules/demux/mkv/demux.cpp | 10 +++--- modules/demux/mkv/matroska_segment_parse.cpp | 42 +++++++++++++------------- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/modules/demux/mkv/Ebml_parser.cpp b/modules/demux/mkv/Ebml_parser.cpp index aeec50d..97dbdc3 100644 --- a/modules/demux/mkv/Ebml_parser.cpp +++ b/modules/demux/mkv/Ebml_parser.cpp @@ -144,7 +144,7 @@ class KaxBlockVirtualWorkaround : public KaxBlockVirtual public: void Fix() { - if( Data == DataBlock ) + if( GetBuffer() == DataBlock ) SetBuffer( NULL, 0 ); } }; @@ -167,7 +167,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 ) ) @@ -177,7 +177,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 ) { diff --git a/modules/demux/mkv/demux.cpp b/modules/demux/mkv/demux.cpp index accea1b..d549c76 100644 --- a/modules/demux/mkv/demux.cpp +++ b/modules/demux/mkv/demux.cpp @@ -56,7 +56,7 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS bool b_keep_stream = false, b_keep_segment; // verify the EBML Header - p_l0 = p_estream->FindNextID(EbmlHead::ClassInfos, 0xFFFFFFFFL); + p_l0 = p_estream->FindNextID(EBML_INFO(EbmlHead), 0xFFFFFFFFL); if (p_l0 == NULL) { msg_Err( p_demux, "No EBML header found" ); @@ -64,7 +64,7 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS } // verify we can read this Segment, we only support Matroska version 1 for now - p_l0->Read(*p_estream, EbmlHead::ClassInfos.Context, i_upper_lvl, p_l0, true); + p_l0->Read(*p_estream, EBML_CLASS_CONTEXT(EbmlHead), i_upper_lvl, p_l0, true); EDocType doc_type = GetChild(*static_cast(p_l0)); if (std::string(doc_type) != "matroska" && std::string(doc_type) != "webm" ) @@ -84,7 +84,7 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS // find all segments in this file - p_l0 = p_estream->FindNextID(KaxSegment::ClassInfos, 0xFFFFFFFFFLL); + p_l0 = p_estream->FindNextID(EBML_INFO(KaxSegment), 0xFFFFFFFFFLL); if (p_l0 == NULL) { return NULL; @@ -111,7 +111,7 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS // find the families of this segment KaxInfo *p_info = static_cast(p_l1); - p_info->Read(*p_estream, KaxInfo::ClassInfos.Context, i_upper_lvl, p_l2, true); + p_info->Read(*p_estream, EBML_CLASS_CONTEXT(KaxInfo), i_upper_lvl, p_l2, true); for( i = 0; i < p_info->ListSize(); i++ ) { EbmlElement *l = (*p_info)[i]; @@ -157,7 +157,7 @@ matroska_stream_c *demux_sys_t::AnalyseAllSegmentsFound( demux_t *p_demux, EbmlS if (p_l0->IsFiniteSize() ) { p_l0->SkipData(*p_estream, KaxMatroska_Context); - p_l0 = p_estream->FindNextID(KaxSegment::ClassInfos, 0xFFFFFFFFL); + p_l0 = p_estream->FindNextID(EBML_INFO(KaxSegment), 0xFFFFFFFFL); } else { diff --git a/modules/demux/mkv/matroska_segment_parse.cpp b/modules/demux/mkv/matroska_segment_parse.cpp index 27bbc0e..3bcf259 100644 --- a/modules/demux/mkv/matroska_segment_parse.cpp +++ b/modules/demux/mkv/matroska_segment_parse.cpp @@ -57,7 +57,7 @@ void matroska_segment_c::ParseSeekHead( KaxSeekHead *seekhead ) { if( MKV_IS_ID( l, KaxSeek ) ) { - EbmlId id = EbmlVoid::ClassInfos.GlobalId; + EbmlId id = EBML_ID(EbmlVoid); int64_t i_pos = -1; msg_Dbg( &sys.demuxer, "| | + Seek" ); @@ -86,40 +86,40 @@ void matroska_segment_c::ParseSeekHead( KaxSeekHead *seekhead ) if( i_pos >= 0 ) { - if( id == KaxCues::ClassInfos.GlobalId ) + if( id == EBML_ID(KaxCues) ) { msg_Dbg( &sys.demuxer, "| - cues at %"PRId64, i_pos ); - LoadSeekHeadItem( KaxCues::ClassInfos, i_pos ); + LoadSeekHeadItem( EBML_INFO(KaxCues), i_pos ); } - else if( id == KaxInfo::ClassInfos.GlobalId ) + else if( id == EBML_ID(KaxInfo) ) { msg_Dbg( &sys.demuxer, "| - info at %"PRId64, i_pos ); - LoadSeekHeadItem( KaxInfo::ClassInfos, i_pos ); + LoadSeekHeadItem( EBML_INFO(KaxInfo), i_pos ); } - else if( id == KaxChapters::ClassInfos.GlobalId ) + else if( id == EBML_ID(KaxChapters) ) { msg_Dbg( &sys.demuxer, "| - chapters at %"PRId64, i_pos ); - LoadSeekHeadItem( KaxChapters::ClassInfos, i_pos ); + LoadSeekHeadItem( EBML_INFO(KaxChapters), i_pos ); } - else if( id == KaxTags::ClassInfos.GlobalId ) + else if( id == EBML_ID(KaxTags) ) { msg_Dbg( &sys.demuxer, "| - tags at %"PRId64, i_pos ); - LoadSeekHeadItem( KaxTags::ClassInfos, i_pos ); + LoadSeekHeadItem( EBML_INFO(KaxTags), i_pos ); } - else if( id == KaxSeekHead::ClassInfos.GlobalId ) + else if( id == EBML_ID(KaxSeekHead) ) { msg_Dbg( &sys.demuxer, "| - chained seekhead at %"PRId64, i_pos ); - LoadSeekHeadItem( KaxSeekHead::ClassInfos, i_pos ); + LoadSeekHeadItem( EBML_INFO(KaxSeekHead), i_pos ); } - else if( id == KaxTracks::ClassInfos.GlobalId ) + else if( id == EBML_ID(KaxTracks) ) { msg_Dbg( &sys.demuxer, "| - tracks at %"PRId64, i_pos ); - LoadSeekHeadItem( KaxTracks::ClassInfos, i_pos ); + LoadSeekHeadItem( EBML_INFO(KaxTracks), i_pos ); } - else if( id == KaxAttachments::ClassInfos.GlobalId ) + else if( id == EBML_ID(KaxAttachments) ) { msg_Dbg( &sys.demuxer, "| - attachments at %"PRId64, i_pos ); - LoadSeekHeadItem( KaxAttachments::ClassInfos, i_pos ); + LoadSeekHeadItem( EBML_INFO(KaxAttachments), i_pos ); } else msg_Dbg( &sys.demuxer, "| - unknown seekhead reference at %"PRId64, i_pos ); @@ -654,7 +654,7 @@ void matroska_segment_c::ParseTracks( KaxTracks *tracks ) int i_upper_level = 0; /* Master elements */ - tracks->Read( es, tracks->Generic().Context, i_upper_level, el, true ); + tracks->Read( es, EBML_CONTEXT(tracks), i_upper_level, el, true ); for( i = 0; i < tracks->ListSize(); i++ ) { @@ -683,7 +683,7 @@ void matroska_segment_c::ParseInfo( KaxInfo *info ) /* Master elements */ m = static_cast(info); - m->Read( es, info->Generic().Context, i_upper_level, el, true ); + m->Read( es, EBML_CONTEXT(info), i_upper_level, el, true ); for( i = 0; i < m->ListSize(); i++ ) { @@ -792,7 +792,7 @@ void matroska_segment_c::ParseInfo( KaxInfo *info ) KaxChapterTranslate *p_trans = static_cast( l ); chapter_translation_c *p_translate = new chapter_translation_c(); - p_trans->Read( es, p_trans->Generic().Context, i_upper_level, el, true ); + p_trans->Read( es, EBML_CONTEXT(p_trans), i_upper_level, el, true ); for( j = 0; j < p_trans->ListSize(); j++ ) { EbmlElement *l = (*p_trans)[j]; @@ -961,7 +961,7 @@ void matroska_segment_c::ParseAttachments( KaxAttachments *attachments ) EbmlElement *el; int i_upper_level = 0; - attachments->Read( es, attachments->Generic().Context, i_upper_level, el, true ); + attachments->Read( es, EBML_CONTEXT(attachments), i_upper_level, el, true ); KaxAttached *attachedFile = FindChild( *attachments ); @@ -1006,7 +1006,7 @@ void matroska_segment_c::ParseChapters( KaxChapters *chapters ) mtime_t i_dur; /* Master elements */ - chapters->Read( es, chapters->Generic().Context, i_upper_level, el, true ); + chapters->Read( es, EBML_CONTEXT(chapters), i_upper_level, el, true ); for( i = 0; i < chapters->ListSize(); i++ ) { @@ -1078,7 +1078,7 @@ void matroska_segment_c::ParseCluster( ) /* Master elements */ m = static_cast( cluster ); - m->Read( es, cluster->Generic().Context, i_upper_level, el, true ); + m->Read( es, EBML_CONTEXT(cluster), i_upper_level, el, true ); for( i = 0; i < m->ListSize(); i++ ) { -- 1.7.3.5