ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
GetId3\Module\AudioVideo\Matroska Class Reference

GetId3() by James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g //. More...

+ Inheritance diagram for GetId3\Module\AudioVideo\Matroska:
+ Collaboration diagram for GetId3\Module\AudioVideo\Matroska:

Public Member Functions

 analyze ()
 
- Public Member Functions inherited from GetId3\Handler\BaseHandler
 __construct (GetId3Core $getid3, $call_module=null)
 
 analyze ()
 Analyze from file pointer. More...
 
 AnalyzeString (&$string)
 Analyze from string instead. More...
 
 saveAttachment (&$ThisFileInfoIndex, $filename, $offset, $length)
 

Static Public Member Functions

static MatroskaTargetTypeValue ($target_type)
 @staticvar array $MatroskaTargetTypeValue More...
 
static MatroskaBlockLacingType ($lacingtype)
 @staticvar array $MatroskaBlockLacingType More...
 
static MatroskaCodecIDtoCommonName ($codecid)
 @staticvar array $MatroskaCodecIDlist More...
 

Data Fields

const EBML_ID_CHAPTERS = 0x0043A770
 
const EBML_ID_SEEKHEAD = 0x014D9B74
 
const EBML_ID_TAGS = 0x0254C367
 
const EBML_ID_INFO = 0x0549A966
 
const EBML_ID_TRACKS = 0x0654AE6B
 
const EBML_ID_SEGMENT = 0x08538067
 
const EBML_ID_ATTACHMENTS = 0x0941A469
 
const EBML_ID_EBML = 0x0A45DFA3
 
const EBML_ID_CUES = 0x0C53BB6B
 
const EBML_ID_CLUSTER = 0x0F43B675
 
const EBML_ID_LANGUAGE = 0x02B59C
 
const EBML_ID_TRACKTIMECODESCALE = 0x03314F
 
const EBML_ID_DEFAULTDURATION = 0x03E383
 
const EBML_ID_CODECNAME = 0x058688
 
const EBML_ID_CODECDOWNLOADURL = 0x06B240
 
const EBML_ID_TIMECODESCALE = 0x0AD7B1
 
const EBML_ID_COLOURSPACE = 0x0EB524
 
const EBML_ID_GAMMAVALUE = 0x0FB523
 
const EBML_ID_CODECSETTINGS = 0x1A9697
 
const EBML_ID_CODECINFOURL = 0x1B4040
 
const EBML_ID_PREVFILENAME = 0x1C83AB
 
const EBML_ID_PREVUID = 0x1CB923
 
const EBML_ID_NEXTFILENAME = 0x1E83BB
 
const EBML_ID_NEXTUID = 0x1EB923
 
const EBML_ID_CONTENTCOMPALGO = 0x0254
 
const EBML_ID_CONTENTCOMPSETTINGS = 0x0255
 
const EBML_ID_DOCTYPE = 0x0282
 
const EBML_ID_DOCTYPEREADVERSION = 0x0285
 
const EBML_ID_EBMLVERSION = 0x0286
 
const EBML_ID_DOCTYPEVERSION = 0x0287
 
const EBML_ID_EBMLMAXIDLENGTH = 0x02F2
 
const EBML_ID_EBMLMAXSIZELENGTH = 0x02F3
 
const EBML_ID_EBMLREADVERSION = 0x02F7
 
const EBML_ID_CHAPLANGUAGE = 0x037C
 
const EBML_ID_CHAPCOUNTRY = 0x037E
 
const EBML_ID_SEGMENTFAMILY = 0x0444
 
const EBML_ID_DATEUTC = 0x0461
 
const EBML_ID_TAGLANGUAGE = 0x047A
 
const EBML_ID_TAGDEFAULT = 0x0484
 
const EBML_ID_TAGBINARY = 0x0485
 
const EBML_ID_TAGSTRING = 0x0487
 
const EBML_ID_DURATION = 0x0489
 
const EBML_ID_CHAPPROCESSPRIVATE = 0x050D
 
const EBML_ID_CHAPTERFLAGENABLED = 0x0598
 
const EBML_ID_TAGNAME = 0x05A3
 
const EBML_ID_EDITIONENTRY = 0x05B9
 
const EBML_ID_EDITIONUID = 0x05BC
 
const EBML_ID_EDITIONFLAGHIDDEN = 0x05BD
 
const EBML_ID_EDITIONFLAGDEFAULT = 0x05DB
 
const EBML_ID_EDITIONFLAGORDERED = 0x05DD
 
const EBML_ID_FILEDATA = 0x065C
 
const EBML_ID_FILEMIMETYPE = 0x0660
 
const EBML_ID_FILENAME = 0x066E
 
const EBML_ID_FILEREFERRAL = 0x0675
 
const EBML_ID_FILEDESCRIPTION = 0x067E
 
const EBML_ID_FILEUID = 0x06AE
 
const EBML_ID_CONTENTENCALGO = 0x07E1
 
const EBML_ID_CONTENTENCKEYID = 0x07E2
 
const EBML_ID_CONTENTSIGNATURE = 0x07E3
 
const EBML_ID_CONTENTSIGKEYID = 0x07E4
 
const EBML_ID_CONTENTSIGALGO = 0x07E5
 
const EBML_ID_CONTENTSIGHASHALGO = 0x07E6
 
const EBML_ID_MUXINGAPP = 0x0D80
 
const EBML_ID_SEEK = 0x0DBB
 
const EBML_ID_CONTENTENCODINGORDER = 0x1031
 
const EBML_ID_CONTENTENCODINGSCOPE = 0x1032
 
const EBML_ID_CONTENTENCODINGTYPE = 0x1033
 
const EBML_ID_CONTENTCOMPRESSION = 0x1034
 
const EBML_ID_CONTENTENCRYPTION = 0x1035
 
const EBML_ID_CUEREFNUMBER = 0x135F
 
const EBML_ID_NAME = 0x136E
 
const EBML_ID_CUEBLOCKNUMBER = 0x1378
 
const EBML_ID_TRACKOFFSET = 0x137F
 
const EBML_ID_SEEKID = 0x13AB
 
const EBML_ID_SEEKPOSITION = 0x13AC
 
const EBML_ID_STEREOMODE = 0x13B8
 
const EBML_ID_PIXELCROPBOTTOM = 0x14AA
 
const EBML_ID_DISPLAYWIDTH = 0x14B0
 
const EBML_ID_DISPLAYUNIT = 0x14B2
 
const EBML_ID_ASPECTRATIOTYPE = 0x14B3
 
const EBML_ID_DISPLAYHEIGHT = 0x14BA
 
const EBML_ID_PIXELCROPTOP = 0x14BB
 
const EBML_ID_PIXELCROPLEFT = 0x14CC
 
const EBML_ID_PIXELCROPRIGHT = 0x14DD
 
const EBML_ID_FLAGFORCED = 0x15AA
 
const EBML_ID_MAXBLOCKADDITIONID = 0x15EE
 
const EBML_ID_WRITINGAPP = 0x1741
 
const EBML_ID_CLUSTERSILENTTRACKS = 0x1854
 
const EBML_ID_CLUSTERSILENTTRACKNUMBER = 0x18D7
 
const EBML_ID_ATTACHEDFILE = 0x21A7
 
const EBML_ID_CONTENTENCODING = 0x2240
 
const EBML_ID_BITDEPTH = 0x2264
 
const EBML_ID_CODECPRIVATE = 0x23A2
 
const EBML_ID_TARGETS = 0x23C0
 
const EBML_ID_CHAPTERPHYSICALEQUIV = 0x23C3
 
const EBML_ID_TAGCHAPTERUID = 0x23C4
 
const EBML_ID_TAGTRACKUID = 0x23C5
 
const EBML_ID_TAGATTACHMENTUID = 0x23C6
 
const EBML_ID_TAGEDITIONUID = 0x23C9
 
const EBML_ID_TARGETTYPE = 0x23CA
 
const EBML_ID_TRACKTRANSLATE = 0x2624
 
const EBML_ID_TRACKTRANSLATETRACKID = 0x26A5
 
const EBML_ID_TRACKTRANSLATECODEC = 0x26BF
 
const EBML_ID_TRACKTRANSLATEEDITIONUID = 0x26FC
 
const EBML_ID_SIMPLETAG = 0x27C8
 
const EBML_ID_TARGETTYPEVALUE = 0x28CA
 
const EBML_ID_CHAPPROCESSCOMMAND = 0x2911
 
const EBML_ID_CHAPPROCESSTIME = 0x2922
 
const EBML_ID_CHAPTERTRANSLATE = 0x2924
 
const EBML_ID_CHAPPROCESSDATA = 0x2933
 
const EBML_ID_CHAPPROCESS = 0x2944
 
const EBML_ID_CHAPPROCESSCODECID = 0x2955
 
const EBML_ID_CHAPTERTRANSLATEID = 0x29A5
 
const EBML_ID_CHAPTERTRANSLATECODEC = 0x29BF
 
const EBML_ID_CHAPTERTRANSLATEEDITIONUID = 0x29FC
 
const EBML_ID_CONTENTENCODINGS = 0x2D80
 
const EBML_ID_MINCACHE = 0x2DE7
 
const EBML_ID_MAXCACHE = 0x2DF8
 
const EBML_ID_CHAPTERSEGMENTUID = 0x2E67
 
const EBML_ID_CHAPTERSEGMENTEDITIONUID = 0x2EBC
 
const EBML_ID_TRACKOVERLAY = 0x2FAB
 
const EBML_ID_TAG = 0x3373
 
const EBML_ID_SEGMENTFILENAME = 0x3384
 
const EBML_ID_SEGMENTUID = 0x33A4
 
const EBML_ID_CHAPTERUID = 0x33C4
 
const EBML_ID_TRACKUID = 0x33C5
 
const EBML_ID_ATTACHMENTLINK = 0x3446
 
const EBML_ID_CLUSTERBLOCKADDITIONS = 0x35A1
 
const EBML_ID_CHANNELPOSITIONS = 0x347B
 
const EBML_ID_OUTPUTSAMPLINGFREQUENCY = 0x38B5
 
const EBML_ID_TITLE = 0x3BA9
 
const EBML_ID_CHAPTERDISPLAY = 0x00
 
const EBML_ID_TRACKTYPE = 0x03
 
const EBML_ID_CHAPSTRING = 0x05
 
const EBML_ID_CODECID = 0x06
 
const EBML_ID_FLAGDEFAULT = 0x08
 
const EBML_ID_CHAPTERTRACKNUMBER = 0x09
 
const EBML_ID_CLUSTERSLICES = 0x0E
 
const EBML_ID_CHAPTERTRACK = 0x0F
 
const EBML_ID_CHAPTERTIMESTART = 0x11
 
const EBML_ID_CHAPTERTIMEEND = 0x12
 
const EBML_ID_CUEREFTIME = 0x16
 
const EBML_ID_CUEREFCLUSTER = 0x17
 
const EBML_ID_CHAPTERFLAGHIDDEN = 0x18
 
const EBML_ID_FLAGINTERLACED = 0x1A
 
const EBML_ID_CLUSTERBLOCKDURATION = 0x1B
 
const EBML_ID_FLAGLACING = 0x1C
 
const EBML_ID_CHANNELS = 0x1F
 
const EBML_ID_CLUSTERBLOCKGROUP = 0x20
 
const EBML_ID_CLUSTERBLOCK = 0x21
 
const EBML_ID_CLUSTERBLOCKVIRTUAL = 0x22
 
const EBML_ID_CLUSTERSIMPLEBLOCK = 0x23
 
const EBML_ID_CLUSTERCODECSTATE = 0x24
 
const EBML_ID_CLUSTERBLOCKADDITIONAL = 0x25
 
const EBML_ID_CLUSTERBLOCKMORE = 0x26
 
const EBML_ID_CLUSTERPOSITION = 0x27
 
const EBML_ID_CODECDECODEALL = 0x2A
 
const EBML_ID_CLUSTERPREVSIZE = 0x2B
 
const EBML_ID_TRACKENTRY = 0x2E
 
const EBML_ID_CLUSTERENCRYPTEDBLOCK = 0x2F
 
const EBML_ID_PIXELWIDTH = 0x30
 
const EBML_ID_CUETIME = 0x33
 
const EBML_ID_SAMPLINGFREQUENCY = 0x35
 
const EBML_ID_CHAPTERATOM = 0x36
 
const EBML_ID_CUETRACKPOSITIONS = 0x37
 
const EBML_ID_FLAGENABLED = 0x39
 
const EBML_ID_PIXELHEIGHT = 0x3A
 
const EBML_ID_CUEPOINT = 0x3B
 
const EBML_ID_CRC32 = 0x3F
 
const EBML_ID_CLUSTERBLOCKADDITIONID = 0x4B
 
const EBML_ID_CLUSTERLACENUMBER = 0x4C
 
const EBML_ID_CLUSTERFRAMENUMBER = 0x4D
 
const EBML_ID_CLUSTERDELAY = 0x4E
 
const EBML_ID_CLUSTERDURATION = 0x4F
 
const EBML_ID_TRACKNUMBER = 0x57
 
const EBML_ID_CUEREFERENCE = 0x5B
 
const EBML_ID_VIDEO = 0x60
 
const EBML_ID_AUDIO = 0x61
 
const EBML_ID_CLUSTERTIMESLICE = 0x68
 
const EBML_ID_CUECODECSTATE = 0x6A
 
const EBML_ID_CUEREFCODECSTATE = 0x6B
 
const EBML_ID_VOID = 0x6C
 
const EBML_ID_CLUSTERTIMECODE = 0x67
 
const EBML_ID_CLUSTERBLOCKADDID = 0x6E
 
const EBML_ID_CUECLUSTERPOSITION = 0x71
 
const EBML_ID_CUETRACK = 0x77
 
const EBML_ID_CLUSTERREFERENCEPRIORITY = 0x7A
 
const EBML_ID_CLUSTERREFERENCEBLOCK = 0x7B
 
const EBML_ID_CLUSTERREFERENCEVIRTUAL = 0x7D
 

Static Public Attributes

static $hide_clusters = true
 
static $parse_whole_file = false
 

Private Member Functions

 parseEBML (&$info)
 
 EnsureBufferHasEnoughData ($min_data=1024)
 
 readEBMLint ()
 
 readEBMLelementData ($length)
 
 getEBMLelement (&$element, $parent_end, $get_data=false)
 
 unhandledElement ($type, $line, $element)
 
 ExtractCommentsSimpleTag ($SimpleTagArray)
 
 HandleEMBLSimpleTag ($parent_end)
 
 HandleEMBLClusterBlock ($element, $block_type, &$info)
 

Static Private Member Functions

static EBML2Int ($EBMLstring)
 
static EBMLdate2unix ($EBMLdatestamp)
 
static EBMLidName ($value)
 @staticvar array $EBMLidList More...
 
static getDefaultStreamInfo ($streams)
 

Private Attributes

 $EBMLbuffer = ''
 
 $EBMLbuffer_offset = 0
 
 $EBMLbuffer_length = 0
 
 $current_offset = 0
 
 $unuseful_elements = array(self::EBML_ID_CRC32, self::EBML_ID_VOID)
 

Additional Inherited Members

- Protected Member Functions inherited from GetId3\Handler\BaseHandler
 ftell ()
 
 fread ($bytes)
 
 fseek ($bytes, $whence=SEEK_SET)
 
 feof ()
 
 isDependencyFor ($module)
 
 error ($text)
 
 warning ($text)
 
- Protected Attributes inherited from GetId3\Handler\BaseHandler
 $getid3
 
 $data_string_flag = false
 
 $data_string = ''
 
 $data_string_position = 0
 
 $data_string_length = 0
 

Detailed Description

GetId3() by James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g //.

module for analyzing Matroska containers

Author
James Heinrich info@.nosp@m.geti.nosp@m.d3.or.nosp@m.g http://www.getid3.org http://www.matroska.org/technical/specs/index.html

Definition at line 33 of file Matroska.php.

Member Function Documentation

◆ analyze()

GetId3\Module\AudioVideo\Matroska::analyze ( )
Returns
boolean

Reimplemented from GetId3\Handler\BaseHandler.

Definition at line 268 of file Matroska.php.

