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();
- tracks.push_back( tk );
/* Init the track */
memset( tk, 0, sizeof( mkv_track_t ) );
{
EbmlMaster *cencs = static_cast<EbmlMaster*>(l);
MkvTree( sys.demuxer, 3, "Content Encodings" );
+ if ( cencs->ListSize() > 1 )
+ {
+ msg_Err( &sys.demuxer, "Multiple Compression method not supported" );
+ bSupported = false;
+ }
for( j = 0; j < cencs->ListSize(); j++ )
{
EbmlElement *l2 = (*cencs)[j];
KaxContentCompAlgo &compalg = *(KaxContentCompAlgo*)l4;
MkvTree( sys.demuxer, 6, "Compression Algorithm: %i", uint32(compalg) );
tk->i_compression_type = uint32( compalg );
+ if ( ( tk->i_compression_type != MATROSKA_COMPRESSION_ZLIB ) &&
+ ( tk->i_compression_type != MATROSKA_COMPRESSION_HEADER ) )
+ {
+ msg_Err( &sys.demuxer, "Track Compression method %d not supported", tk->i_compression_type );
+ bSupported = false;
+ }
}
else if( MKV_IS_ID( l4, KaxContentCompSettings ) )
{
typeid(*l).name() );
}
}
+
+ if ( bSupported )
+ {
+ tracks.push_back( tk );
+ }
+ else
+ {
+ msg_Err( &sys.demuxer, "Track Entry %d not supported", tk->i_number );
+ delete tk;
+ }
}
/*****************************************************************************
else if( MKV_IS_ID( el, KaxTracks ) )
{
ParseTracks( static_cast<KaxTracks*>( el ) );
+ if ( tracks.size() == 0 )
+ {
+ msg_Err( &sys.demuxer, "No tracks supported" );
+ return false;
+ }
}
else if( MKV_IS_ID( el, KaxSeekHead ) )
{