/*****************************************************************************
* mkv.cpp : matroska demuxer
*****************************************************************************
- * Copyright (C) 2003-2004 the VideoLAN team
+ * Copyright (C) 2003-2010 the VideoLAN team
* $Id$
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
EbmlId id = EbmlVoid::ClassInfos.GlobalId;
int64_t i_pos = -1;
+#ifdef MKV_DEBUG
msg_Dbg( &sys.demuxer, "| | + Seek" );
+#endif
ep->Down();
while( ( l = ep->Get() ) != NULL )
{
msg_Dbg( &sys.demuxer, "| - attachments at %"PRId64, i_pos );
LoadSeekHeadItem( KaxAttachments::ClassInfos, i_pos );
}
+#ifdef MKV_DEBUG
else
msg_Dbg( &sys.demuxer, "| - unknown seekhead reference at %"PRId64, i_pos );
+#endif
}
}
else
va_list args;
if( i_level > 9 )
{
- msg_Err( &demuxer, "too deep tree" );
+ msg_Err( &demuxer, "MKV tree is too deep" );
return;
}
va_start( args, psz_format );
*****************************************************************************/
void matroska_segment_c::ParseTrackEntry( KaxTrackEntry *m )
{
- size_t i, j, k, n;
bool bSupported = true;
- mkv_track_t *tk;
-
- msg_Dbg( &sys.demuxer, "| | + Track Entry" );
-
- tk = new mkv_track_t();
-
/* Init the track */
+ mkv_track_t *tk = new mkv_track_t();
memset( tk, 0, sizeof( mkv_track_t ) );
es_format_Init( &tk->fmt, UNKNOWN_ES, 0 );
- tk->fmt.psz_language = strdup("English");
- tk->fmt.psz_description = NULL;
-
- tk->b_default = true;
- tk->b_enabled = true;
- tk->b_silent = false;
- tk->i_number = tracks.size() - 1;
- tk->i_extra_data = 0;
- tk->p_extra_data = NULL;
- tk->psz_codec = NULL;
- tk->b_dts_only = false;
- tk->i_default_duration = 0;
- tk->f_timecodescale = 1.0;
-
- tk->b_inited = false;
- tk->i_data_init = 0;
- tk->p_data_init = NULL;
-
- tk->psz_codec_name = NULL;
- tk->psz_codec_settings = NULL;
- tk->psz_codec_info_url = NULL;
+ tk->fmt.psz_language = strdup("English");
+ tk->fmt.psz_description = NULL;
+
+ tk->b_default = true;
+ tk->b_enabled = true;
+ tk->b_silent = false;
+ tk->i_number = tracks.size() - 1;
+ tk->i_extra_data = 0;
+ tk->p_extra_data = NULL;
+ tk->psz_codec = NULL;
+ tk->b_dts_only = false;
+ tk->i_default_duration = 0;
+ tk->f_timecodescale = 1.0;
+
+ tk->b_inited = false;
+ tk->i_data_init = 0;
+ tk->p_data_init = NULL;
+
+ tk->psz_codec_name = NULL;
+ tk->psz_codec_settings = NULL;
+ tk->psz_codec_info_url = NULL;
tk->psz_codec_download_url = NULL;
-
- tk->i_compression_type = MATROSKA_COMPRESSION_NONE;
- tk->p_compression_data = NULL;
- for( i = 0; i < m->ListSize(); i++ )
+ tk->i_compression_type = MATROSKA_COMPRESSION_NONE;
+ tk->p_compression_data = NULL;
+
+ msg_Dbg( &sys.demuxer, "| | + Track Entry" );
+
+ for( size_t i = 0; i < m->ListSize(); i++ )
{
EbmlElement *l = (*m)[i];
msg_Err( &sys.demuxer, "Multiple Compression method not supported" );
bSupported = false;
}
- for( j = 0; j < cencs->ListSize(); j++ )
+ for( size_t j = 0; j < cencs->ListSize(); j++ )
{
EbmlElement *l2 = (*cencs)[j];
if( MKV_IS_ID( l2, KaxContentEncoding ) )
{
MkvTree( sys.demuxer, 4, "Content Encoding" );
EbmlMaster *cenc = static_cast<EbmlMaster*>(l2);
- for( k = 0; k < cenc->ListSize(); k++ )
+ for( size_t k = 0; k < cenc->ListSize(); k++ )
{
EbmlElement *l3 = (*cenc)[k];
if( MKV_IS_ID( l3, KaxContentEncodingOrder ) )
{
EbmlMaster *compr = static_cast<EbmlMaster*>(l3);
MkvTree( sys.demuxer, 5, "Content Compression" );
- for( n = 0; n < compr->ListSize(); n++ )
+ //Default compression type is 0 (Zlib)
+ tk->i_compression_type = MATROSKA_COMPRESSION_ZLIB;
+ for( size_t n = 0; n < compr->ListSize(); n++ )
{
EbmlElement *l4 = (*compr)[n];
if( MKV_IS_ID( l4, KaxContentCompAlgo ) )
else if( MKV_IS_ID( l, KaxTrackVideo ) )
{
EbmlMaster *tkv = static_cast<EbmlMaster*>(l);
- unsigned int j;
unsigned int i_crop_right = 0, i_crop_left = 0, i_crop_top = 0, i_crop_bottom = 0;
unsigned int i_display_unit = 0, i_display_width = 0, i_display_height = 0;
tk->fmt.video.i_frame_rate_base = (unsigned int)(tk->i_default_duration / 1000);
tk->fmt.video.i_frame_rate = 1000000;
-
- for( j = 0; j < tkv->ListSize(); j++ )
+
+ for( unsigned int j = 0; j < tkv->ListSize(); j++ )
{
EbmlElement *l = (*tkv)[j];
if( MKV_IS_ID( l, KaxVideoFlagInterlaced ) ) // UNUSED
}
if( i_crop_left || i_crop_right || i_crop_top || i_crop_bottom )
{
- tk->fmt.video.i_visible_width = tk->fmt.video.i_width;
- tk->fmt.video.i_visible_height = tk->fmt.video.i_height;
- tk->fmt.video.i_x_offset = i_crop_left;
- tk->fmt.video.i_y_offset = i_crop_top;
- tk->fmt.video.i_visible_width -= i_crop_left + i_crop_right;
+ tk->fmt.video.i_visible_width = tk->fmt.video.i_width;
+ tk->fmt.video.i_visible_height = tk->fmt.video.i_height;
+ tk->fmt.video.i_x_offset = i_crop_left;
+ tk->fmt.video.i_y_offset = i_crop_top;
+ tk->fmt.video.i_visible_width -= i_crop_left + i_crop_right;
tk->fmt.video.i_visible_height -= i_crop_top + i_crop_bottom;
}
/* FIXME: i_display_* allows you to not only set DAR, but also a zoom factor.
else if( MKV_IS_ID( l, KaxTrackAudio ) )
{
EbmlMaster *tka = static_cast<EbmlMaster*>(l);
- unsigned int j;
msg_Dbg( &sys.demuxer, "| | | + Track Audio" );
- for( j = 0; j < tka->ListSize(); j++ )
+ for( unsigned int j = 0; j < tka->ListSize(); j++ )
{
EbmlElement *l = (*tka)[j];
void matroska_segment_c::ParseTracks( KaxTracks *tracks )
{
EbmlElement *el;
- unsigned int i;
int i_upper_level = 0;
/* Master elements */
tracks->Read( es, tracks->Generic().Context, i_upper_level, el, true );
- for( i = 0; i < tracks->ListSize(); i++ )
+ for( size_t i = 0; i < tracks->ListSize(); i++ )
{
EbmlElement *l = (*tracks)[i];
{
EbmlElement *el;
EbmlMaster *m;
- size_t i, j;
int i_upper_level = 0;
/* Master elements */
m = static_cast<EbmlMaster *>(info);
m->Read( es, info->Generic().Context, i_upper_level, el, true );
- for( i = 0; i < m->ListSize(); i++ )
+ for( size_t i = 0; i < m->ListSize(); i++ )
{
EbmlElement *l = (*m)[i];
chapter_translation_c *p_translate = new chapter_translation_c();
p_trans->Read( es, p_trans->Generic().Context, i_upper_level, el, true );
- for( j = 0; j < p_trans->ListSize(); j++ )
+ for( size_t j = 0; j < p_trans->ListSize(); j++ )
{
EbmlElement *l = (*p_trans)[j];
*****************************************************************************/
void matroska_segment_c::ParseChapterAtom( int i_level, KaxChapterAtom *ca, chapter_item_c & chapters )
{
- size_t i, j;
-
msg_Dbg( &sys.demuxer, "| | | + ChapterAtom (level=%d)", i_level );
- for( i = 0; i < ca->ListSize(); i++ )
+ for( size_t i = 0; i < ca->ListSize(); i++ )
{
EbmlElement *l = (*ca)[i];
if( MKV_IS_ID( l, KaxChapterUID ) )
{
chapters.i_uid = uint64_t(*(KaxChapterUID*)l);
- msg_Dbg( &sys.demuxer, "| | | | + ChapterUID: %"PRId64"", chapters.i_uid );
+ msg_Dbg( &sys.demuxer, "| | | | + ChapterUID: %"PRIu64"", chapters.i_uid );
}
else if( MKV_IS_ID( l, KaxChapterFlagHidden ) )
{
EbmlMaster *cd = static_cast<EbmlMaster *>(l);
msg_Dbg( &sys.demuxer, "| | | | + ChapterDisplay" );
- for( j = 0; j < cd->ListSize(); j++ )
+ for( size_t j = 0; j < cd->ListSize(); j++ )
{
EbmlElement *l= (*cd)[j];
if( MKV_IS_ID( l, KaxChapterString ) )
{
- int k;
-
KaxChapterString &name =*(KaxChapterString*)l;
- for (k = 0; k < i_level; k++)
+ for ( int k = 0; k < i_level; k++)
chapters.psz_name += '+';
chapters.psz_name += ' ';
char *psz_tmp_utf8 = ToUTF8( UTFstring( name ) );
KaxChapterProcess *cp = static_cast<KaxChapterProcess *>(l);
chapter_codec_cmds_c *p_ccodec = NULL;
- for( j = 0; j < cp->ListSize(); j++ )
+ for( size_t j = 0; j < cp->ListSize(); j++ )
{
EbmlElement *k= (*cp)[j];
if ( p_ccodec != NULL )
{
- for( j = 0; j < cp->ListSize(); j++ )
+ for( size_t j = 0; j < cp->ListSize(); j++ )
{
EbmlElement *k= (*cp)[j];
void matroska_segment_c::ParseChapters( KaxChapters *chapters )
{
EbmlElement *el;
- size_t i;
int i_upper_level = 0;
mtime_t i_dur;
/* Master elements */
chapters->Read( es, chapters->Generic().Context, i_upper_level, el, true );
- for( i = 0; i < chapters->ListSize(); i++ )
+ for( size_t i = 0; i < chapters->ListSize(); i++ )
{
EbmlElement *l = (*chapters)[i];
if( MKV_IS_ID( l, KaxEditionEntry ) )
{
chapter_edition_c *p_edition = new chapter_edition_c();
-
+
EbmlMaster *E = static_cast<EbmlMaster *>(l );
msg_Dbg( &sys.demuxer, "| | + EditionEntry" );
for( size_t j = 0; j < E->ListSize(); j++ )
}
else if( MKV_IS_ID( l, KaxEditionFlagOrdered ) )
{
- p_edition->b_ordered = var_InheritInteger( &sys.demuxer, "mkv-use-ordered-chapters" ) ? (uint8(*static_cast<KaxEditionFlagOrdered *>( l )) != 0) : 0;
+ p_edition->b_ordered = var_InheritBool( &sys.demuxer, "mkv-use-ordered-chapters" ) ? (uint8(*static_cast<KaxEditionFlagOrdered *>( l )) != 0) : 0;
}
else if( MKV_IS_ID( l, KaxEditionFlagDefault ) )
{
}
}
- for( i = 0; i < stored_editions.size(); i++ )
+ for( size_t i = 0; i < stored_editions.size(); i++ )
{
stored_editions[i]->RefreshChapters( );
}
-
+
if ( stored_editions.size() != 0 && stored_editions[i_default_edition]->b_ordered )
{
/* update the duration of the segment according to the sum of all sub chapters */
{
EbmlElement *el;
EbmlMaster *m;
- unsigned int i;
int i_upper_level = 0;
/* Master elements */
m = static_cast<EbmlMaster *>( cluster );
m->Read( es, cluster->Generic().Context, i_upper_level, el, true );
- for( i = 0; i < m->ListSize(); i++ )
+ for( unsigned int i = 0; i < m->ListSize(); i++ )
{
EbmlElement *l = (*m)[i];
i_start_time = cluster->GlobalTimecode() / 1000;
}
-