269 {
270 $info = &$this->getid3->info;
271
272 // parse container
273 try {
274 $this->parseEBML($info);
275 } catch (DefaultException $e) {
276 $info['error'][] = 'EBML parser: '.$e->getMessage();
277 }
278
279 // calculate playtime
280 if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) {
281 foreach ($info['matroska']['info'] as $key => $infoarray) {
282 if (isset($infoarray['Duration'])) {
283 // TimecodeScale is how many nanoseconds each Duration unit is
284 $info['playtime_seconds'] = $infoarray['Duration'] * ((isset($infoarray['TimecodeScale']) ? $infoarray['TimecodeScale'] : 1000000) / 1000000000);
285 break;
286 }
287 }
288 }
289
290 // extract tags
291 if (isset($info['matroska']['tags']) && is_array($info['matroska']['tags'])) {
292 foreach ($info['matroska']['tags'] as $key => $infoarray) {
293 $this->ExtractCommentsSimpleTag($infoarray);
294 }
295 }
296
297 // process tracks
298 if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) {
299 foreach ($info['matroska']['tracks']['tracks'] as $key => $trackarray) {
300
301 $track_info = array();
302 $track_info['dataformat'] = self::MatroskaCodecIDtoCommonName($trackarray['CodecID']);
303 $track_info['default'] = (isset($trackarray['FlagDefault']) ? $trackarray['FlagDefault'] : true);
304 if (isset($trackarray['Name'])) { $track_info['name'] = $trackarray['Name']; }
305
306 switch ($trackarray['TrackType']) {
307
308 case 1: // Video
309 $track_info['resolution_x'] = $trackarray['PixelWidth'];
310 $track_info['resolution_y'] = $trackarray['PixelHeight'];
311 if (isset($trackarray['DisplayWidth'])) { $track_info['display_x'] = $trackarray['DisplayWidth']; }
312 if (isset($trackarray['DisplayHeight'])) { $track_info['display_y'] = $trackarray['DisplayHeight']; }
313 if (isset($trackarray['DefaultDuration'])) { $track_info['frame_rate'] = round(1000000000 / $trackarray['DefaultDuration'], 3); }
314 if (isset($trackarray['CodecName'])) { $track_info['codec'] = $trackarray['CodecName']; }
315
316 switch ($trackarray['CodecID']) {
317 case 'V_MS/VFW/FOURCC':
318 if (!class_exists('GetId3\Module\AudioVideo\Riff')) {
319 $this->getid3->warning('Unable to parse codec private data ['.basename(__FILE__).':'.__LINE__.'] because cannot include "' . str_replace('_', DIRECTORY_SEPARATOR, 'GetId3\Module\AudioVideo\Riff') . '.php"');
320 break;
321 }
322 $parsed = Riff::ParseBITMAPINFOHEADER($trackarray['CodecPrivate']);
323 $track_info['codec'] = Riff::RIFFfourccLookup($parsed['fourcc']);
324 $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $parsed;
325 break;
326
327 /*case 'V_MPEG4/ISO/AVC':
328 $h264['profile'] = GetId3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 1, 1));
329 $h264['level'] = GetId3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 3, 1));
330 $rn = GetId3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 4, 1));
331 $h264['NALUlength'] = ($rn & 3) + 1;
332 $rn = GetId3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 5, 1));
333 $nsps = ($rn & 31);
334 $offset = 6;
335 for ($i = 0; $i < $nsps; $i ++) {
336 $length = GetId3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 2));
337 $h264['SPS'][] = substr($trackarray['CodecPrivate'], $offset + 2, $length);
338 $offset += 2 + $length;
339 }
340 $npps = GetId3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 1));
341 $offset += 1;
342 for ($i = 0; $i < $npps; $i ++) {
343 $length = GetId3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 2));
344 $h264['PPS'][] = substr($trackarray['CodecPrivate'], $offset + 2, $length);
345 $offset += 2 + $length;
346 }
347 $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $h264;
348 break;*/
349 }
350
351 $info['video']['streams'][] = $track_info;
352 break;
353
354 case 2: // Audio
355 $track_info['sample_rate'] = (isset($trackarray['SamplingFrequency']) ? $trackarray['SamplingFrequency'] : 8000.0);
356 $track_info['channels'] = (isset($trackarray['Channels']) ? $trackarray['Channels'] : 1);
357 $track_info['language'] = (isset($trackarray['Language']) ? $trackarray['Language'] : 'eng');
358 if (isset($trackarray['BitDepth'])) { $track_info['bits_per_sample'] = $trackarray['BitDepth']; }
359 if (isset($trackarray['CodecName'])) { $track_info['codec'] = $trackarray['CodecName']; }
360
361 switch ($trackarray['CodecID']) {
362 case 'A_PCM/INT/LIT':
363 case 'A_PCM/INT/BIG':
364 $track_info['bitrate'] = $trackarray['SamplingFrequency'] * $trackarray['Channels'] * $trackarray['BitDepth'];
365 break;
366
367 case 'A_AC3':
368 case 'A_DTS':
369 case 'A_MPEG/L3':
370 case 'A_MPEG/L2':
371 case 'A_FLAC':
372 $class = 'GetId3\\Module\\Audio\\' . ucfirst($track_info['dataformat'] == 'mp2' ? 'mp3' : $track_info['dataformat']);
373 if (!class_exists($class)) {
374 $this->getid3->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because cannot include "module.audio.'.$track_info['dataformat'].'.php"');
375 break;
376 }
377
378 if (!isset($info['matroska']['track_data_offsets'][$trackarray['TrackNumber']])) {
379 $this->getid3->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because $info[matroska][track_data_offsets]['.$trackarray['TrackNumber'].'] not set');
380 break;
381 }
382
383 // create temp instance
384 $getid3_temp = new GetId3Core();
385 if ($track_info['dataformat'] != 'flac') {
386 $getid3_temp->openfile($this->getid3->filename);
387 }
388 $getid3_temp->info['avdataoffset'] = $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['offset'];
389 if ($track_info['dataformat'][0] == 'm' || $track_info['dataformat'] == 'flac') {
390 $getid3_temp->info['avdataend'] = $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['offset'] + $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['length'];
391 }
392
393 // analyze
394 $header_data_key = $track_info['dataformat'][0] == 'm' ? 'mpeg' : $track_info['dataformat'];
395 $getid3_audio = new $class($getid3_temp, __CLASS__);
396 if ($track_info['dataformat'] == 'flac') {
397 $getid3_audio->AnalyzeString($trackarray['CodecPrivate']);
398 } else {
399 $getid3_audio->analyze();
400 }
401 if (!empty($getid3_temp->info[$header_data_key])) {
402 $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $getid3_temp->info[$header_data_key];
403 if (isset($getid3_temp->info['audio']) && is_array($getid3_temp->info['audio'])) {
404 foreach ($getid3_temp->info['audio'] as $key => $value) {
405 $track_info[$key] = $value;
406 }
407 }
408 } else {
409 $this->getid3->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because '.$class.'::Analyze() failed at offset '.$getid3_temp->info['avdataoffset']);
410 }
411
412 // copy errors and warnings
413 if (!empty($getid3_temp->info['error'])) {
414 foreach ($getid3_temp->info['error'] as $newerror) {
415 $this->getid3->warning($class.'() says: ['.$newerror.']');
416 }
417 }
418 if (!empty($getid3_temp->info['warning'])) {
419 foreach ($getid3_temp->info['warning'] as $newerror) {
420 if ($track_info['dataformat'] == 'mp3' && preg_match('/^Probable truncated file: expecting \d+ bytes of audio data, only found \d+ \‍(short by \d+ bytes\‍)$/', $newerror)) {
421 // LAME/Xing header is probably set, but audio data is chunked into Matroska file and near-impossible to verify if audio stream is complete, so ignore useless warning
422 continue;
423 }
424 $this->getid3->warning($class.'() says: ['.$newerror.']');
425 }
426 }
427 unset($getid3_temp, $getid3_audio);
428 break;
429
430 case 'A_AAC':
431 case 'A_AAC/MPEG2/LC':
432 case 'A_AAC/MPEG4/LC':
433 case 'A_AAC/MPEG4/LC/SBR':
434 $this->getid3->warning($trackarray['CodecID'].' audio data contains no header, audio/video bitrates can\'t be calculated');
435 break;
436
437 case 'A_VORBIS':
438 if (!isset($trackarray['CodecPrivate'])) {
439 $this->getid3->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because CodecPrivate data not set');
440 break;
441 }
442 $vorbis_offset = strpos($trackarray['CodecPrivate'], 'vorbis', 1);
443 if ($vorbis_offset === false) {
444 $this->getid3->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because CodecPrivate data does not contain "vorbis" keyword');
445 break;
446 }
447 $vorbis_offset -= 1;
448
449 if (!class_exists('GetId3\\Module\\Audio\\Ogg')) {
450 $this->getid3->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because cannot include "GetId3\\Module\\Audio\\Ogg.php"');
451 break;
452 }
453
454 // create temp instance
455 $getid3_temp = new GetId3Core();
456
457 // analyze
458 $getid3_ogg = new Ogg($getid3_temp);
459 $oggpageinfo['page_seqno'] = 0;
460 $getid3_ogg->ParseVorbisPageHeader($trackarray['CodecPrivate'], $vorbis_offset, $oggpageinfo);
461 if (!empty($getid3_temp->info['ogg'])) {
462 $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $getid3_temp->info['ogg'];
463 if (isset($getid3_temp->info['audio']) && is_array($getid3_temp->info['audio'])) {
464 foreach ($getid3_temp->info['audio'] as $key => $value) {
465 $track_info[$key] = $value;
466 }
467 }
468 }
469
470 // copy errors and warnings
471 if (!empty($getid3_temp->info['error'])) {
472 foreach ($getid3_temp->info['error'] as $newerror) {
473 $this->getid3->warning('getid3_ogg() says: ['.$newerror.']');
474 }
475 }
476 if (!empty($getid3_temp->info['warning'])) {
477 foreach ($getid3_temp->info['warning'] as $newerror) {
478 $this->getid3->warning('getid3_ogg() says: ['.$newerror.']');
479 }
480 }
481
482 if (!empty($getid3_temp->info['ogg']['bitrate_nominal'])) {
483 $track_info['bitrate'] = $getid3_temp->info['ogg']['bitrate_nominal'];
484 }
485 unset($getid3_temp, $getid3_ogg, $oggpageinfo, $vorbis_offset);
486 break;
487
488 case 'A_MS/ACM':
489 if (!class_exists('GetId3\Module\AudioVideo\Riff')) {
490 $this->getid3->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because cannot include "' . str_replace('_', DIRECTORY_SEPARATOR, 'GetId3\Module\AudioVideo\Riff') . '.php"');
491 break;
492 }
493
494 $parsed = Riff::RIFFparseWAVEFORMATex($trackarray['CodecPrivate']);
495 foreach ($parsed as $key => $value) {
496 if ($key != 'raw') {
497 $track_info[$key] = $value;
498 }
499 }
500 $info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $parsed;
501 break;
502
503 default:
504 $this->getid3->warning('Unhandled audio type "'.(isset($trackarray['CodecID']) ? $trackarray['CodecID'] : '').'"');
505 }
506
507 $info['audio']['streams'][] = $track_info;
508 break;
509 }
510 }
511
512 if (!empty($info['video']['streams'])) {
513 $info['video'] = self::getDefaultStreamInfo($info['video']['streams']);
514 }
515 if (!empty($info['audio']['streams'])) {
516 $info['audio'] = self::getDefaultStreamInfo($info['audio']['streams']);
517 }
518 }
519
520 // determine mime type
521 if (!empty($info['video']['streams'])) {
522 $info['mime_type'] = ($info['matroska']['doctype'] == 'webm' ? 'video/webm' : 'video/x-matroska');
523 } elseif (!empty($info['audio']['streams'])) {
524 $info['mime_type'] = ($info['matroska']['doctype'] == 'webm' ? 'audio/webm' : 'audio/x-matroska');
525 } elseif (isset($info['mime_type'])) {
526 unset($info['mime_type']);
527 }
528
529 return true;
530 }
ExtractCommentsSimpleTag($SimpleTagArray)
Definition: Matroska.php:1406
static MatroskaCodecIDtoCommonName($codecid)
@staticvar array $MatroskaCodecIDlist
Definition: Matroska.php:1632
static getDefaultStreamInfo($streams)
Definition: Matroska.php:1872
static RIFFfourccLookup($fourcc)
Definition: Riff.php:2101
static ParseBITMAPINFOHEADER($BITMAPINFOHEADER, $littleEndian=true)
Definition: Riff.php:1805
static RIFFparseWAVEFORMATex($WaveFormatExData)
Definition: Riff.php:1707
$info
Definition: example_052.php:80

References $info, GetId3\Module\AudioVideo\Matroska\ExtractCommentsSimpleTag(), GetId3\Module\AudioVideo\Matroska\getDefaultStreamInfo(), GetId3\Module\AudioVideo\Matroska\MatroskaCodecIDtoCommonName(), GetId3\Module\AudioVideo\Riff\ParseBITMAPINFOHEADER(), GetId3\Module\AudioVideo\Matroska\parseEBML(), GetId3\Module\AudioVideo\Riff\RIFFfourccLookup(), and GetId3\Module\AudioVideo\Riff\RIFFparseWAVEFORMATex().

+ Here is the call graph for this function:

◆ EBML2Int()

static GetId3\Module\AudioVideo\Matroska::EBML2Int (   $EBMLstring)
staticprivate
Parameters
type$EBMLstring
Returns
type http://matroska.org/specs/

Definition at line 1529 of file Matroska.php.

1530 {
1531 // Element ID coded with an UTF-8 like system:
1532 // 1xxx xxxx - Class A IDs (2^7 -2 possible values) (base 0x8X)
1533 // 01xx xxxx xxxx xxxx - Class B IDs (2^14-2 possible values) (base 0x4X 0xXX)
1534 // 001x xxxx xxxx xxxx xxxx xxxx - Class C IDs (2^21-2 possible values) (base 0x2X 0xXX 0xXX)
1535 // 0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx - Class D IDs (2^28-2 possible values) (base 0x1X 0xXX 0xXX 0xXX)
1536 // Values with all x at 0 and 1 are reserved (hence the -2).
1537
1538 // Data size, in octets, is also coded with an UTF-8 like system :
1539 // 1xxx xxxx - value 0 to 2^7-2
1540 // 01xx xxxx xxxx xxxx - value 0 to 2^14-2
1541 // 001x xxxx xxxx xxxx xxxx xxxx - value 0 to 2^21-2
1542 // 0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^28-2
1543 // 0000 1xxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^35-2
1544 // 0000 01xx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^42-2
1545 // 0000 001x xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^49-2
1546 // 0000 0001 xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx - value 0 to 2^56-2
1547
1548 $first_byte_int = ord($EBMLstring[0]);
1549 if (0x80 & $first_byte_int) {
1550 $EBMLstring[0] = chr($first_byte_int & 0x7F);
1551 } elseif (0x40 & $first_byte_int) {
1552 $EBMLstring[0] = chr($first_byte_int & 0x3F);
1553 } elseif (0x20 & $first_byte_int) {
1554 $EBMLstring[0] = chr($first_byte_int & 0x1F);
1555 } elseif (0x10 & $first_byte_int) {
1556 $EBMLstring[0] = chr($first_byte_int & 0x0F);
1557 } elseif (0x08 & $first_byte_int) {
1558 $EBMLstring[0] = chr($first_byte_int & 0x07);
1559 } elseif (0x04 & $first_byte_int) {
1560 $EBMLstring[0] = chr($first_byte_int & 0x03);
1561 } elseif (0x02 & $first_byte_int) {
1562 $EBMLstring[0] = chr($first_byte_int & 0x01);
1563 } elseif (0x01 & $first_byte_int) {
1564 $EBMLstring[0] = chr($first_byte_int & 0x00);
1565 }
1566
1567 return Helper::BigEndian2Int($EBMLstring);
1568 }
static BigEndian2Int($byteword, $synchsafe=false, $signed=false)
Definition: Helper.php:374

References GetId3\Lib\Helper\BigEndian2Int().

Referenced by GetId3\Module\AudioVideo\Matroska\parseEBML(), and GetId3\Module\AudioVideo\Matroska\readEBMLint().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ EBMLdate2unix()

static GetId3\Module\AudioVideo\Matroska::EBMLdate2unix (   $EBMLdatestamp)
staticprivate
Parameters
type$EBMLdatestamp
Returns
type

Definition at line 1575 of file Matroska.php.

1576 {
1577 // Date - signed 8 octets integer in nanoseconds with 0 indicating the precise beginning of the millennium (at 2001-01-01T00:00:00,000000000 UTC)
1578 // 978307200 == mktime(0, 0, 0, 1, 1, 2001) == January 1, 2001 12:00:00am UTC
1579 return round(($EBMLdatestamp / 1000000000) + 978307200);
1580 }

Referenced by GetId3\Module\AudioVideo\Matroska\parseEBML().

+ Here is the caller graph for this function:

◆ EBMLidName()

static GetId3\Module\AudioVideo\Matroska::EBMLidName (   $value)
staticprivate

@staticvar array $EBMLidList

Parameters
type$value
Returns
type

Definition at line 1674 of file Matroska.php.

1675 {
1676 static $EBMLidList = array();
1677 if (empty($EBMLidList)) {
1678 $EBMLidList[self::EBML_ID_ASPECTRATIOTYPE] = 'AspectRatioType';
1679 $EBMLidList[self::EBML_ID_ATTACHEDFILE] = 'AttachedFile';
1680 $EBMLidList[self::EBML_ID_ATTACHMENTLINK] = 'AttachmentLink';
1681 $EBMLidList[self::EBML_ID_ATTACHMENTS] = 'Attachments';
1682 $EBMLidList[self::EBML_ID_AUDIO] = 'Audio';
1683 $EBMLidList[self::EBML_ID_BITDEPTH] = 'BitDepth';
1684 $EBMLidList[self::EBML_ID_CHANNELPOSITIONS] = 'ChannelPositions';
1685 $EBMLidList[self::EBML_ID_CHANNELS] = 'Channels';
1686 $EBMLidList[self::EBML_ID_CHAPCOUNTRY] = 'ChapCountry';
1687 $EBMLidList[self::EBML_ID_CHAPLANGUAGE] = 'ChapLanguage';
1688 $EBMLidList[self::EBML_ID_CHAPPROCESS] = 'ChapProcess';
1689 $EBMLidList[self::EBML_ID_CHAPPROCESSCODECID] = 'ChapProcessCodecID';
1690 $EBMLidList[self::EBML_ID_CHAPPROCESSCOMMAND] = 'ChapProcessCommand';
1691 $EBMLidList[self::EBML_ID_CHAPPROCESSDATA] = 'ChapProcessData';
1692 $EBMLidList[self::EBML_ID_CHAPPROCESSPRIVATE] = 'ChapProcessPrivate';
1693 $EBMLidList[self::EBML_ID_CHAPPROCESSTIME] = 'ChapProcessTime';
1694 $EBMLidList[self::EBML_ID_CHAPSTRING] = 'ChapString';
1695 $EBMLidList[self::EBML_ID_CHAPTERATOM] = 'ChapterAtom';
1696 $EBMLidList[self::EBML_ID_CHAPTERDISPLAY] = 'ChapterDisplay';
1697 $EBMLidList[self::EBML_ID_CHAPTERFLAGENABLED] = 'ChapterFlagEnabled';
1698 $EBMLidList[self::EBML_ID_CHAPTERFLAGHIDDEN] = 'ChapterFlagHidden';
1699 $EBMLidList[self::EBML_ID_CHAPTERPHYSICALEQUIV] = 'ChapterPhysicalEquiv';
1700 $EBMLidList[self::EBML_ID_CHAPTERS] = 'Chapters';
1701 $EBMLidList[self::EBML_ID_CHAPTERSEGMENTEDITIONUID] = 'ChapterSegmentEditionUID';
1702 $EBMLidList[self::EBML_ID_CHAPTERSEGMENTUID] = 'ChapterSegmentUID';
1703 $EBMLidList[self::EBML_ID_CHAPTERTIMEEND] = 'ChapterTimeEnd';
1704 $EBMLidList[self::EBML_ID_CHAPTERTIMESTART] = 'ChapterTimeStart';
1705 $EBMLidList[self::EBML_ID_CHAPTERTRACK] = 'ChapterTrack';
1706 $EBMLidList[self::EBML_ID_CHAPTERTRACKNUMBER] = 'ChapterTrackNumber';
1707 $EBMLidList[self::EBML_ID_CHAPTERTRANSLATE] = 'ChapterTranslate';
1708 $EBMLidList[self::EBML_ID_CHAPTERTRANSLATECODEC] = 'ChapterTranslateCodec';
1709 $EBMLidList[self::EBML_ID_CHAPTERTRANSLATEEDITIONUID] = 'ChapterTranslateEditionUID';
1710 $EBMLidList[self::EBML_ID_CHAPTERTRANSLATEID] = 'ChapterTranslateID';
1711 $EBMLidList[self::EBML_ID_CHAPTERUID] = 'ChapterUID';
1712 $EBMLidList[self::EBML_ID_CLUSTER] = 'Cluster';
1713 $EBMLidList[self::EBML_ID_CLUSTERBLOCK] = 'ClusterBlock';
1714 $EBMLidList[self::EBML_ID_CLUSTERBLOCKADDID] = 'ClusterBlockAddID';
1715 $EBMLidList[self::EBML_ID_CLUSTERBLOCKADDITIONAL] = 'ClusterBlockAdditional';
1716 $EBMLidList[self::EBML_ID_CLUSTERBLOCKADDITIONID] = 'ClusterBlockAdditionID';
1717 $EBMLidList[self::EBML_ID_CLUSTERBLOCKADDITIONS] = 'ClusterBlockAdditions';
1718 $EBMLidList[self::EBML_ID_CLUSTERBLOCKDURATION] = 'ClusterBlockDuration';
1719 $EBMLidList[self::EBML_ID_CLUSTERBLOCKGROUP] = 'ClusterBlockGroup';
1720 $EBMLidList[self::EBML_ID_CLUSTERBLOCKMORE] = 'ClusterBlockMore';
1721 $EBMLidList[self::EBML_ID_CLUSTERBLOCKVIRTUAL] = 'ClusterBlockVirtual';
1722 $EBMLidList[self::EBML_ID_CLUSTERCODECSTATE] = 'ClusterCodecState';
1723 $EBMLidList[self::EBML_ID_CLUSTERDELAY] = 'ClusterDelay';
1724 $EBMLidList[self::EBML_ID_CLUSTERDURATION] = 'ClusterDuration';
1725 $EBMLidList[self::EBML_ID_CLUSTERENCRYPTEDBLOCK] = 'ClusterEncryptedBlock';
1726 $EBMLidList[self::EBML_ID_CLUSTERFRAMENUMBER] = 'ClusterFrameNumber';
1727 $EBMLidList[self::EBML_ID_CLUSTERLACENUMBER] = 'ClusterLaceNumber';
1728 $EBMLidList[self::EBML_ID_CLUSTERPOSITION] = 'ClusterPosition';
1729 $EBMLidList[self::EBML_ID_CLUSTERPREVSIZE] = 'ClusterPrevSize';
1730 $EBMLidList[self::EBML_ID_CLUSTERREFERENCEBLOCK] = 'ClusterReferenceBlock';
1731 $EBMLidList[self::EBML_ID_CLUSTERREFERENCEPRIORITY] = 'ClusterReferencePriority';
1732 $EBMLidList[self::EBML_ID_CLUSTERREFERENCEVIRTUAL] = 'ClusterReferenceVirtual';
1733 $EBMLidList[self::EBML_ID_CLUSTERSILENTTRACKNUMBER] = 'ClusterSilentTrackNumber';
1734 $EBMLidList[self::EBML_ID_CLUSTERSILENTTRACKS] = 'ClusterSilentTracks';
1735 $EBMLidList[self::EBML_ID_CLUSTERSIMPLEBLOCK] = 'ClusterSimpleBlock';
1736 $EBMLidList[self::EBML_ID_CLUSTERTIMECODE] = 'ClusterTimecode';
1737 $EBMLidList[self::EBML_ID_CLUSTERTIMESLICE] = 'ClusterTimeSlice';
1738 $EBMLidList[self::EBML_ID_CODECDECODEALL] = 'CodecDecodeAll';
1739 $EBMLidList[self::EBML_ID_CODECDOWNLOADURL] = 'CodecDownloadURL';
1740 $EBMLidList[self::EBML_ID_CODECID] = 'CodecID';
1741 $EBMLidList[self::EBML_ID_CODECINFOURL] = 'CodecInfoURL';
1742 $EBMLidList[self::EBML_ID_CODECNAME] = 'CodecName';
1743 $EBMLidList[self::EBML_ID_CODECPRIVATE] = 'CodecPrivate';
1744 $EBMLidList[self::EBML_ID_CODECSETTINGS] = 'CodecSettings';
1745 $EBMLidList[self::EBML_ID_COLOURSPACE] = 'ColourSpace';
1746 $EBMLidList[self::EBML_ID_CONTENTCOMPALGO] = 'ContentCompAlgo';
1747 $EBMLidList[self::EBML_ID_CONTENTCOMPRESSION] = 'ContentCompression';
1748 $EBMLidList[self::EBML_ID_CONTENTCOMPSETTINGS] = 'ContentCompSettings';
1749 $EBMLidList[self::EBML_ID_CONTENTENCALGO] = 'ContentEncAlgo';
1750 $EBMLidList[self::EBML_ID_CONTENTENCKEYID] = 'ContentEncKeyID';
1751 $EBMLidList[self::EBML_ID_CONTENTENCODING] = 'ContentEncoding';
1752 $EBMLidList[self::EBML_ID_CONTENTENCODINGORDER] = 'ContentEncodingOrder';
1753 $EBMLidList[self::EBML_ID_CONTENTENCODINGS] = 'ContentEncodings';
1754 $EBMLidList[self::EBML_ID_CONTENTENCODINGSCOPE] = 'ContentEncodingScope';
1755 $EBMLidList[self::EBML_ID_CONTENTENCODINGTYPE] = 'ContentEncodingType';
1756 $EBMLidList[self::EBML_ID_CONTENTENCRYPTION] = 'ContentEncryption';
1757 $EBMLidList[self::EBML_ID_CONTENTSIGALGO] = 'ContentSigAlgo';
1758 $EBMLidList[self::EBML_ID_CONTENTSIGHASHALGO] = 'ContentSigHashAlgo';
1759 $EBMLidList[self::EBML_ID_CONTENTSIGKEYID] = 'ContentSigKeyID';
1760 $EBMLidList[self::EBML_ID_CONTENTSIGNATURE] = 'ContentSignature';
1761 $EBMLidList[self::EBML_ID_CRC32] = 'CRC32';
1762 $EBMLidList[self::EBML_ID_CUEBLOCKNUMBER] = 'CueBlockNumber';
1763 $EBMLidList[self::EBML_ID_CUECLUSTERPOSITION] = 'CueClusterPosition';
1764 $EBMLidList[self::EBML_ID_CUECODECSTATE] = 'CueCodecState';
1765 $EBMLidList[self::EBML_ID_CUEPOINT] = 'CuePoint';
1766 $EBMLidList[self::EBML_ID_CUEREFCLUSTER] = 'CueRefCluster';
1767 $EBMLidList[self::EBML_ID_CUEREFCODECSTATE] = 'CueRefCodecState';
1768 $EBMLidList[self::EBML_ID_CUEREFERENCE] = 'CueReference';
1769 $EBMLidList[self::EBML_ID_CUEREFNUMBER] = 'CueRefNumber';
1770 $EBMLidList[self::EBML_ID_CUEREFTIME] = 'CueRefTime';
1771 $EBMLidList[self::EBML_ID_CUES] = 'Cues';
1772 $EBMLidList[self::EBML_ID_CUETIME] = 'CueTime';
1773 $EBMLidList[self::EBML_ID_CUETRACK] = 'CueTrack';
1774 $EBMLidList[self::EBML_ID_CUETRACKPOSITIONS] = 'CueTrackPositions';
1775 $EBMLidList[self::EBML_ID_DATEUTC] = 'DateUTC';
1776 $EBMLidList[self::EBML_ID_DEFAULTDURATION] = 'DefaultDuration';
1777 $EBMLidList[self::EBML_ID_DISPLAYHEIGHT] = 'DisplayHeight';
1778 $EBMLidList[self::EBML_ID_DISPLAYUNIT] = 'DisplayUnit';
1779 $EBMLidList[self::EBML_ID_DISPLAYWIDTH] = 'DisplayWidth';
1780 $EBMLidList[self::EBML_ID_DOCTYPE] = 'DocType';
1781 $EBMLidList[self::EBML_ID_DOCTYPEREADVERSION] = 'DocTypeReadVersion';
1782 $EBMLidList[self::EBML_ID_DOCTYPEVERSION] = 'DocTypeVersion';
1783 $EBMLidList[self::EBML_ID_DURATION] = 'Duration';
1784 $EBMLidList[self::EBML_ID_EBML] = 'EBML';
1785 $EBMLidList[self::EBML_ID_EBMLMAXIDLENGTH] = 'EBMLMaxIDLength';
1786 $EBMLidList[self::EBML_ID_EBMLMAXSIZELENGTH] = 'EBMLMaxSizeLength';
1787 $EBMLidList[self::EBML_ID_EBMLREADVERSION] = 'EBMLReadVersion';
1788 $EBMLidList[self::EBML_ID_EBMLVERSION] = 'EBMLVersion';
1789 $EBMLidList[self::EBML_ID_EDITIONENTRY] = 'EditionEntry';
1790 $EBMLidList[self::EBML_ID_EDITIONFLAGDEFAULT] = 'EditionFlagDefault';
1791 $EBMLidList[self::EBML_ID_EDITIONFLAGHIDDEN] = 'EditionFlagHidden';
1792 $EBMLidList[self::EBML_ID_EDITIONFLAGORDERED] = 'EditionFlagOrdered';
1793 $EBMLidList[self::EBML_ID_EDITIONUID] = 'EditionUID';
1794 $EBMLidList[self::EBML_ID_FILEDATA] = 'FileData';
1795 $EBMLidList[self::EBML_ID_FILEDESCRIPTION] = 'FileDescription';
1796 $EBMLidList[self::EBML_ID_FILEMIMETYPE] = 'FileMimeType';
1797 $EBMLidList[self::EBML_ID_FILENAME] = 'FileName';
1798 $EBMLidList[self::EBML_ID_FILEREFERRAL] = 'FileReferral';
1799 $EBMLidList[self::EBML_ID_FILEUID] = 'FileUID';
1800 $EBMLidList[self::EBML_ID_FLAGDEFAULT] = 'FlagDefault';
1801 $EBMLidList[self::EBML_ID_FLAGENABLED] = 'FlagEnabled';
1802 $EBMLidList[self::EBML_ID_FLAGFORCED] = 'FlagForced';
1803 $EBMLidList[self::EBML_ID_FLAGINTERLACED] = 'FlagInterlaced';
1804 $EBMLidList[self::EBML_ID_FLAGLACING] = 'FlagLacing';
1805 $EBMLidList[self::EBML_ID_GAMMAVALUE] = 'GammaValue';
1806 $EBMLidList[self::EBML_ID_INFO] = 'Info';
1807 $EBMLidList[self::EBML_ID_LANGUAGE] = 'Language';
1808 $EBMLidList[self::EBML_ID_MAXBLOCKADDITIONID] = 'MaxBlockAdditionID';
1809 $EBMLidList[self::EBML_ID_MAXCACHE] = 'MaxCache';
1810 $EBMLidList[self::EBML_ID_MINCACHE] = 'MinCache';
1811 $EBMLidList[self::EBML_ID_MUXINGAPP] = 'MuxingApp';
1812 $EBMLidList[self::EBML_ID_NAME] = 'Name';
1813 $EBMLidList[self::EBML_ID_NEXTFILENAME] = 'NextFilename';
1814 $EBMLidList[self::EBML_ID_NEXTUID] = 'NextUID';
1815 $EBMLidList[self::EBML_ID_OUTPUTSAMPLINGFREQUENCY] = 'OutputSamplingFrequency';
1816 $EBMLidList[self::EBML_ID_PIXELCROPBOTTOM] = 'PixelCropBottom';
1817 $EBMLidList[self::EBML_ID_PIXELCROPLEFT] = 'PixelCropLeft';
1818 $EBMLidList[self::EBML_ID_PIXELCROPRIGHT] = 'PixelCropRight';
1819 $EBMLidList[self::EBML_ID_PIXELCROPTOP] = 'PixelCropTop';
1820 $EBMLidList[self::EBML_ID_PIXELHEIGHT] = 'PixelHeight';
1821 $EBMLidList[self::EBML_ID_PIXELWIDTH] = 'PixelWidth';
1822 $EBMLidList[self::EBML_ID_PREVFILENAME] = 'PrevFilename';
1823 $EBMLidList[self::EBML_ID_PREVUID] = 'PrevUID';
1824 $EBMLidList[self::EBML_ID_SAMPLINGFREQUENCY] = 'SamplingFrequency';
1825 $EBMLidList[self::EBML_ID_SEEK] = 'Seek';
1826 $EBMLidList[self::EBML_ID_SEEKHEAD] = 'SeekHead';
1827 $EBMLidList[self::EBML_ID_SEEKID] = 'SeekID';
1828 $EBMLidList[self::EBML_ID_SEEKPOSITION] = 'SeekPosition';
1829 $EBMLidList[self::EBML_ID_SEGMENT] = 'Segment';
1830 $EBMLidList[self::EBML_ID_SEGMENTFAMILY] = 'SegmentFamily';
1831 $EBMLidList[self::EBML_ID_SEGMENTFILENAME] = 'SegmentFilename';
1832 $EBMLidList[self::EBML_ID_SEGMENTUID] = 'SegmentUID';
1833 $EBMLidList[self::EBML_ID_SIMPLETAG] = 'SimpleTag';
1834 $EBMLidList[self::EBML_ID_CLUSTERSLICES] = 'ClusterSlices';
1835 $EBMLidList[self::EBML_ID_STEREOMODE] = 'StereoMode';
1836 $EBMLidList[self::EBML_ID_TAG] = 'Tag';
1837 $EBMLidList[self::EBML_ID_TAGATTACHMENTUID] = 'TagAttachmentUID';
1838 $EBMLidList[self::EBML_ID_TAGBINARY] = 'TagBinary';
1839 $EBMLidList[self::EBML_ID_TAGCHAPTERUID] = 'TagChapterUID';
1840 $EBMLidList[self::EBML_ID_TAGDEFAULT] = 'TagDefault';
1841 $EBMLidList[self::EBML_ID_TAGEDITIONUID] = 'TagEditionUID';
1842 $EBMLidList[self::EBML_ID_TAGLANGUAGE] = 'TagLanguage';
1843 $EBMLidList[self::EBML_ID_TAGNAME] = 'TagName';
1844 $EBMLidList[self::EBML_ID_TAGTRACKUID] = 'TagTrackUID';
1845 $EBMLidList[self::EBML_ID_TAGS] = 'Tags';
1846 $EBMLidList[self::EBML_ID_TAGSTRING] = 'TagString';
1847 $EBMLidList[self::EBML_ID_TARGETS] = 'Targets';
1848 $EBMLidList[self::EBML_ID_TARGETTYPE] = 'TargetType';
1849 $EBMLidList[self::EBML_ID_TARGETTYPEVALUE] = 'TargetTypeValue';
1850 $EBMLidList[self::EBML_ID_TIMECODESCALE] = 'TimecodeScale';
1851 $EBMLidList[self::EBML_ID_TITLE] = 'Title';
1852 $EBMLidList[self::EBML_ID_TRACKENTRY] = 'TrackEntry';
1853 $EBMLidList[self::EBML_ID_TRACKNUMBER] = 'TrackNumber';
1854 $EBMLidList[self::EBML_ID_TRACKOFFSET] = 'TrackOffset';
1855 $EBMLidList[self::EBML_ID_TRACKOVERLAY] = 'TrackOverlay';
1856 $EBMLidList[self::EBML_ID_TRACKS] = 'Tracks';
1857 $EBMLidList[self::EBML_ID_TRACKTIMECODESCALE] = 'TrackTimecodeScale';
1858 $EBMLidList[self::EBML_ID_TRACKTRANSLATE] = 'TrackTranslate';
1859 $EBMLidList[self::EBML_ID_TRACKTRANSLATECODEC] = 'TrackTranslateCodec';
1860 $EBMLidList[self::EBML_ID_TRACKTRANSLATEEDITIONUID] = 'TrackTranslateEditionUID';
1861 $EBMLidList[self::EBML_ID_TRACKTRANSLATETRACKID] = 'TrackTranslateTrackID';
1862 $EBMLidList[self::EBML_ID_TRACKTYPE] = 'TrackType';
1863 $EBMLidList[self::EBML_ID_TRACKUID] = 'TrackUID';
1864 $EBMLidList[self::EBML_ID_VIDEO] = 'Video';
1865 $EBMLidList[self::EBML_ID_VOID] = 'Void';
1866 $EBMLidList[self::EBML_ID_WRITINGAPP] = 'WritingApp';
1867 }
1868
1869 return (isset($EBMLidList[$value]) ? $EBMLidList[$value] : dechex($value));
1870 }

References GetId3\Module\AudioVideo\Matroska\EBML_ID_ASPECTRATIOTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_ATTACHEDFILE, GetId3\Module\AudioVideo\Matroska\EBML_ID_ATTACHMENTLINK, GetId3\Module\AudioVideo\Matroska\EBML_ID_ATTACHMENTS, GetId3\Module\AudioVideo\Matroska\EBML_ID_AUDIO, GetId3\Module\AudioVideo\Matroska\EBML_ID_BITDEPTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHANNELPOSITIONS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHANNELS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPCOUNTRY, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPLANGUAGE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPPROCESS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPPROCESSCODECID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPPROCESSCOMMAND, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPPROCESSDATA, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPPROCESSPRIVATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPPROCESSTIME, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPSTRING, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERATOM, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERDISPLAY, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERFLAGENABLED, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERFLAGHIDDEN, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERPHYSICALEQUIV, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERSEGMENTEDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERSEGMENTUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTIMEEND, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTIMESTART, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRACK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRACKNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRANSLATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRANSLATECODEC, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRANSLATEEDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRANSLATEID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKADDID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKADDITIONAL, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKADDITIONID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKADDITIONS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKDURATION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKGROUP, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKMORE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKVIRTUAL, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERCODECSTATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERDELAY, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERDURATION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERENCRYPTEDBLOCK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERFRAMENUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERLACENUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERPOSITION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERPREVSIZE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERREFERENCEBLOCK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERREFERENCEPRIORITY, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERREFERENCEVIRTUAL, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERSILENTTRACKNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERSILENTTRACKS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERSIMPLEBLOCK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERSLICES, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERTIMECODE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERTIMESLICE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECDECODEALL, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECDOWNLOADURL, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECINFOURL, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECNAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECPRIVATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECSETTINGS, GetId3\Module\AudioVideo\Matroska\EBML_ID_COLOURSPACE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTCOMPALGO, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTCOMPRESSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTCOMPSETTINGS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCALGO, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCKEYID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODING, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODINGORDER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODINGS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODINGSCOPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODINGTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCRYPTION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTSIGALGO, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTSIGHASHALGO, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTSIGKEYID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTSIGNATURE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CRC32, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEBLOCKNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUECLUSTERPOSITION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUECODECSTATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEPOINT, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEREFCLUSTER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEREFCODECSTATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEREFERENCE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEREFNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEREFTIME, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUES, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUETIME, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUETRACK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUETRACKPOSITIONS, GetId3\Module\AudioVideo\Matroska\EBML_ID_DATEUTC, GetId3\Module\AudioVideo\Matroska\EBML_ID_DEFAULTDURATION, GetId3\Module\AudioVideo\Matroska\EBML_ID_DISPLAYHEIGHT, GetId3\Module\AudioVideo\Matroska\EBML_ID_DISPLAYUNIT, GetId3\Module\AudioVideo\Matroska\EBML_ID_DISPLAYWIDTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_DOCTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_DOCTYPEREADVERSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_DOCTYPEVERSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_DURATION, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBML, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBMLMAXIDLENGTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBMLMAXSIZELENGTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBMLREADVERSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBMLVERSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONENTRY, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONFLAGDEFAULT, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONFLAGHIDDEN, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONFLAGORDERED, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEDATA, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEDESCRIPTION, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEMIMETYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILENAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEREFERRAL, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGDEFAULT, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGENABLED, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGFORCED, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGINTERLACED, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGLACING, GetId3\Module\AudioVideo\Matroska\EBML_ID_GAMMAVALUE, GetId3\Module\AudioVideo\Matroska\EBML_ID_INFO, GetId3\Module\AudioVideo\Matroska\EBML_ID_LANGUAGE, GetId3\Module\AudioVideo\Matroska\EBML_ID_MAXBLOCKADDITIONID, GetId3\Module\AudioVideo\Matroska\EBML_ID_MAXCACHE, GetId3\Module\AudioVideo\Matroska\EBML_ID_MINCACHE, GetId3\Module\AudioVideo\Matroska\EBML_ID_MUXINGAPP, GetId3\Module\AudioVideo\Matroska\EBML_ID_NAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_NEXTFILENAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_NEXTUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_OUTPUTSAMPLINGFREQUENCY, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELCROPBOTTOM, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELCROPLEFT, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELCROPRIGHT, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELCROPTOP, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELHEIGHT, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELWIDTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_PREVFILENAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_PREVUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_SAMPLINGFREQUENCY, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEEK, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEEKHEAD, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEEKID, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEEKPOSITION, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEGMENT, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEGMENTFAMILY, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEGMENTFILENAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEGMENTUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_SIMPLETAG, GetId3\Module\AudioVideo\Matroska\EBML_ID_STEREOMODE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAG, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGATTACHMENTUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGBINARY, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGCHAPTERUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGDEFAULT, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGEDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGLANGUAGE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGNAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGS, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGSTRING, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGTRACKUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TARGETS, GetId3\Module\AudioVideo\Matroska\EBML_ID_TARGETTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TARGETTYPEVALUE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TIMECODESCALE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TITLE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKENTRY, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKOFFSET, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKOVERLAY, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKS, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKTIMECODESCALE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKTRANSLATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKTRANSLATECODEC, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKTRANSLATEEDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKTRANSLATETRACKID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_VIDEO, GetId3\Module\AudioVideo\Matroska\EBML_ID_VOID, and GetId3\Module\AudioVideo\Matroska\EBML_ID_WRITINGAPP.

Referenced by GetId3\Module\AudioVideo\Matroska\getEBMLelement(), and GetId3\Module\AudioVideo\Matroska\parseEBML().

+ Here is the caller graph for this function:

◆ EnsureBufferHasEnoughData()

GetId3\Module\AudioVideo\Matroska::EnsureBufferHasEnoughData (   $min_data = 1024)
private
Parameters
type$min_data
Returns
boolean

Definition at line 1261 of file Matroska.php.

1262 {
1263 if (($this->current_offset - $this->EBMLbuffer_offset) >= ($this->EBMLbuffer_length - $min_data)) {
1264
1265 if (!Helper::intValueSupported($this->current_offset + $this->getid3->fread_buffer_size())) {
1266 $this->getid3->info['error'][] = 'EBML parser: cannot read past '.$this->current_offset;
1267
1268 return false;
1269 }
1270
1271 $this->fseek($this->current_offset);
1272 $this->EBMLbuffer_offset = $this->current_offset;
1273 $this->EBMLbuffer = $this->fread(max($min_data, $this->getid3->fread_buffer_size()));
1274 $this->EBMLbuffer_length = strlen($this->EBMLbuffer);
1275
1276 if ($this->EBMLbuffer_length == 0 && $this->feof()) {
1277 $this->getid3->info['error'][] = 'EBML parser: ran out of file at offset '.$this->current_offset;
1278
1279 return false;
1280 }
1281 }
1282
1283 return true;
1284 }
fseek($bytes, $whence=SEEK_SET)
static intValueSupported($num)
@staticvar null $hasINT64
Definition: Helper.php:130

References GetId3\Module\AudioVideo\Matroska\$current_offset, GetId3\Handler\BaseHandler\feof(), GetId3\Handler\BaseHandler\fread(), GetId3\Handler\BaseHandler\fseek(), and GetId3\Lib\Helper\intValueSupported().

Referenced by GetId3\Module\AudioVideo\Matroska\getEBMLelement().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ExtractCommentsSimpleTag()

GetId3\Module\AudioVideo\Matroska::ExtractCommentsSimpleTag (   $SimpleTagArray)
private
Parameters
type$SimpleTagArray
Returns
boolean

Definition at line 1406 of file Matroska.php.

1407 {
1408 if (!empty($SimpleTagArray['SimpleTag'])) {
1409 foreach ($SimpleTagArray['SimpleTag'] as $SimpleTagKey => $SimpleTagData) {
1410 if (!empty($SimpleTagData['TagName']) && !empty($SimpleTagData['TagString'])) {
1411 $this->getid3->info['matroska']['comments'][strtolower($SimpleTagData['TagName'])][] = $SimpleTagData['TagString'];
1412 }
1413 if (!empty($SimpleTagData['SimpleTag'])) {
1414 $this->ExtractCommentsSimpleTag($SimpleTagData);
1415 }
1416 }
1417 }
1418
1419 return true;
1420 }

References GetId3\Module\AudioVideo\Matroska\ExtractCommentsSimpleTag().

Referenced by GetId3\Module\AudioVideo\Matroska\analyze(), and GetId3\Module\AudioVideo\Matroska\ExtractCommentsSimpleTag().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ getDefaultStreamInfo()

static GetId3\Module\AudioVideo\Matroska::getDefaultStreamInfo (   $streams)
staticprivate

Definition at line 1872 of file Matroska.php.

1873 {
1874 foreach (array_reverse($streams) as $stream) {
1875 if ($stream['default']) {
1876 break;
1877 }
1878 }
1879
1880 $unset = array('default', 'name');
1881 foreach ($unset as $u) {
1882 if (isset($stream[$u])) {
1883 unset($stream[$u]);
1884 }
1885 }
1886
1887 $info = $stream;
1888 $info['streams'] = $streams;
1889
1890 return $info;
1891 }

References $info.

Referenced by GetId3\Module\AudioVideo\Matroska\analyze().

+ Here is the caller graph for this function:

◆ getEBMLelement()

GetId3\Module\AudioVideo\Matroska::getEBMLelement ( $element,
  $parent_end,
  $get_data = false 
)
private
Parameters
type$element
type$parent_end
type$get_data
Returns
boolean

Definition at line 1344 of file Matroska.php.

1345 {
1346 if ($this->current_offset >= $parent_end) {
1347 return false;
1348 }
1349
1350 if (!$this->EnsureBufferHasEnoughData()) {
1351 $this->current_offset = PHP_INT_MAX; // do not exit parser right now, allow to finish current loop to gather maximum information
1352
1353 return false;
1354 }
1355
1356 $element = array();
1357
1358 // set offset
1359 $element['offset'] = $this->current_offset;
1360
1361 // get ID
1362 $element['id'] = $this->readEBMLint();
1363
1364 // get name
1365 $element['id_name'] = self::EBMLidName($element['id']);
1366
1367 // get length
1368 $element['length'] = $this->readEBMLint();
1369
1370 // get end offset
1371 $element['end'] = $this->current_offset + $element['length'];
1372
1373 // get raw data
1374 $dont_parse = (in_array($element['id'], $this->unuseful_elements) || $element['id_name'] == dechex($element['id']));
1375 if (($get_data === true || (is_array($get_data) && !in_array($element['id'], $get_data))) && !$dont_parse) {
1376 $element['data'] = $this->readEBMLelementData($element['length'], $element);
1377 }
1378
1379 return true;
1380 }
static EBMLidName($value)
@staticvar array $EBMLidList
Definition: Matroska.php:1674
EnsureBufferHasEnoughData($min_data=1024)
Definition: Matroska.php:1261

References GetId3\Module\AudioVideo\Matroska\$current_offset, GetId3\Module\AudioVideo\Matroska\EBMLidName(), GetId3\Module\AudioVideo\Matroska\EnsureBufferHasEnoughData(), GetId3\Module\AudioVideo\Matroska\readEBMLelementData(), and GetId3\Module\AudioVideo\Matroska\readEBMLint().

Referenced by GetId3\Module\AudioVideo\Matroska\HandleEMBLSimpleTag(), and GetId3\Module\AudioVideo\Matroska\parseEBML().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ HandleEMBLClusterBlock()

GetId3\Module\AudioVideo\Matroska::HandleEMBLClusterBlock (   $element,
  $block_type,
$info 
)
private
Parameters
type$element
type$block_type
type$info
Returns
type http://www.matroska.org/technical/specs/index.html#simpleblock_structure

Definition at line 1466 of file Matroska.php.

1467 {
1468 $block_data = array();
1469 $block_data['tracknumber'] = $this->readEBMLint();
1470 $block_data['timecode'] = Helper::BigEndian2Int($this->readEBMLelementData(2), false, true);
1471 $block_data['flags_raw'] = Helper::BigEndian2Int($this->readEBMLelementData(1));
1472
1473 if ($block_type == self::EBML_ID_CLUSTERSIMPLEBLOCK) {
1474 $block_data['flags']['keyframe'] = (($block_data['flags_raw'] & 0x80) >> 7);
1475 //$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0x70) >> 4);
1476 } else {
1477 //$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0xF0) >> 4);
1478 }
1479 $block_data['flags']['invisible'] = (bool) (($block_data['flags_raw'] & 0x08) >> 3);
1480 $block_data['flags']['lacing'] = (($block_data['flags_raw'] & 0x06) >> 1); // 00=no lacing; 01=Xiph lacing; 11=EBML lacing; 10=fixed-size lacing
1481 if ($block_type == self::EBML_ID_CLUSTERSIMPLEBLOCK) {
1482 $block_data['flags']['discardable'] = (($block_data['flags_raw'] & 0x01));
1483 } else {
1484 //$block_data['flags']['reserved2'] = (($block_data['flags_raw'] & 0x01) >> 0);
1485 }
1486 $block_data['flags']['lacing_type'] = self::MatroskaBlockLacingType($block_data['flags']['lacing']);
1487
1488 // Lace (when lacing bit is set)
1489 if ($block_data['flags']['lacing'] > 0) {
1490 $block_data['lace_frames'] = Helper::BigEndian2Int($this->readEBMLelementData(1)) + 1; // Number of frames in the lace-1 (uint8)
1491 if ($block_data['flags']['lacing'] != 0x02) {
1492 for ($i = 1; $i < $block_data['lace_frames']; $i ++) { // Lace-coded size of each frame of the lace, except for the last one (multiple uint8). *This is not used with Fixed-size lacing as it is calculated automatically from (total size of lace) / (number of frames in lace).
1493 if ($block_data['flags']['lacing'] == 0x03) { // EBML lacing
1494 $block_data['lace_frames_size'][$i] = $this->readEBMLint(); // TODO: read size correctly, calc size for the last frame. For now offsets are deteminded OK with readEBMLint() and that's the most important thing.
1495 } else { // Xiph lacing
1496 $block_data['lace_frames_size'][$i] = 0;
1497 do {
1499 $block_data['lace_frames_size'][$i] += $size;
1500 } while ($size == 255);
1501 }
1502 }
1503 if ($block_data['flags']['lacing'] == 0x01) { // calc size of the last frame only for Xiph lacing, till EBML sizes are now anyway determined incorrectly
1504 $block_data['lace_frames_size'][] = $element['end'] - $this->current_offset - array_sum($block_data['lace_frames_size']);
1505 }
1506 }
1507 }
1508
1509 if (!isset($info['matroska']['track_data_offsets'][$block_data['tracknumber']])) {
1510 $info['matroska']['track_data_offsets'][$block_data['tracknumber']]['offset'] = $this->current_offset;
1511 $info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length'] = $element['end'] - $this->current_offset;
1512 //$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['total_length'] = 0;
1513 }
1514 //$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['total_length'] += $info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length'];
1515 //$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['duration'] = $block_data['timecode'] * ((isset($info['matroska']['info'][0]['TimecodeScale']) ? $info['matroska']['info'][0]['TimecodeScale'] : 1000000) / 1000000000);
1516
1517 // set offset manually
1518 $this->current_offset = $element['end'];
1519
1520 return $block_data;
1521 }
$size
Definition: RandomTest.php:79
static MatroskaBlockLacingType($lacingtype)
@staticvar array $MatroskaBlockLacingType
Definition: Matroska.php:1612

References GetId3\Module\AudioVideo\Matroska\$current_offset, $info, $size, GetId3\Lib\Helper\BigEndian2Int(), GetId3\Module\AudioVideo\Matroska\MatroskaBlockLacingType(), GetId3\Module\AudioVideo\Matroska\readEBMLelementData(), and GetId3\Module\AudioVideo\Matroska\readEBMLint().

Referenced by GetId3\Module\AudioVideo\Matroska\parseEBML().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ HandleEMBLSimpleTag()

GetId3\Module\AudioVideo\Matroska::HandleEMBLSimpleTag (   $parent_end)
private
Parameters
type$parent_end
Returns
type

Definition at line 1427 of file Matroska.php.

1428 {
1429 $simpletag_entry = array();
1430
1431 while ($this->getEBMLelement($element, $parent_end, array(self::EBML_ID_SIMPLETAG))) {
1432 switch ($element['id']) {
1433
1438 $simpletag_entry[$element['id_name']] = $element['data'];
1439 break;
1440
1442 $simpletag_entry[$element['id_name']][] = $this->HandleEMBLSimpleTag($element['end']);
1443 break;
1444
1446 $simpletag_entry[$element['id_name']] = (bool) Helper::BigEndian2Int($element['data']);
1447 break;
1448
1449 default:
1450 $this->unhandledElement('tag.simpletag', __LINE__, $element);
1451 }
1452 }
1453
1454 return $simpletag_entry;
1455 }
unhandledElement($type, $line, $element)
Definition: Matroska.php:1388
getEBMLelement(&$element, $parent_end, $get_data=false)
Definition: Matroska.php:1344

References GetId3\Lib\Helper\BigEndian2Int(), GetId3\Module\AudioVideo\Matroska\EBML_ID_SIMPLETAG, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGBINARY, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGDEFAULT, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGLANGUAGE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGNAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGSTRING, GetId3\Module\AudioVideo\Matroska\getEBMLelement(), GetId3\Module\AudioVideo\Matroska\HandleEMBLSimpleTag(), and GetId3\Module\AudioVideo\Matroska\unhandledElement().

Referenced by GetId3\Module\AudioVideo\Matroska\HandleEMBLSimpleTag(), and GetId3\Module\AudioVideo\Matroska\parseEBML().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ MatroskaBlockLacingType()

static GetId3\Module\AudioVideo\Matroska::MatroskaBlockLacingType (   $lacingtype)
static

@staticvar array $MatroskaBlockLacingType

Parameters
type$lacingtype
Returns
type http://matroska.org/technical/specs/index.html#block_structure

Definition at line 1612 of file Matroska.php.

1613 {
1614 static $MatroskaBlockLacingType = array();
1615 if (empty($MatroskaBlockLacingType)) {
1616 $MatroskaBlockLacingType[0x00] = 'no lacing';
1617 $MatroskaBlockLacingType[0x01] = 'Xiph lacing';
1618 $MatroskaBlockLacingType[0x02] = 'fixed-size lacing';
1619 $MatroskaBlockLacingType[0x03] = 'EBML lacing';
1620 }
1621
1622 return (isset($MatroskaBlockLacingType[$lacingtype]) ? $MatroskaBlockLacingType[$lacingtype] : $lacingtype);
1623 }

Referenced by GetId3\Module\AudioVideo\Matroska\HandleEMBLClusterBlock().

+ Here is the caller graph for this function:

◆ MatroskaCodecIDtoCommonName()

static GetId3\Module\AudioVideo\Matroska::MatroskaCodecIDtoCommonName (   $codecid)
static

@staticvar array $MatroskaCodecIDlist

Parameters
type$codecid
Returns
type http://www.matroska.org/technical/specs/codecid/index.html

Definition at line 1632 of file Matroska.php.

1633 {
1634 static $MatroskaCodecIDlist = array();
1635 if (empty($MatroskaCodecIDlist)) {
1636 $MatroskaCodecIDlist['A_AAC'] = 'aac';
1637 $MatroskaCodecIDlist['A_AAC/MPEG2/LC'] = 'aac';
1638 $MatroskaCodecIDlist['A_AC3'] = 'ac3';
1639 $MatroskaCodecIDlist['A_DTS'] = 'dts';
1640 $MatroskaCodecIDlist['A_FLAC'] = 'flac';
1641 $MatroskaCodecIDlist['A_MPEG/L1'] = 'mp1';
1642 $MatroskaCodecIDlist['A_MPEG/L2'] = 'mp2';
1643 $MatroskaCodecIDlist['A_MPEG/L3'] = 'mp3';
1644 $MatroskaCodecIDlist['A_PCM/INT/LIT'] = 'pcm'; // PCM Integer Little Endian
1645 $MatroskaCodecIDlist['A_PCM/INT/BIG'] = 'pcm'; // PCM Integer Big Endian
1646 $MatroskaCodecIDlist['A_QUICKTIME/QDMC'] = 'quicktime'; // Quicktime: QDesign Music
1647 $MatroskaCodecIDlist['A_QUICKTIME/QDM2'] = 'quicktime'; // Quicktime: QDesign Music v2
1648 $MatroskaCodecIDlist['A_VORBIS'] = 'vorbis';
1649 $MatroskaCodecIDlist['V_MPEG1'] = 'mpeg';
1650 $MatroskaCodecIDlist['V_THEORA'] = 'theora';
1651 $MatroskaCodecIDlist['V_REAL/RV40'] = 'real';
1652 $MatroskaCodecIDlist['V_REAL/RV10'] = 'real';
1653 $MatroskaCodecIDlist['V_REAL/RV20'] = 'real';
1654 $MatroskaCodecIDlist['V_REAL/RV30'] = 'real';
1655 $MatroskaCodecIDlist['V_QUICKTIME'] = 'quicktime'; // Quicktime
1656 $MatroskaCodecIDlist['V_MPEG4/ISO/AP'] = 'mpeg4';
1657 $MatroskaCodecIDlist['V_MPEG4/ISO/ASP'] = 'mpeg4';
1658 $MatroskaCodecIDlist['V_MPEG4/ISO/AVC'] = 'h264';
1659 $MatroskaCodecIDlist['V_MPEG4/ISO/SP'] = 'mpeg4';
1660 $MatroskaCodecIDlist['V_VP8'] = 'vp8';
1661 $MatroskaCodecIDlist['V_MS/VFW/FOURCC'] = 'riff';
1662 $MatroskaCodecIDlist['A_MS/ACM'] = 'riff';
1663 }
1664
1665 return (isset($MatroskaCodecIDlist[$codecid]) ? $MatroskaCodecIDlist[$codecid] : $codecid);
1666 }

Referenced by GetId3\Module\AudioVideo\Matroska\analyze().

+ Here is the caller graph for this function:

◆ MatroskaTargetTypeValue()

static GetId3\Module\AudioVideo\Matroska::MatroskaTargetTypeValue (   $target_type)
static

@staticvar array $MatroskaTargetTypeValue

Parameters
type$target_type
Returns
type http://www.matroska.org/technical/specs/tagging/index.html

Definition at line 1589 of file Matroska.php.

1590 {
1591 static $MatroskaTargetTypeValue = array();
1592 if (empty($MatroskaTargetTypeValue)) {
1593 $MatroskaTargetTypeValue[10] = 'A: ~ V:shot'; // the lowest hierarchy found in music or movies
1594 $MatroskaTargetTypeValue[20] = 'A:subtrack/part/movement ~ V:scene'; // corresponds to parts of a track for audio (like a movement)
1595 $MatroskaTargetTypeValue[30] = 'A:track/song ~ V:chapter'; // the common parts of an album or a movie
1596 $MatroskaTargetTypeValue[40] = 'A:part/session ~ V:part/session'; // when an album or episode has different logical parts
1597 $MatroskaTargetTypeValue[50] = 'A:album/opera/concert ~ V:movie/episode/concert'; // the most common grouping level of music and video (equals to an episode for TV series)
1598 $MatroskaTargetTypeValue[60] = 'A:edition/issue/volume/opus ~ V:season/sequel/volume'; // a list of lower levels grouped together
1599 $MatroskaTargetTypeValue[70] = 'A:collection ~ V:collection'; // the high hierarchy consisting of many different lower items
1600 }
1601
1602 return (isset($MatroskaTargetTypeValue[$target_type]) ? $MatroskaTargetTypeValue[$target_type] : $target_type);
1603 }
$target_type
Definition: goto.php:50

References $target_type.

Referenced by GetId3\Module\AudioVideo\Matroska\parseEBML().

+ Here is the caller graph for this function:

◆ parseEBML()

GetId3\Module\AudioVideo\Matroska::parseEBML ( $info)
private
Parameters
type$info
Returns
type http://www.matroska.org/technical/specs/index.html#EBMLBasics

Definition at line 540 of file Matroska.php.

541 {
542 $this->current_offset = $info['avdataoffset'];
543
544 while ($this->getEBMLelement($top_element, $info['avdataend'])) {
545 switch ($top_element['id']) {
546
548 $info['fileformat'] = 'matroska';
549 $info['matroska']['header']['offset'] = $top_element['offset'];
550 $info['matroska']['header']['length'] = $top_element['length'];
551
552 while ($this->getEBMLelement($element_data, $top_element['end'], true)) {
553 switch ($element_data['id']) {
554
561 $element_data['data'] = Helper::BigEndian2Int($element_data['data']);
562 break;
563
565 $element_data['data'] = Helper::trimNullByte($element_data['data']);
566 $info['matroska']['doctype'] = $element_data['data'];
567 break;
568
569 case self::EBML_ID_CRC32: // not useful, ignore
570 $this->current_offset = $element_data['end'];
571 unset($element_data);
572 break;
573
574 default:
575 $this->unhandledElement('header', __LINE__, $element_data);
576 }
577 if (!empty($element_data)) {
578 unset($element_data['offset'], $element_data['end']);
579 $info['matroska']['header']['elements'][] = $element_data;
580 }
581 }
582 break;
583
585 $info['matroska']['segment'][0]['offset'] = $top_element['offset'];
586 $info['matroska']['segment'][0]['length'] = $top_element['length'];
587
588 while ($this->getEBMLelement($element_data, $top_element['end'])) {
589 if ($element_data['id'] != self::EBML_ID_CLUSTER || !self::$hide_clusters) { // collect clusters only if required
590 $info['matroska']['segments'][] = $element_data;
591 }
592 switch ($element_data['id']) {
593
594 case self::EBML_ID_SEEKHEAD: // Contains the position of other level 1 elements.
595
596 while ($this->getEBMLelement($seek_entry, $element_data['end'])) {
597 switch ($seek_entry['id']) {
598
599 case self::EBML_ID_SEEK: // Contains a single seek entry to an EBML element
600 while ($this->getEBMLelement($sub_seek_entry, $seek_entry['end'], true)) {
601
602 switch ($sub_seek_entry['id']) {
603
605 $seek_entry['target_id'] = self::EBML2Int($sub_seek_entry['data']);
606 $seek_entry['target_name'] = self::EBMLidName($seek_entry['target_id']);
607 break;
608
610 $seek_entry['target_offset'] = $element_data['offset'] + Helper::BigEndian2Int($sub_seek_entry['data']);
611 break;
612
613 default:
614 $this->unhandledElement('seekhead.seek', __LINE__, $sub_seek_entry); }
615 }
616
617 if ($seek_entry['target_id'] != self::EBML_ID_CLUSTER || !self::$hide_clusters) { // collect clusters only if required
618 $info['matroska']['seek'][] = $seek_entry;
619 }
620 break;
621
622 default:
623 $this->unhandledElement('seekhead', __LINE__, $seek_entry);
624 }
625 }
626 break;
627
628 case self::EBML_ID_TRACKS: // A top-level block of information with many tracks described.
629 $info['matroska']['tracks'] = $element_data;
630
631 while ($this->getEBMLelement($track_entry, $element_data['end'])) {
632 switch ($track_entry['id']) {
633
634 case self::EBML_ID_TRACKENTRY: //subelements: Describes a track with all elements.
635
636 while ($this->getEBMLelement($subelement, $track_entry['end'], array(self::EBML_ID_VIDEO, self::EBML_ID_AUDIO, self::EBML_ID_CONTENTENCODINGS))) {
637 switch ($subelement['id']) {
638
645 case self::EBML_ID_DEFAULTDURATION: // nanoseconds per frame
646 $track_entry[$subelement['id_name']] = Helper::BigEndian2Int($subelement['data']);
647 break;
648
650 $track_entry[$subelement['id_name']] = Helper::BigEndian2Float($subelement['data']);
651 break;
652
657 $track_entry[$subelement['id_name']] = Helper::trimNullByte($subelement['data']);
658 break;
659
661 $track_entry[$subelement['id_name']] = $subelement['data'];
662 break;
663
669 $track_entry[$subelement['id_name']] = (bool) Helper::BigEndian2Int($subelement['data']);
670 break;
671
673
674 while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
675 switch ($sub_subelement['id']) {
676
688 $track_entry[$sub_subelement['id_name']] = Helper::BigEndian2Int($sub_subelement['data']);
689 break;
690
692 $track_entry[$sub_subelement['id_name']] = (bool) Helper::BigEndian2Int($sub_subelement['data']);
693 break;
694
696 $track_entry[$sub_subelement['id_name']] = Helper::BigEndian2Float($sub_subelement['data']);
697 break;
698
700 $track_entry[$sub_subelement['id_name']] = Helper::trimNullByte($sub_subelement['data']);
701 break;
702
703 default:
704 $this->unhandledElement('track.video', __LINE__, $sub_subelement);
705 }
706 }
707 break;
708
710
711 while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
712 switch ($sub_subelement['id']) {
713
716 $track_entry[$sub_subelement['id_name']] = Helper::BigEndian2Int($sub_subelement['data']);
717 break;
718
721 $track_entry[$sub_subelement['id_name']] = Helper::BigEndian2Float($sub_subelement['data']);
722 break;
723
725 $track_entry[$sub_subelement['id_name']] = Helper::trimNullByte($sub_subelement['data']);
726 break;
727
728 default:
729 $this->unhandledElement('track.audio', __LINE__, $sub_subelement);
730 }
731 }
732 break;
733
735
736 while ($this->getEBMLelement($sub_subelement, $subelement['end'])) {
737 switch ($sub_subelement['id']) {
738
740
741 while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(self::EBML_ID_CONTENTCOMPRESSION, self::EBML_ID_CONTENTENCRYPTION))) {
742 switch ($sub_sub_subelement['id']) {
743
747 $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']] = Helper::BigEndian2Int($sub_sub_subelement['data']);
748 break;
749
751
752 while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
753 switch ($sub_sub_sub_subelement['id']) {
754
756 $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = Helper::BigEndian2Int($sub_sub_sub_subelement['data']);
757 break;
758
760 $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
761 break;
762
763 default:
764 $this->unhandledElement('track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement);
765 }
766 }
767 break;
768
770
771 while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
772 switch ($sub_sub_sub_subelement['id']) {
773
777 $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = Helper::BigEndian2Int($sub_sub_sub_subelement['data']);
778 break;
779
783 $track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
784 break;
785
786 default:
787 $this->unhandledElement('track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement);
788 }
789 }
790 break;
791
792 default:
793 $this->unhandledElement('track.contentencodings.contentencoding', __LINE__, $sub_sub_subelement);
794 }
795 }
796 break;
797
798 default:
799 $this->unhandledElement('track.contentencodings', __LINE__, $sub_subelement);
800 }
801 }
802 break;
803
804 default:
805 $this->unhandledElement('track', __LINE__, $subelement);
806 }
807 }
808
809 $info['matroska']['tracks']['tracks'][] = $track_entry;
810 break;
811
812 default:
813 $this->unhandledElement('tracks', __LINE__, $track_entry);
814 }
815 }
816 break;
817
818 case self::EBML_ID_INFO: // Contains miscellaneous general information and statistics on the file.
819 $info_entry = array();
820
821 while ($this->getEBMLelement($subelement, $element_data['end'], true)) {
822 switch ($subelement['id']) {
823
825 $info_entry[$subelement['id_name']] = Helper::BigEndian2Int($subelement['data']);
826 break;
827
829 $info_entry[$subelement['id_name']] = Helper::BigEndian2Float($subelement['data']);
830 break;
831
833 $info_entry[$subelement['id_name']] = Helper::BigEndian2Int($subelement['data']);
834 $info_entry[$subelement['id_name'].'_unix'] = self::EBMLdate2unix($info_entry[$subelement['id_name']]);
835 break;
836
840 $info_entry[$subelement['id_name']] = Helper::trimNullByte($subelement['data']);
841 break;
842
844 $info_entry[$subelement['id_name']][] = Helper::trimNullByte($subelement['data']);
845 break;
846
853 $info_entry[$subelement['id_name']] = Helper::trimNullByte($subelement['data']);
854 $info['matroska']['comments'][strtolower($subelement['id_name'])][] = $info_entry[$subelement['id_name']];
855 break;
856
858 $chaptertranslate_entry = array();
859
860 while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
861 switch ($sub_subelement['id']) {
862
864 $chaptertranslate_entry[$sub_subelement['id_name']][] = Helper::BigEndian2Int($sub_subelement['data']);
865 break;
866
868 $chaptertranslate_entry[$sub_subelement['id_name']] = Helper::BigEndian2Int($sub_subelement['data']);
869 break;
870
872 $chaptertranslate_entry[$sub_subelement['id_name']] = Helper::trimNullByte($sub_subelement['data']);
873 break;
874
875 default:
876 $this->unhandledElement('info.chaptertranslate', __LINE__, $sub_subelement);
877 }
878 }
879 $info_entry[$subelement['id_name']] = $chaptertranslate_entry;
880 break;
881
882 default:
883 $this->unhandledElement('info', __LINE__, $subelement);
884 }
885 }
886 $info['matroska']['info'][] = $info_entry;
887 break;
888
889 case self::EBML_ID_CUES: // A top-level element to speed seeking access. All entries are local to the segment. Should be mandatory for non "live" streams.
890 if (self::$hide_clusters) { // do not parse cues if hide clusters is "ON" till they point to clusters anyway
891 $this->current_offset = $element_data['end'];
892 break;
893 }
894 $cues_entry = array();
895
896 while ($this->getEBMLelement($subelement, $element_data['end'])) {
897 switch ($subelement['id']) {
898
900 $cuepoint_entry = array();
901
902 while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(self::EBML_ID_CUETRACKPOSITIONS))) {
903 switch ($sub_subelement['id']) {
904
906 $cuetrackpositions_entry = array();
907
908 while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], true)) {
909 switch ($sub_sub_subelement['id']) {
910
915 $cuetrackpositions_entry[$sub_sub_subelement['id_name']] = Helper::BigEndian2Int($sub_sub_subelement['data']);
916 break;
917
918 default:
919 $this->unhandledElement('cues.cuepoint.cuetrackpositions', __LINE__, $sub_sub_subelement);
920 }
921 }
922 $cuepoint_entry[$sub_subelement['id_name']][] = $cuetrackpositions_entry;
923 break;
924
926 $cuepoint_entry[$sub_subelement['id_name']] = Helper::BigEndian2Int($sub_subelement['data']);
927 break;
928
929 default:
930 $this->unhandledElement('cues.cuepoint', __LINE__, $sub_subelement);
931 }
932 }
933 $cues_entry[] = $cuepoint_entry;
934 break;
935
936 default:
937 $this->unhandledElement('cues', __LINE__, $subelement);
938 }
939 }
940 $info['matroska']['cues'] = $cues_entry;
941 break;
942
943 case self::EBML_ID_TAGS: // Element containing elements specific to Tracks/Chapters.
944 $tags_entry = array();
945
946 while ($this->getEBMLelement($subelement, $element_data['end'], false)) {
947 switch ($subelement['id']) {
948
950 $tag_entry = array();
951
952 while ($this->getEBMLelement($sub_subelement, $subelement['end'], false)) {
953 switch ($sub_subelement['id']) {
954
956 $targets_entry = array();
957
958 while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], true)) {
959 switch ($sub_sub_subelement['id']) {
960
962 $targets_entry[$sub_sub_subelement['id_name']] = Helper::BigEndian2Int($sub_sub_subelement['data']);
963 $targets_entry[strtolower($sub_sub_subelement['id_name']).'_long'] = self::MatroskaTargetTypeValue($targets_entry[$sub_sub_subelement['id_name']]);
964 break;
965
967 $targets_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data'];
968 break;
969
974 $targets_entry[$sub_sub_subelement['id_name']][] = Helper::BigEndian2Int($sub_sub_subelement['data']);
975 break;
976
977 default:
978 $this->unhandledElement('tags.tag.targets', __LINE__, $sub_sub_subelement);
979 }
980 }
981 $tag_entry[$sub_subelement['id_name']] = $targets_entry;
982 break;
983
985 $tag_entry[$sub_subelement['id_name']][] = $this->HandleEMBLSimpleTag($sub_subelement['end']);
986 break;
987
988 default:
989 $this->unhandledElement('tags.tag', __LINE__, $sub_subelement);
990 }
991 }
992 $tags_entry[] = $tag_entry;
993 break;
994
995 default:
996 $this->unhandledElement('tags', __LINE__, $subelement);
997 }
998 }
999 $info['matroska']['tags'] = $tags_entry;
1000 break;
1001
1002 case self::EBML_ID_ATTACHMENTS: // Contain attached files.
1003
1004 while ($this->getEBMLelement($subelement, $element_data['end'])) {
1005 switch ($subelement['id']) {
1006
1008 $attachedfile_entry = array();
1009
1010 while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(self::EBML_ID_FILEDATA))) {
1011 switch ($sub_subelement['id']) {
1012
1016 $attachedfile_entry[$sub_subelement['id_name']] = $sub_subelement['data'];
1017 break;
1018
1020 $attachedfile_entry['data_offset'] = $this->current_offset;
1021 $attachedfile_entry['data_length'] = $sub_subelement['length'];
1022
1023 $this->saveAttachment(
1024 $attachedfile_entry[$sub_subelement['id_name']],
1025 $attachedfile_entry['FileName'],
1026 $attachedfile_entry['data_offset'],
1027 $attachedfile_entry['data_length']);
1028
1029 $this->current_offset = $sub_subelement['end'];
1030 break;
1031
1033 $attachedfile_entry[$sub_subelement['id_name']] = Helper::BigEndian2Int($sub_subelement['data']);
1034 break;
1035
1036 default:
1037 $this->unhandledElement('attachments.attachedfile', __LINE__, $sub_subelement);
1038 }
1039 }
1040 if (!empty($attachedfile_entry['FileData']) && !empty($attachedfile_entry['FileMimeType']) && preg_match('#^image/#i', $attachedfile_entry['FileMimeType'])) {
1041 if ($this->getid3->option_save_attachments === GetId3Core::ATTACHMENTS_INLINE) {
1042 $attachedfile_entry['data'] = $attachedfile_entry['FileData'];
1043 $attachedfile_entry['image_mime'] = $attachedfile_entry['FileMimeType'];
1044 $info['matroska']['comments']['picture'][] = array('data' => $attachedfile_entry['data'], 'image_mime' => $attachedfile_entry['image_mime'], 'filename' => $attachedfile_entry['FileName']);
1045 unset($attachedfile_entry['FileData'], $attachedfile_entry['FileMimeType']);
1046 }
1047 }
1048 if (!empty($attachedfile_entry['image_mime']) && preg_match('#^image/#i', $attachedfile_entry['image_mime'])) {
1049 // don't add a second copy of attached images, which are grouped under the standard location [comments][picture]
1050 } else {
1051 $info['matroska']['attachments'][] = $attachedfile_entry;
1052 }
1053 break;
1054
1055 default:
1056 $this->unhandledElement('attachments', __LINE__, $subelement);
1057 }
1058 }
1059 break;
1060
1062
1063 while ($this->getEBMLelement($subelement, $element_data['end'])) {
1064 switch ($subelement['id']) {
1065
1067 $editionentry_entry = array();
1068
1069 while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(self::EBML_ID_CHAPTERATOM))) {
1070 switch ($sub_subelement['id']) {
1071
1073 $editionentry_entry[$sub_subelement['id_name']] = Helper::BigEndian2Int($sub_subelement['data']);
1074 break;
1075
1079 $editionentry_entry[$sub_subelement['id_name']] = (bool) Helper::BigEndian2Int($sub_subelement['data']);
1080 break;
1081
1083 $chapteratom_entry = array();
1084
1085 while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(self::EBML_ID_CHAPTERTRACK, self::EBML_ID_CHAPTERDISPLAY))) {
1086 switch ($sub_sub_subelement['id']) {
1087
1090 $chapteratom_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data'];
1091 break;
1092
1095 $chapteratom_entry[$sub_sub_subelement['id_name']] = (bool) Helper::BigEndian2Int($sub_sub_subelement['data']);
1096 break;
1097
1101 $chapteratom_entry[$sub_sub_subelement['id_name']] = Helper::BigEndian2Int($sub_sub_subelement['data']);
1102 break;
1103
1105 $chaptertrack_entry = array();
1106
1107 while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
1108 switch ($sub_sub_sub_subelement['id']) {
1109
1111 $chaptertrack_entry[$sub_sub_sub_subelement['id_name']] = Helper::BigEndian2Int($sub_sub_sub_subelement['data']);
1112 break;
1113
1114 default:
1115 $this->unhandledElement('chapters.editionentry.chapteratom.chaptertrack', __LINE__, $sub_sub_sub_subelement);
1116 }
1117 }
1118 $chapteratom_entry[$sub_sub_subelement['id_name']][] = $chaptertrack_entry;
1119 break;
1120
1122 $chapterdisplay_entry = array();
1123
1124 while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
1125 switch ($sub_sub_sub_subelement['id']) {
1126
1130 $chapterdisplay_entry[$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
1131 break;
1132
1133 default:
1134 $this->unhandledElement('chapters.editionentry.chapteratom.chapterdisplay', __LINE__, $sub_sub_sub_subelement);
1135 }
1136 }
1137 $chapteratom_entry[$sub_sub_subelement['id_name']][] = $chapterdisplay_entry;
1138 break;
1139
1140 default:
1141 $this->unhandledElement('chapters.editionentry.chapteratom', __LINE__, $sub_sub_subelement);
1142 }
1143 }
1144 $editionentry_entry[$sub_subelement['id_name']][] = $chapteratom_entry;
1145 break;
1146
1147 default:
1148 $this->unhandledElement('chapters.editionentry', __LINE__, $sub_subelement);
1149 }
1150 }
1151 $info['matroska']['chapters'][] = $editionentry_entry;
1152 break;
1153
1154 default:
1155 $this->unhandledElement('chapters', __LINE__, $subelement);
1156 }
1157 }
1158 break;
1159
1160 case self::EBML_ID_CLUSTER: // The lower level element containing the (monolithic) Block structure.
1161 $cluster_entry = array();
1162
1163 while ($this->getEBMLelement($subelement, $element_data['end'], array(self::EBML_ID_CLUSTERSILENTTRACKS, self::EBML_ID_CLUSTERBLOCKGROUP, self::EBML_ID_CLUSTERSIMPLEBLOCK))) {
1164 switch ($subelement['id']) {
1165
1169 $cluster_entry[$subelement['id_name']] = Helper::BigEndian2Int($subelement['data']);
1170 break;
1171
1173 $cluster_silent_tracks = array();
1174
1175 while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
1176 switch ($sub_subelement['id']) {
1177
1179 $cluster_silent_tracks[] = Helper::BigEndian2Int($sub_subelement['data']);
1180 break;
1181
1182 default:
1183 $this->unhandledElement('cluster.silenttracks', __LINE__, $sub_subelement);
1184 }
1185 }
1186 $cluster_entry[$subelement['id_name']][] = $cluster_silent_tracks;
1187 break;
1188
1190 $cluster_block_group = array('offset' => $this->current_offset);
1191
1192 while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(self::EBML_ID_CLUSTERBLOCK))) {
1193 switch ($sub_subelement['id']) {
1194
1196 $cluster_block_group[$sub_subelement['id_name']] = $this->HandleEMBLClusterBlock($sub_subelement, self::EBML_ID_CLUSTERBLOCK, $info);
1197 break;
1198
1199 case self::EBML_ID_CLUSTERREFERENCEPRIORITY: // unsigned-int
1200 case self::EBML_ID_CLUSTERBLOCKDURATION: // unsigned-int
1201 $cluster_block_group[$sub_subelement['id_name']] = Helper::BigEndian2Int($sub_subelement['data']);
1202 break;
1203
1204 case self::EBML_ID_CLUSTERREFERENCEBLOCK: // signed-int
1205 $cluster_block_group[$sub_subelement['id_name']][] = Helper::BigEndian2Int($sub_subelement['data'], false, true);
1206 break;
1207
1209 $cluster_block_group[$sub_subelement['id_name']] = Helper::trimNullByte($sub_subelement['data']);
1210 break;
1211
1212 default:
1213 $this->unhandledElement('clusters.blockgroup', __LINE__, $sub_subelement);
1214 }
1215 }
1216 $cluster_entry[$subelement['id_name']][] = $cluster_block_group;
1217 break;
1218
1220 $cluster_entry[$subelement['id_name']][] = $this->HandleEMBLClusterBlock($subelement, self::EBML_ID_CLUSTERSIMPLEBLOCK, $info);
1221 break;
1222
1223 default:
1224 $this->unhandledElement('cluster', __LINE__, $subelement);
1225 }
1226 $this->current_offset = $subelement['end'];
1227 }
1228 if (!self::$hide_clusters) {
1229 $info['matroska']['cluster'][] = $cluster_entry;
1230 }
1231
1232 // check to see if all the data we need exists already, if so, break out of the loop
1233 if (!self::$parse_whole_file) {
1234 if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) {
1235 if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) {
1236 if (count($info['matroska']['track_data_offsets']) == count($info['matroska']['tracks']['tracks'])) {
1237 return;
1238 }
1239 }
1240 }
1241 }
1242 break;
1243
1244 default:
1245 $this->unhandledElement('segment', __LINE__, $element_data);
1246 }
1247 }
1248 break;
1249
1250 default:
1251 $this->unhandledElement('root', __LINE__, $top_element);
1252 }
1253 }
1254 }
const ATTACHMENTS_INLINE
Definition: GetId3Core.php:65
saveAttachment(&$ThisFileInfoIndex, $filename, $offset, $length)
static trimNullByte($string)
Definition: Helper.php:1811
static BigEndian2Float($byteword)
ANSI/IEEE Standard 754-1985, Standard for Binary Floating Point Arithmetic.
Definition: Helper.php:290
static EBMLdate2unix($EBMLdatestamp)
Definition: Matroska.php:1575
HandleEMBLClusterBlock($element, $block_type, &$info)
Definition: Matroska.php:1466
static EBML2Int($EBMLstring)
Definition: Matroska.php:1529
static MatroskaTargetTypeValue($target_type)
@staticvar array $MatroskaTargetTypeValue
Definition: Matroska.php:1589

References GetId3\Module\AudioVideo\Matroska\$current_offset, $info, GetId3\GetId3Core\ATTACHMENTS_INLINE, GetId3\Lib\Helper\BigEndian2Float(), GetId3\Lib\Helper\BigEndian2Int(), GetId3\Module\AudioVideo\Matroska\EBML2Int(), GetId3\Module\AudioVideo\Matroska\EBML_ID_ASPECTRATIOTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_ATTACHEDFILE, GetId3\Module\AudioVideo\Matroska\EBML_ID_ATTACHMENTS, GetId3\Module\AudioVideo\Matroska\EBML_ID_AUDIO, GetId3\Module\AudioVideo\Matroska\EBML_ID_BITDEPTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHANNELPOSITIONS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHANNELS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPCOUNTRY, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPLANGUAGE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPSTRING, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERATOM, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERDISPLAY, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERFLAGENABLED, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERFLAGHIDDEN, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERSEGMENTEDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERSEGMENTUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTIMEEND, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTIMESTART, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRACK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRACKNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRANSLATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRANSLATECODEC, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRANSLATEEDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERTRANSLATEID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CHAPTERUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKDURATION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERBLOCKGROUP, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERCODECSTATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERPOSITION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERPREVSIZE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERREFERENCEBLOCK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERREFERENCEPRIORITY, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERSILENTTRACKNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERSILENTTRACKS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERSIMPLEBLOCK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CLUSTERTIMECODE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECDECODEALL, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECNAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_CODECPRIVATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_COLOURSPACE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTCOMPALGO, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTCOMPRESSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTCOMPSETTINGS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCALGO, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCKEYID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODING, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODINGORDER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODINGS, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODINGSCOPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCODINGTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTENCRYPTION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTSIGALGO, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTSIGHASHALGO, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTSIGKEYID, GetId3\Module\AudioVideo\Matroska\EBML_ID_CONTENTSIGNATURE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CRC32, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEBLOCKNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUECLUSTERPOSITION, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUECODECSTATE, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUEPOINT, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUES, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUETIME, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUETRACK, GetId3\Module\AudioVideo\Matroska\EBML_ID_CUETRACKPOSITIONS, GetId3\Module\AudioVideo\Matroska\EBML_ID_DATEUTC, GetId3\Module\AudioVideo\Matroska\EBML_ID_DEFAULTDURATION, GetId3\Module\AudioVideo\Matroska\EBML_ID_DISPLAYHEIGHT, GetId3\Module\AudioVideo\Matroska\EBML_ID_DISPLAYUNIT, GetId3\Module\AudioVideo\Matroska\EBML_ID_DISPLAYWIDTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_DOCTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_DOCTYPEREADVERSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_DOCTYPEVERSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_DURATION, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBML, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBMLMAXIDLENGTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBMLMAXSIZELENGTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBMLREADVERSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_EBMLVERSION, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONENTRY, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONFLAGDEFAULT, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONFLAGHIDDEN, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONFLAGORDERED, GetId3\Module\AudioVideo\Matroska\EBML_ID_EDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEDATA, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEDESCRIPTION, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEMIMETYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILENAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_FILEUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGDEFAULT, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGENABLED, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGFORCED, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGINTERLACED, GetId3\Module\AudioVideo\Matroska\EBML_ID_FLAGLACING, GetId3\Module\AudioVideo\Matroska\EBML_ID_GAMMAVALUE, GetId3\Module\AudioVideo\Matroska\EBML_ID_INFO, GetId3\Module\AudioVideo\Matroska\EBML_ID_LANGUAGE, GetId3\Module\AudioVideo\Matroska\EBML_ID_MAXBLOCKADDITIONID, GetId3\Module\AudioVideo\Matroska\EBML_ID_MAXCACHE, GetId3\Module\AudioVideo\Matroska\EBML_ID_MINCACHE, GetId3\Module\AudioVideo\Matroska\EBML_ID_MUXINGAPP, GetId3\Module\AudioVideo\Matroska\EBML_ID_NAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_NEXTFILENAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_NEXTUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_OUTPUTSAMPLINGFREQUENCY, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELCROPBOTTOM, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELCROPLEFT, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELCROPRIGHT, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELCROPTOP, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELHEIGHT, GetId3\Module\AudioVideo\Matroska\EBML_ID_PIXELWIDTH, GetId3\Module\AudioVideo\Matroska\EBML_ID_PREVFILENAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_PREVUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_SAMPLINGFREQUENCY, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEEK, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEEKHEAD, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEEKID, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEEKPOSITION, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEGMENT, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEGMENTFAMILY, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEGMENTFILENAME, GetId3\Module\AudioVideo\Matroska\EBML_ID_SEGMENTUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_SIMPLETAG, GetId3\Module\AudioVideo\Matroska\EBML_ID_STEREOMODE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAG, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGATTACHMENTUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGCHAPTERUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGEDITIONUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGS, GetId3\Module\AudioVideo\Matroska\EBML_ID_TAGTRACKUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_TARGETS, GetId3\Module\AudioVideo\Matroska\EBML_ID_TARGETTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TARGETTYPEVALUE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TIMECODESCALE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TITLE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKENTRY, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKNUMBER, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKS, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKTIMECODESCALE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKTYPE, GetId3\Module\AudioVideo\Matroska\EBML_ID_TRACKUID, GetId3\Module\AudioVideo\Matroska\EBML_ID_VIDEO, GetId3\Module\AudioVideo\Matroska\EBML_ID_WRITINGAPP, GetId3\Module\AudioVideo\Matroska\EBMLdate2unix(), GetId3\Module\AudioVideo\Matroska\EBMLidName(), GetId3\Module\AudioVideo\Matroska\getEBMLelement(), GetId3\Module\AudioVideo\Matroska\HandleEMBLClusterBlock(), GetId3\Module\AudioVideo\Matroska\HandleEMBLSimpleTag(), GetId3\Module\AudioVideo\Matroska\MatroskaTargetTypeValue(), GetId3\Handler\BaseHandler\saveAttachment(), GetId3\Lib\Helper\trimNullByte(), and GetId3\Module\AudioVideo\Matroska\unhandledElement().

Referenced by GetId3\Module\AudioVideo\Matroska\analyze().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ readEBMLelementData()

GetId3\Module\AudioVideo\Matroska::readEBMLelementData (   $length)
private
Parameters
type$length
Returns
type

Definition at line 1329 of file Matroska.php.

1330 {
1331 $data = substr($this->EBMLbuffer, $this->current_offset - $this->EBMLbuffer_offset, $length);
1332 $this->current_offset += $length;
1333
1334 return $data;
1335 }

References $data.

Referenced by GetId3\Module\AudioVideo\Matroska\getEBMLelement(), and GetId3\Module\AudioVideo\Matroska\HandleEMBLClusterBlock().

+ Here is the caller graph for this function:

◆ readEBMLint()

GetId3\Module\AudioVideo\Matroska::readEBMLint ( )
private
Returns
type
Exceptions
Exception

Definition at line 1291 of file Matroska.php.

1292 {
1293 $actual_offset = $this->current_offset - $this->EBMLbuffer_offset;
1294
1295 // get length of integer
1296 $first_byte_int = ord($this->EBMLbuffer[$actual_offset]);
1297 if (0x80 & $first_byte_int) {
1298 $length = 1;
1299 } elseif (0x40 & $first_byte_int) {
1300 $length = 2;
1301 } elseif (0x20 & $first_byte_int) {
1302 $length = 3;
1303 } elseif (0x10 & $first_byte_int) {
1304 $length = 4;
1305 } elseif (0x08 & $first_byte_int) {
1306 $length = 5;
1307 } elseif (0x04 & $first_byte_int) {
1308 $length = 6;
1309 } elseif (0x02 & $first_byte_int) {
1310 $length = 7;
1311 } elseif (0x01 & $first_byte_int) {
1312 $length = 8;
1313 } else {
1314 throw new DefaultException('invalid EBML integer (leading 0x00) at '.$this->current_offset);
1315 }
1316
1317 // read
1318 $int_value = self::EBML2Int(substr($this->EBMLbuffer, $actual_offset, $length));
1319 $this->current_offset += $length;
1320
1321 return $int_value;
1322 }

References GetId3\Module\AudioVideo\Matroska\$EBMLbuffer_offset, and GetId3\Module\AudioVideo\Matroska\EBML2Int().

Referenced by GetId3\Module\AudioVideo\Matroska\getEBMLelement(), and GetId3\Module\AudioVideo\Matroska\HandleEMBLClusterBlock().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ unhandledElement()

GetId3\Module\AudioVideo\Matroska::unhandledElement (   $type,
  $line,
  $element 
)
private
Parameters
type$type
type$line
type$element

Definition at line 1388 of file Matroska.php.

1389 {
1390 // warn only about unknown and missed elements, not about unuseful
1391 if (!in_array($element['id'], $this->unuseful_elements)) {
1392 $this->getid3->warning('Unhandled '.$type.' element ['.basename(__FILE__).':'.$line.'] ('.$element['id'].'::'.$element['id_name'].' ['.$element['length'].' bytes]) at '.$element['offset']);
1393 }
1394
1395 // increase offset for unparsed elements
1396 if (!isset($element['data'])) {
1397 $this->current_offset = $element['end'];
1398 }
1399 }

Referenced by GetId3\Module\AudioVideo\Matroska\HandleEMBLSimpleTag(), and GetId3\Module\AudioVideo\Matroska\parseEBML().

+ Here is the caller graph for this function:

Field Documentation

◆ $current_offset

◆ $EBMLbuffer

GetId3\Module\AudioVideo\Matroska::$EBMLbuffer = ''
private

Definition at line 242 of file Matroska.php.

◆ $EBMLbuffer_length

GetId3\Module\AudioVideo\Matroska::$EBMLbuffer_length = 0
private

Definition at line 252 of file Matroska.php.

◆ $EBMLbuffer_offset

GetId3\Module\AudioVideo\Matroska::$EBMLbuffer_offset = 0
private

Definition at line 247 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\readEBMLint().

◆ $hide_clusters

GetId3\Module\AudioVideo\Matroska::$hide_clusters = true
static

Definition at line 230 of file Matroska.php.

◆ $parse_whole_file

GetId3\Module\AudioVideo\Matroska::$parse_whole_file = false
static

Definition at line 235 of file Matroska.php.

◆ $unuseful_elements

GetId3\Module\AudioVideo\Matroska::$unuseful_elements = array(self::EBML_ID_CRC32, self::EBML_ID_VOID)
private

Definition at line 262 of file Matroska.php.

◆ EBML_ID_ASPECTRATIOTYPE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_ASPECTRATIOTYPE = 0x14B3

◆ EBML_ID_ATTACHEDFILE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_ATTACHEDFILE = 0x21A7

◆ EBML_ID_ATTACHMENTLINK

const GetId3\Module\AudioVideo\Matroska::EBML_ID_ATTACHMENTLINK = 0x3446

Definition at line 161 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_ATTACHMENTS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_ATTACHMENTS = 0x0941A469

◆ EBML_ID_AUDIO

const GetId3\Module\AudioVideo\Matroska::EBML_ID_AUDIO = 0x61

◆ EBML_ID_BITDEPTH

const GetId3\Module\AudioVideo\Matroska::EBML_ID_BITDEPTH = 0x2264

◆ EBML_ID_CHANNELPOSITIONS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHANNELPOSITIONS = 0x347B

◆ EBML_ID_CHANNELS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHANNELS = 0x1F

◆ EBML_ID_CHAPCOUNTRY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPCOUNTRY = 0x037E

◆ EBML_ID_CHAPLANGUAGE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPLANGUAGE = 0x037C

◆ EBML_ID_CHAPPROCESS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPPROCESS = 0x2944

Definition at line 145 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CHAPPROCESSCODECID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPPROCESSCODECID = 0x2955

Definition at line 146 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CHAPPROCESSCOMMAND

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPPROCESSCOMMAND = 0x2911

Definition at line 141 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CHAPPROCESSDATA

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPPROCESSDATA = 0x2933

Definition at line 144 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CHAPPROCESSPRIVATE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPPROCESSPRIVATE = 0x050D

Definition at line 77 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CHAPPROCESSTIME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPPROCESSTIME = 0x2922

Definition at line 142 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CHAPSTRING

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPSTRING = 0x05

◆ EBML_ID_CHAPTERATOM

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERATOM = 0x36

◆ EBML_ID_CHAPTERDISPLAY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERDISPLAY = 0x00

◆ EBML_ID_CHAPTERFLAGENABLED

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERFLAGENABLED = 0x0598

◆ EBML_ID_CHAPTERFLAGHIDDEN

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERFLAGHIDDEN = 0x18

◆ EBML_ID_CHAPTERPHYSICALEQUIV

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERPHYSICALEQUIV = 0x23C3

Definition at line 129 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CHAPTERS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERS = 0x0043A770

◆ EBML_ID_CHAPTERSEGMENTEDITIONUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERSEGMENTEDITIONUID = 0x2EBC

◆ EBML_ID_CHAPTERSEGMENTUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERSEGMENTUID = 0x2E67

◆ EBML_ID_CHAPTERTIMEEND

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERTIMEEND = 0x12

◆ EBML_ID_CHAPTERTIMESTART

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERTIMESTART = 0x11

◆ EBML_ID_CHAPTERTRACK

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERTRACK = 0x0F

◆ EBML_ID_CHAPTERTRACKNUMBER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERTRACKNUMBER = 0x09

◆ EBML_ID_CHAPTERTRANSLATE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERTRANSLATE = 0x2924

◆ EBML_ID_CHAPTERTRANSLATECODEC

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERTRANSLATECODEC = 0x29BF

◆ EBML_ID_CHAPTERTRANSLATEEDITIONUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERTRANSLATEEDITIONUID = 0x29FC

◆ EBML_ID_CHAPTERTRANSLATEID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERTRANSLATEID = 0x29A5

◆ EBML_ID_CHAPTERUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CHAPTERUID = 0x33C4

◆ EBML_ID_CLUSTER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTER = 0x0F43B675

◆ EBML_ID_CLUSTERBLOCK

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCK = 0x21

◆ EBML_ID_CLUSTERBLOCKADDID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCKADDID = 0x6E

Definition at line 218 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERBLOCKADDITIONAL

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCKADDITIONAL = 0x25

Definition at line 188 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERBLOCKADDITIONID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCKADDITIONID = 0x4B

Definition at line 204 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERBLOCKADDITIONS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCKADDITIONS = 0x35A1

Definition at line 162 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERBLOCKDURATION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCKDURATION = 0x1B

◆ EBML_ID_CLUSTERBLOCKGROUP

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCKGROUP = 0x20

◆ EBML_ID_CLUSTERBLOCKMORE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCKMORE = 0x26

Definition at line 189 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERBLOCKVIRTUAL

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERBLOCKVIRTUAL = 0x22

Definition at line 185 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERCODECSTATE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERCODECSTATE = 0x24

◆ EBML_ID_CLUSTERDELAY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERDELAY = 0x4E

Definition at line 207 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERDURATION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERDURATION = 0x4F

Definition at line 208 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERENCRYPTEDBLOCK

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERENCRYPTEDBLOCK = 0x2F

Definition at line 194 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERFRAMENUMBER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERFRAMENUMBER = 0x4D

Definition at line 206 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERLACENUMBER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERLACENUMBER = 0x4C

Definition at line 205 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERPOSITION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERPOSITION = 0x27

◆ EBML_ID_CLUSTERPREVSIZE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERPREVSIZE = 0x2B

◆ EBML_ID_CLUSTERREFERENCEBLOCK

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERREFERENCEBLOCK = 0x7B

◆ EBML_ID_CLUSTERREFERENCEPRIORITY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERREFERENCEPRIORITY = 0x7A

◆ EBML_ID_CLUSTERREFERENCEVIRTUAL

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERREFERENCEVIRTUAL = 0x7D

Definition at line 223 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERSILENTTRACKNUMBER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERSILENTTRACKNUMBER = 0x18D7

◆ EBML_ID_CLUSTERSILENTTRACKS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERSILENTTRACKS = 0x1854

◆ EBML_ID_CLUSTERSIMPLEBLOCK

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERSIMPLEBLOCK = 0x23

◆ EBML_ID_CLUSTERSLICES

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERSLICES = 0x0E

Definition at line 172 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CLUSTERTIMECODE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERTIMECODE = 0x67

◆ EBML_ID_CLUSTERTIMESLICE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CLUSTERTIMESLICE = 0x68

Definition at line 213 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CODECDECODEALL

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CODECDECODEALL = 0x2A

◆ EBML_ID_CODECDOWNLOADURL

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CODECDOWNLOADURL = 0x06B240

Definition at line 49 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CODECID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CODECID = 0x06

◆ EBML_ID_CODECINFOURL

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CODECINFOURL = 0x1B4040

Definition at line 54 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CODECNAME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CODECNAME = 0x058688

◆ EBML_ID_CODECPRIVATE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CODECPRIVATE = 0x23A2

◆ EBML_ID_CODECSETTINGS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CODECSETTINGS = 0x1A9697

Definition at line 53 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_COLOURSPACE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_COLOURSPACE = 0x0EB524

◆ EBML_ID_CONTENTCOMPALGO

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTCOMPALGO = 0x0254

◆ EBML_ID_CONTENTCOMPRESSION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTCOMPRESSION = 0x1034

◆ EBML_ID_CONTENTCOMPSETTINGS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTCOMPSETTINGS = 0x0255

◆ EBML_ID_CONTENTENCALGO

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTENCALGO = 0x07E1

◆ EBML_ID_CONTENTENCKEYID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTENCKEYID = 0x07E2

◆ EBML_ID_CONTENTENCODING

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTENCODING = 0x2240

◆ EBML_ID_CONTENTENCODINGORDER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTENCODINGORDER = 0x1031

◆ EBML_ID_CONTENTENCODINGS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTENCODINGS = 0x2D80

◆ EBML_ID_CONTENTENCODINGSCOPE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTENCODINGSCOPE = 0x1032

◆ EBML_ID_CONTENTENCODINGTYPE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTENCODINGTYPE = 0x1033

◆ EBML_ID_CONTENTENCRYPTION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTENCRYPTION = 0x1035

◆ EBML_ID_CONTENTSIGALGO

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTSIGALGO = 0x07E5

◆ EBML_ID_CONTENTSIGHASHALGO

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTSIGHASHALGO = 0x07E6

◆ EBML_ID_CONTENTSIGKEYID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTSIGKEYID = 0x07E4

◆ EBML_ID_CONTENTSIGNATURE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CONTENTSIGNATURE = 0x07E3

◆ EBML_ID_CRC32

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CRC32 = 0x3F

◆ EBML_ID_CUEBLOCKNUMBER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUEBLOCKNUMBER = 0x1378

◆ EBML_ID_CUECLUSTERPOSITION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUECLUSTERPOSITION = 0x71

◆ EBML_ID_CUECODECSTATE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUECODECSTATE = 0x6A

◆ EBML_ID_CUEPOINT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUEPOINT = 0x3B

◆ EBML_ID_CUEREFCLUSTER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUEREFCLUSTER = 0x17

Definition at line 177 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CUEREFCODECSTATE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUEREFCODECSTATE = 0x6B

Definition at line 215 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CUEREFERENCE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUEREFERENCE = 0x5B

Definition at line 210 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CUEREFNUMBER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUEREFNUMBER = 0x135F

Definition at line 104 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CUEREFTIME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUEREFTIME = 0x16

Definition at line 176 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_CUES

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUES = 0x0C53BB6B

◆ EBML_ID_CUETIME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUETIME = 0x33

◆ EBML_ID_CUETRACK

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUETRACK = 0x77

◆ EBML_ID_CUETRACKPOSITIONS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_CUETRACKPOSITIONS = 0x37

◆ EBML_ID_DATEUTC

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DATEUTC = 0x0461

◆ EBML_ID_DEFAULTDURATION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DEFAULTDURATION = 0x03E383

◆ EBML_ID_DISPLAYHEIGHT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DISPLAYHEIGHT = 0x14BA

◆ EBML_ID_DISPLAYUNIT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DISPLAYUNIT = 0x14B2

◆ EBML_ID_DISPLAYWIDTH

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DISPLAYWIDTH = 0x14B0

◆ EBML_ID_DOCTYPE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DOCTYPE = 0x0282

◆ EBML_ID_DOCTYPEREADVERSION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DOCTYPEREADVERSION = 0x0285

◆ EBML_ID_DOCTYPEVERSION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DOCTYPEVERSION = 0x0287

◆ EBML_ID_DURATION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_DURATION = 0x0489

◆ EBML_ID_EBML

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EBML = 0x0A45DFA3

◆ EBML_ID_EBMLMAXIDLENGTH

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EBMLMAXIDLENGTH = 0x02F2

◆ EBML_ID_EBMLMAXSIZELENGTH

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EBMLMAXSIZELENGTH = 0x02F3

◆ EBML_ID_EBMLREADVERSION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EBMLREADVERSION = 0x02F7

◆ EBML_ID_EBMLVERSION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EBMLVERSION = 0x0286

◆ EBML_ID_EDITIONENTRY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EDITIONENTRY = 0x05B9

◆ EBML_ID_EDITIONFLAGDEFAULT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EDITIONFLAGDEFAULT = 0x05DB

◆ EBML_ID_EDITIONFLAGHIDDEN

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EDITIONFLAGHIDDEN = 0x05BD

◆ EBML_ID_EDITIONFLAGORDERED

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EDITIONFLAGORDERED = 0x05DD

◆ EBML_ID_EDITIONUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_EDITIONUID = 0x05BC

◆ EBML_ID_FILEDATA

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FILEDATA = 0x065C

◆ EBML_ID_FILEDESCRIPTION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FILEDESCRIPTION = 0x067E

◆ EBML_ID_FILEMIMETYPE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FILEMIMETYPE = 0x0660

◆ EBML_ID_FILENAME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FILENAME = 0x066E

◆ EBML_ID_FILEREFERRAL

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FILEREFERRAL = 0x0675

Definition at line 88 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_FILEUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FILEUID = 0x06AE

◆ EBML_ID_FLAGDEFAULT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FLAGDEFAULT = 0x08

◆ EBML_ID_FLAGENABLED

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FLAGENABLED = 0x39

◆ EBML_ID_FLAGFORCED

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FLAGFORCED = 0x15AA

◆ EBML_ID_FLAGINTERLACED

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FLAGINTERLACED = 0x1A

◆ EBML_ID_FLAGLACING

const GetId3\Module\AudioVideo\Matroska::EBML_ID_FLAGLACING = 0x1C

◆ EBML_ID_GAMMAVALUE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_GAMMAVALUE = 0x0FB523

◆ EBML_ID_INFO

const GetId3\Module\AudioVideo\Matroska::EBML_ID_INFO = 0x0549A966

◆ EBML_ID_LANGUAGE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_LANGUAGE = 0x02B59C

◆ EBML_ID_MAXBLOCKADDITIONID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_MAXBLOCKADDITIONID = 0x15EE

◆ EBML_ID_MAXCACHE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_MAXCACHE = 0x2DF8

◆ EBML_ID_MINCACHE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_MINCACHE = 0x2DE7

◆ EBML_ID_MUXINGAPP

const GetId3\Module\AudioVideo\Matroska::EBML_ID_MUXINGAPP = 0x0D80

◆ EBML_ID_NAME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_NAME = 0x136E

◆ EBML_ID_NEXTFILENAME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_NEXTFILENAME = 0x1E83BB

◆ EBML_ID_NEXTUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_NEXTUID = 0x1EB923

◆ EBML_ID_OUTPUTSAMPLINGFREQUENCY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_OUTPUTSAMPLINGFREQUENCY = 0x38B5

◆ EBML_ID_PIXELCROPBOTTOM

const GetId3\Module\AudioVideo\Matroska::EBML_ID_PIXELCROPBOTTOM = 0x14AA

◆ EBML_ID_PIXELCROPLEFT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_PIXELCROPLEFT = 0x14CC

◆ EBML_ID_PIXELCROPRIGHT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_PIXELCROPRIGHT = 0x14DD

◆ EBML_ID_PIXELCROPTOP

const GetId3\Module\AudioVideo\Matroska::EBML_ID_PIXELCROPTOP = 0x14BB

◆ EBML_ID_PIXELHEIGHT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_PIXELHEIGHT = 0x3A

◆ EBML_ID_PIXELWIDTH

const GetId3\Module\AudioVideo\Matroska::EBML_ID_PIXELWIDTH = 0x30

◆ EBML_ID_PREVFILENAME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_PREVFILENAME = 0x1C83AB

◆ EBML_ID_PREVUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_PREVUID = 0x1CB923

◆ EBML_ID_SAMPLINGFREQUENCY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SAMPLINGFREQUENCY = 0x35

◆ EBML_ID_SEEK

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SEEK = 0x0DBB

◆ EBML_ID_SEEKHEAD

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SEEKHEAD = 0x014D9B74

◆ EBML_ID_SEEKID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SEEKID = 0x13AB

◆ EBML_ID_SEEKPOSITION

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SEEKPOSITION = 0x13AC

◆ EBML_ID_SEGMENT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SEGMENT = 0x08538067

◆ EBML_ID_SEGMENTFAMILY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SEGMENTFAMILY = 0x0444

◆ EBML_ID_SEGMENTFILENAME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SEGMENTFILENAME = 0x3384

◆ EBML_ID_SEGMENTUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SEGMENTUID = 0x33A4

◆ EBML_ID_SIMPLETAG

const GetId3\Module\AudioVideo\Matroska::EBML_ID_SIMPLETAG = 0x27C8

◆ EBML_ID_STEREOMODE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_STEREOMODE = 0x13B8

◆ EBML_ID_TAG

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAG = 0x3373

◆ EBML_ID_TAGATTACHMENTUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGATTACHMENTUID = 0x23C6

◆ EBML_ID_TAGBINARY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGBINARY = 0x0485

◆ EBML_ID_TAGCHAPTERUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGCHAPTERUID = 0x23C4

◆ EBML_ID_TAGDEFAULT

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGDEFAULT = 0x0484

◆ EBML_ID_TAGEDITIONUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGEDITIONUID = 0x23C9

◆ EBML_ID_TAGLANGUAGE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGLANGUAGE = 0x047A

◆ EBML_ID_TAGNAME

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGNAME = 0x05A3

◆ EBML_ID_TAGS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGS = 0x0254C367

◆ EBML_ID_TAGSTRING

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGSTRING = 0x0487

◆ EBML_ID_TAGTRACKUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TAGTRACKUID = 0x23C5

◆ EBML_ID_TARGETS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TARGETS = 0x23C0

◆ EBML_ID_TARGETTYPE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TARGETTYPE = 0x23CA

◆ EBML_ID_TARGETTYPEVALUE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TARGETTYPEVALUE = 0x28CA

◆ EBML_ID_TIMECODESCALE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TIMECODESCALE = 0x0AD7B1

◆ EBML_ID_TITLE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TITLE = 0x3BA9

◆ EBML_ID_TRACKENTRY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKENTRY = 0x2E

◆ EBML_ID_TRACKNUMBER

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKNUMBER = 0x57

◆ EBML_ID_TRACKOFFSET

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKOFFSET = 0x137F

Definition at line 107 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_TRACKOVERLAY

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKOVERLAY = 0x2FAB

Definition at line 155 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_TRACKS

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKS = 0x0654AE6B

◆ EBML_ID_TRACKTIMECODESCALE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKTIMECODESCALE = 0x03314F

◆ EBML_ID_TRACKTRANSLATE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKTRANSLATE = 0x2624

Definition at line 135 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_TRACKTRANSLATECODEC

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKTRANSLATECODEC = 0x26BF

Definition at line 137 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_TRACKTRANSLATEEDITIONUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKTRANSLATEEDITIONUID = 0x26FC

Definition at line 138 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_TRACKTRANSLATETRACKID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKTRANSLATETRACKID = 0x26A5

Definition at line 136 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_TRACKTYPE

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKTYPE = 0x03

◆ EBML_ID_TRACKUID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_TRACKUID = 0x33C5

◆ EBML_ID_VIDEO

const GetId3\Module\AudioVideo\Matroska::EBML_ID_VIDEO = 0x60

◆ EBML_ID_VOID

const GetId3\Module\AudioVideo\Matroska::EBML_ID_VOID = 0x6C

Definition at line 216 of file Matroska.php.

Referenced by GetId3\Module\AudioVideo\Matroska\EBMLidName().

◆ EBML_ID_WRITINGAPP

const GetId3\Module\AudioVideo\Matroska::EBML_ID_WRITINGAPP = 0x1741

The documentation for this class was generated from the following file: