wp/wp-includes/ID3/module.audio-video.matroska.php
author ymh <ymh.work@gmail.com>
Tue, 27 Sep 2022 16:37:53 +0200
changeset 19 3d72ae0968f4
parent 16 a86126ab1dd4
child 21 48c4eec2b7e6
permissions -rw-r--r--
upgrade wordpress to 6.0.2
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     2
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
/// getID3() by James Heinrich <info@getid3.org>               //
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     5
//  available at https://github.com/JamesHeinrich/getID3       //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     6
//            or https://www.getid3.org                        //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     7
//            or http://getid3.sourceforge.net                 //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     8
//  see readme.txt for more details                            //
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
// module.audio-video.matriska.php                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
// module for analyzing Matroska containers                    //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
// dependencies: NONE                                          //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
//                                                            ///
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    17
if (!defined('GETID3_INCLUDEPATH')) { // prevent path-exposing attacks that access modules directly on public webservers
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    18
	exit;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    19
}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
define('EBML_ID_CHAPTERS',                  0x0043A770); // [10][43][A7][70] -- A system to define basic menus and partition data. For more detailed information, look at the Chapters Explanation.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
define('EBML_ID_SEEKHEAD',                  0x014D9B74); // [11][4D][9B][74] -- Contains the position of other level 1 elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
define('EBML_ID_TAGS',                      0x0254C367); // [12][54][C3][67] -- Element containing elements specific to Tracks/Chapters. A list of valid tags can be found <http://www.matroska.org/technical/specs/tagging/index.html>.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
define('EBML_ID_INFO',                      0x0549A966); // [15][49][A9][66] -- Contains miscellaneous general information and statistics on the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
define('EBML_ID_TRACKS',                    0x0654AE6B); // [16][54][AE][6B] -- A top-level block of information with many tracks described.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
define('EBML_ID_SEGMENT',                   0x08538067); // [18][53][80][67] -- This element contains all other top-level (level 1) elements. Typically a Matroska file is composed of 1 segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
define('EBML_ID_ATTACHMENTS',               0x0941A469); // [19][41][A4][69] -- Contain attached files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
define('EBML_ID_EBML',                      0x0A45DFA3); // [1A][45][DF][A3] -- Set the EBML characteristics of the data to follow. Each EBML document has to start with this.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
define('EBML_ID_CUES',                      0x0C53BB6B); // [1C][53][BB][6B] -- A top-level element to speed seeking access. All entries are local to the segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
define('EBML_ID_CLUSTER',                   0x0F43B675); // [1F][43][B6][75] -- The lower level element containing the (monolithic) Block structure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
define('EBML_ID_LANGUAGE',                    0x02B59C); //     [22][B5][9C] -- Specifies the language of the track in the Matroska languages form.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
define('EBML_ID_TRACKTIMECODESCALE',          0x03314F); //     [23][31][4F] -- The scale to apply on this track to work at normal speed in relation with other tracks (mostly used to adjust video speed when the audio length differs).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
define('EBML_ID_DEFAULTDURATION',             0x03E383); //     [23][E3][83] -- Number of nanoseconds (i.e. not scaled) per frame.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
define('EBML_ID_CODECNAME',                   0x058688); //     [25][86][88] -- A human-readable string specifying the codec.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
define('EBML_ID_CODECDOWNLOADURL',            0x06B240); //     [26][B2][40] -- A URL to download about the codec used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
define('EBML_ID_TIMECODESCALE',               0x0AD7B1); //     [2A][D7][B1] -- Timecode scale in nanoseconds (1.000.000 means all timecodes in the segment are expressed in milliseconds).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
define('EBML_ID_COLOURSPACE',                 0x0EB524); //     [2E][B5][24] -- Same value as in AVI (32 bits).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
define('EBML_ID_GAMMAVALUE',                  0x0FB523); //     [2F][B5][23] -- Gamma Value.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
define('EBML_ID_CODECSETTINGS',               0x1A9697); //     [3A][96][97] -- A string describing the encoding setting used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
define('EBML_ID_CODECINFOURL',                0x1B4040); //     [3B][40][40] -- A URL to find information about the codec used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
define('EBML_ID_PREVFILENAME',                0x1C83AB); //     [3C][83][AB] -- An escaped filename corresponding to the previous segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
define('EBML_ID_PREVUID',                     0x1CB923); //     [3C][B9][23] -- A unique ID to identify the previous chained segment (128 bits).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
define('EBML_ID_NEXTFILENAME',                0x1E83BB); //     [3E][83][BB] -- An escaped filename corresponding to the next segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
define('EBML_ID_NEXTUID',                     0x1EB923); //     [3E][B9][23] -- A unique ID to identify the next chained segment (128 bits).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
define('EBML_ID_CONTENTCOMPALGO',               0x0254); //         [42][54] -- The compression algorithm used. Algorithms that have been specified so far are:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
define('EBML_ID_CONTENTCOMPSETTINGS',           0x0255); //         [42][55] -- Settings that might be needed by the decompressor. For Header Stripping (ContentCompAlgo=3), the bytes that were removed from the beggining of each frames of the track.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
define('EBML_ID_DOCTYPE',                       0x0282); //         [42][82] -- A string that describes the type of document that follows this EBML header ('matroska' in our case).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
define('EBML_ID_DOCTYPEREADVERSION',            0x0285); //         [42][85] -- The minimum DocType version an interpreter has to support to read this file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
define('EBML_ID_EBMLVERSION',                   0x0286); //         [42][86] -- The version of EBML parser used to create the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
define('EBML_ID_DOCTYPEVERSION',                0x0287); //         [42][87] -- The version of DocType interpreter used to create the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
define('EBML_ID_EBMLMAXIDLENGTH',               0x02F2); //         [42][F2] -- The maximum length of the IDs you'll find in this file (4 or less in Matroska).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
define('EBML_ID_EBMLMAXSIZELENGTH',             0x02F3); //         [42][F3] -- The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not override the element size indicated at the beginning of an element. Elements that have an indicated size which is larger than what is allowed by EBMLMaxSizeLength shall be considered invalid.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
define('EBML_ID_EBMLREADVERSION',               0x02F7); //         [42][F7] -- The minimum EBML version a parser has to support to read this file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
define('EBML_ID_CHAPLANGUAGE',                  0x037C); //         [43][7C] -- The languages corresponding to the string, in the bibliographic ISO-639-2 form.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
define('EBML_ID_CHAPCOUNTRY',                   0x037E); //         [43][7E] -- The countries corresponding to the string, same 2 octets as in Internet domains.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
define('EBML_ID_SEGMENTFAMILY',                 0x0444); //         [44][44] -- A randomly generated unique ID that all segments related to each other must use (128 bits).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
define('EBML_ID_DATEUTC',                       0x0461); //         [44][61] -- Date of the origin of timecode (value 0), i.e. production date.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
define('EBML_ID_TAGLANGUAGE',                   0x047A); //         [44][7A] -- Specifies the language of the tag specified, in the Matroska languages form.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
define('EBML_ID_TAGDEFAULT',                    0x0484); //         [44][84] -- Indication to know if this is the default/original language to use for the given tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
define('EBML_ID_TAGBINARY',                     0x0485); //         [44][85] -- The values of the Tag if it is binary. Note that this cannot be used in the same SimpleTag as TagString.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
define('EBML_ID_TAGSTRING',                     0x0487); //         [44][87] -- The value of the Tag.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
define('EBML_ID_DURATION',                      0x0489); //         [44][89] -- Duration of the segment (based on TimecodeScale).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
define('EBML_ID_CHAPPROCESSPRIVATE',            0x050D); //         [45][0D] -- Some optional data attached to the ChapProcessCodecID information. For ChapProcessCodecID = 1, it is the "DVD level" equivalent.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
define('EBML_ID_CHAPTERFLAGENABLED',            0x0598); //         [45][98] -- Specify wether the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the movie should skip all the content between the TimeStart and TimeEnd of this chapter.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
define('EBML_ID_TAGNAME',                       0x05A3); //         [45][A3] -- The name of the Tag that is going to be stored.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
define('EBML_ID_EDITIONENTRY',                  0x05B9); //         [45][B9] -- Contains all information about a segment edition.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
define('EBML_ID_EDITIONUID',                    0x05BC); //         [45][BC] -- A unique ID to identify the edition. It's useful for tagging an edition.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
define('EBML_ID_EDITIONFLAGHIDDEN',             0x05BD); //         [45][BD] -- If an edition is hidden (1), it should not be available to the user interface (but still to Control Tracks).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
define('EBML_ID_EDITIONFLAGDEFAULT',            0x05DB); //         [45][DB] -- If a flag is set (1) the edition should be used as the default one.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
define('EBML_ID_EDITIONFLAGORDERED',            0x05DD); //         [45][DD] -- Specify if the chapters can be defined multiple times and the order to play them is enforced.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
define('EBML_ID_FILEDATA',                      0x065C); //         [46][5C] -- The data of the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
define('EBML_ID_FILEMIMETYPE',                  0x0660); //         [46][60] -- MIME type of the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
define('EBML_ID_FILENAME',                      0x066E); //         [46][6E] -- Filename of the attached file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
define('EBML_ID_FILEREFERRAL',                  0x0675); //         [46][75] -- A binary value that a track/codec can refer to when the attachment is needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
define('EBML_ID_FILEDESCRIPTION',               0x067E); //         [46][7E] -- A human-friendly name for the attached file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
define('EBML_ID_FILEUID',                       0x06AE); //         [46][AE] -- Unique ID representing the file, as random as possible.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
define('EBML_ID_CONTENTENCALGO',                0x07E1); //         [47][E1] -- The encryption algorithm used. The value '0' means that the contents have not been encrypted but only signed. Predefined values:
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    78
define('EBML_ID_CONTENTENCKEYID',               0x07E2); //         [47][E2] -- For public key algorithms this is the ID of the public key the data was encrypted with.
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
define('EBML_ID_CONTENTSIGNATURE',              0x07E3); //         [47][E3] -- A cryptographic signature of the contents.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
define('EBML_ID_CONTENTSIGKEYID',               0x07E4); //         [47][E4] -- This is the ID of the private key the data was signed with.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
define('EBML_ID_CONTENTSIGALGO',                0x07E5); //         [47][E5] -- The algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
define('EBML_ID_CONTENTSIGHASHALGO',            0x07E6); //         [47][E6] -- The hash algorithm used for the signature. A value of '0' means that the contents have not been signed but only encrypted. Predefined values:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
define('EBML_ID_MUXINGAPP',                     0x0D80); //         [4D][80] -- Muxing application or library ("libmatroska-0.4.3").
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
define('EBML_ID_SEEK',                          0x0DBB); //         [4D][BB] -- Contains a single seek entry to an EBML element.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
define('EBML_ID_CONTENTENCODINGORDER',          0x1031); //         [50][31] -- Tells when this modification was used during encoding/muxing starting with 0 and counting upwards. The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to be unique over all ContentEncodingOrder elements in the segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
define('EBML_ID_CONTENTENCODINGSCOPE',          0x1032); //         [50][32] -- A bit field that describes which elements have been modified in this way. Values (big endian) can be OR'ed. Possible values:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
define('EBML_ID_CONTENTENCODINGTYPE',           0x1033); //         [50][33] -- A value describing what kind of transformation has been done. Possible values:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
define('EBML_ID_CONTENTCOMPRESSION',            0x1034); //         [50][34] -- Settings describing the compression used. Must be present if the value of ContentEncodingType is 0 and absent otherwise. Each block must be decompressable even if no previous block is available in order not to prevent seeking.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
define('EBML_ID_CONTENTENCRYPTION',             0x1035); //         [50][35] -- Settings describing the encryption used. Must be present if the value of ContentEncodingType is 1 and absent otherwise.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
define('EBML_ID_CUEREFNUMBER',                  0x135F); //         [53][5F] -- Number of the referenced Block of Track X in the specified Cluster.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
define('EBML_ID_NAME',                          0x136E); //         [53][6E] -- A human-readable track name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
define('EBML_ID_CUEBLOCKNUMBER',                0x1378); //         [53][78] -- Number of the Block in the specified Cluster.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
define('EBML_ID_TRACKOFFSET',                   0x137F); //         [53][7F] -- A value to add to the Block's Timecode. This can be used to adjust the playback offset of a track.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
define('EBML_ID_SEEKID',                        0x13AB); //         [53][AB] -- The binary ID corresponding to the element name.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
define('EBML_ID_SEEKPOSITION',                  0x13AC); //         [53][AC] -- The position of the element in the segment in octets (0 = first level 1 element).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
define('EBML_ID_STEREOMODE',                    0x13B8); //         [53][B8] -- Stereo-3D video mode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
define('EBML_ID_OLDSTEREOMODE',                 0x13B9); //         [53][B9] -- Bogus StereoMode value used in old versions of libmatroska. DO NOT USE. (0: mono, 1: right eye, 2: left eye, 3: both eyes).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
define('EBML_ID_PIXELCROPBOTTOM',               0x14AA); //         [54][AA] -- The number of video pixels to remove at the bottom of the image (for HDTV content).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
define('EBML_ID_DISPLAYWIDTH',                  0x14B0); //         [54][B0] -- Width of the video frames to display.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
define('EBML_ID_DISPLAYUNIT',                   0x14B2); //         [54][B2] -- Type of the unit for DisplayWidth/Height (0: pixels, 1: centimeters, 2: inches).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
define('EBML_ID_ASPECTRATIOTYPE',               0x14B3); //         [54][B3] -- Specify the possible modifications to the aspect ratio (0: free resizing, 1: keep aspect ratio, 2: fixed).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
define('EBML_ID_DISPLAYHEIGHT',                 0x14BA); //         [54][BA] -- Height of the video frames to display.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
define('EBML_ID_PIXELCROPTOP',                  0x14BB); //         [54][BB] -- The number of video pixels to remove at the top of the image.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
define('EBML_ID_PIXELCROPLEFT',                 0x14CC); //         [54][CC] -- The number of video pixels to remove on the left of the image.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
define('EBML_ID_PIXELCROPRIGHT',                0x14DD); //         [54][DD] -- The number of video pixels to remove on the right of the image.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
define('EBML_ID_FLAGFORCED',                    0x15AA); //         [55][AA] -- Set if that track MUST be used during playback. There can be many forced track for a kind (audio, video or subs), the player should select the one which language matches the user preference or the default + forced track. Overlay MAY happen between a forced and non-forced track of the same kind.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
define('EBML_ID_MAXBLOCKADDITIONID',            0x15EE); //         [55][EE] -- The maximum value of BlockAddID. A value 0 means there is no BlockAdditions for this track.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
define('EBML_ID_WRITINGAPP',                    0x1741); //         [57][41] -- Writing application ("mkvmerge-0.3.3").
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
define('EBML_ID_CLUSTERSILENTTRACKS',           0x1854); //         [58][54] -- The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks on seeking. Then you should decide what track to use.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
define('EBML_ID_CLUSTERSILENTTRACKNUMBER',      0x18D7); //         [58][D7] -- One of the track number that are not used from now on in the stream. It could change later if not specified as silent in a further Cluster.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
define('EBML_ID_ATTACHEDFILE',                  0x21A7); //         [61][A7] -- An attached file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
define('EBML_ID_CONTENTENCODING',               0x2240); //         [62][40] -- Settings for one content encoding like compression or encryption.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
define('EBML_ID_BITDEPTH',                      0x2264); //         [62][64] -- Bits per sample, mostly used for PCM.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
define('EBML_ID_CODECPRIVATE',                  0x23A2); //         [63][A2] -- Private data only known to the codec.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
define('EBML_ID_TARGETS',                       0x23C0); //         [63][C0] -- Contain all UIDs where the specified meta data apply. It is void to describe everything in the segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
define('EBML_ID_CHAPTERPHYSICALEQUIV',          0x23C3); //         [63][C3] -- Specify the physical equivalent of this ChapterAtom like "DVD" (60) or "SIDE" (50), see complete list of values.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
define('EBML_ID_TAGCHAPTERUID',                 0x23C4); //         [63][C4] -- A unique ID to identify the Chapter(s) the tags belong to. If the value is 0 at this level, the tags apply to all chapters in the Segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
define('EBML_ID_TAGTRACKUID',                   0x23C5); //         [63][C5] -- A unique ID to identify the Track(s) the tags belong to. If the value is 0 at this level, the tags apply to all tracks in the Segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
define('EBML_ID_TAGATTACHMENTUID',              0x23C6); //         [63][C6] -- A unique ID to identify the Attachment(s) the tags belong to. If the value is 0 at this level, the tags apply to all the attachments in the Segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
define('EBML_ID_TAGEDITIONUID',                 0x23C9); //         [63][C9] -- A unique ID to identify the EditionEntry(s) the tags belong to. If the value is 0 at this level, the tags apply to all editions in the Segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
define('EBML_ID_TARGETTYPE',                    0x23CA); //         [63][CA] -- An informational string that can be used to display the logical level of the target like "ALBUM", "TRACK", "MOVIE", "CHAPTER", etc (see TargetType).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
define('EBML_ID_TRACKTRANSLATE',                0x2624); //         [66][24] -- The track identification for the given Chapter Codec.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
define('EBML_ID_TRACKTRANSLATETRACKID',         0x26A5); //         [66][A5] -- The binary value used to represent this track in the chapter codec data. The format depends on the ChapProcessCodecID used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
define('EBML_ID_TRACKTRANSLATECODEC',           0x26BF); //         [66][BF] -- The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
define('EBML_ID_TRACKTRANSLATEEDITIONUID',      0x26FC); //         [66][FC] -- Specify an edition UID on which this translation applies. When not specified, it means for all editions found in the segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
define('EBML_ID_SIMPLETAG',                     0x27C8); //         [67][C8] -- Contains general information about the target.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
define('EBML_ID_TARGETTYPEVALUE',               0x28CA); //         [68][CA] -- A number to indicate the logical level of the target (see TargetType).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
define('EBML_ID_CHAPPROCESSCOMMAND',            0x2911); //         [69][11] -- Contains all the commands associated to the Atom.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
define('EBML_ID_CHAPPROCESSTIME',               0x2922); //         [69][22] -- Defines when the process command should be handled (0: during the whole chapter, 1: before starting playback, 2: after playback of the chapter).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
define('EBML_ID_CHAPTERTRANSLATE',              0x2924); //         [69][24] -- A tuple of corresponding ID used by chapter codecs to represent this segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
define('EBML_ID_CHAPPROCESSDATA',               0x2933); //         [69][33] -- Contains the command information. The data should be interpreted depending on the ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post commands.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
define('EBML_ID_CHAPPROCESS',                   0x2944); //         [69][44] -- Contains all the commands associated to the Atom.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
define('EBML_ID_CHAPPROCESSCODECID',            0x2955); //         [69][55] -- Contains the type of the codec used for the processing. A value of 0 means native Matroska processing (to be defined), a value of 1 means the DVD command set is used. More codec IDs can be added later.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
define('EBML_ID_CHAPTERTRANSLATEID',            0x29A5); //         [69][A5] -- The binary value used to represent this segment in the chapter codec data. The format depends on the ChapProcessCodecID used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
define('EBML_ID_CHAPTERTRANSLATECODEC',         0x29BF); //         [69][BF] -- The chapter codec using this ID (0: Matroska Script, 1: DVD-menu).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
define('EBML_ID_CHAPTERTRANSLATEEDITIONUID',    0x29FC); //         [69][FC] -- Specify an edition UID on which this correspondance applies. When not specified, it means for all editions found in the segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
define('EBML_ID_CONTENTENCODINGS',              0x2D80); //         [6D][80] -- Settings for several content encoding mechanisms like compression or encryption.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
define('EBML_ID_MINCACHE',                      0x2DE7); //         [6D][E7] -- The minimum number of frames a player should be able to cache during playback. If set to 0, the reference pseudo-cache system is not used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
define('EBML_ID_MAXCACHE',                      0x2DF8); //         [6D][F8] -- The maximum cache size required to store referenced frames in and the current frame. 0 means no cache is needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
define('EBML_ID_CHAPTERSEGMENTUID',             0x2E67); //         [6E][67] -- A segment to play in place of this chapter. Edition ChapterSegmentEditionUID should be used for this segment, otherwise no edition is used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
define('EBML_ID_CHAPTERSEGMENTEDITIONUID',      0x2EBC); //         [6E][BC] -- The edition to play from the segment linked in ChapterSegmentUID.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
define('EBML_ID_TRACKOVERLAY',                  0x2FAB); //         [6F][AB] -- Specify that this track is an overlay track for the Track specified (in the u-integer). That means when this track has a gap (see SilentTracks) the overlay track should be used instead. The order of multiple TrackOverlay matters, the first one is the one that should be used. If not found it should be the second, etc.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
define('EBML_ID_TAG',                           0x3373); //         [73][73] -- Element containing elements specific to Tracks/Chapters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
define('EBML_ID_SEGMENTFILENAME',               0x3384); //         [73][84] -- A filename corresponding to this segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
define('EBML_ID_SEGMENTUID',                    0x33A4); //         [73][A4] -- A randomly generated unique ID to identify the current segment between many others (128 bits).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
define('EBML_ID_CHAPTERUID',                    0x33C4); //         [73][C4] -- A unique ID to identify the Chapter.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
define('EBML_ID_TRACKUID',                      0x33C5); //         [73][C5] -- A unique ID to identify the Track. This should be kept the same when making a direct stream copy of the Track to another file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
define('EBML_ID_ATTACHMENTLINK',                0x3446); //         [74][46] -- The UID of an attachment that is used by this codec.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
define('EBML_ID_CLUSTERBLOCKADDITIONS',         0x35A1); //         [75][A1] -- Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block structure could still see and use/skip these data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
define('EBML_ID_CHANNELPOSITIONS',              0x347B); //         [7D][7B] -- Table of horizontal angles for each successive channel, see appendix.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
define('EBML_ID_OUTPUTSAMPLINGFREQUENCY',       0x38B5); //         [78][B5] -- Real output sampling frequency in Hz (used for SBR techniques).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
define('EBML_ID_TITLE',                         0x3BA9); //         [7B][A9] -- General name of the segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
define('EBML_ID_CHAPTERDISPLAY',                  0x00); //             [80] -- Contains all possible strings to use for the chapter display.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
define('EBML_ID_TRACKTYPE',                       0x03); //             [83] -- A set of track types coded on 8 bits (1: video, 2: audio, 3: complex, 0x10: logo, 0x11: subtitle, 0x12: buttons, 0x20: control).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
define('EBML_ID_CHAPSTRING',                      0x05); //             [85] -- Contains the string to use as the chapter atom.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
define('EBML_ID_CODECID',                         0x06); //             [86] -- An ID corresponding to the codec, see the codec page for more info.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
define('EBML_ID_FLAGDEFAULT',                     0x08); //             [88] -- Set if that track (audio, video or subs) SHOULD be used if no language found matches the user preference.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
define('EBML_ID_CHAPTERTRACKNUMBER',              0x09); //             [89] -- UID of the Track to apply this chapter too. In the absense of a control track, choosing this chapter will select the listed Tracks and deselect unlisted tracks. Absense of this element indicates that the Chapter should be applied to any currently used Tracks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
define('EBML_ID_CLUSTERSLICES',                   0x0E); //             [8E] -- Contains slices description.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
define('EBML_ID_CHAPTERTRACK',                    0x0F); //             [8F] -- List of tracks on which the chapter applies. If this element is not present, all tracks apply
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
define('EBML_ID_CHAPTERTIMESTART',                0x11); //             [91] -- Timecode of the start of Chapter (not scaled).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
define('EBML_ID_CHAPTERTIMEEND',                  0x12); //             [92] -- Timecode of the end of Chapter (timecode excluded, not scaled).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
define('EBML_ID_CUEREFTIME',                      0x16); //             [96] -- Timecode of the referenced Block.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
define('EBML_ID_CUEREFCLUSTER',                   0x17); //             [97] -- Position of the Cluster containing the referenced Block.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
define('EBML_ID_CHAPTERFLAGHIDDEN',               0x18); //             [98] -- If a chapter is hidden (1), it should not be available to the user interface (but still to Control Tracks).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
define('EBML_ID_FLAGINTERLACED',                  0x1A); //             [9A] -- Set if the video is interlaced.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
define('EBML_ID_CLUSTERBLOCKDURATION',            0x1B); //             [9B] -- The duration of the Block (based on TimecodeScale). This element is mandatory when DefaultDuration is set for the track. When not written and with no DefaultDuration, the value is assumed to be the difference between the timecode of this Block and the timecode of the next Block in "display" order (not coding order). This element can be useful at the end of a Track (as there is not other Block available), or when there is a break in a track like for subtitle tracks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
define('EBML_ID_FLAGLACING',                      0x1C); //             [9C] -- Set if the track may contain blocks using lacing.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
define('EBML_ID_CHANNELS',                        0x1F); //             [9F] -- Numbers of channels in the track.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
define('EBML_ID_CLUSTERBLOCKGROUP',               0x20); //             [A0] -- Basic container of information containing a single Block or BlockVirtual, and information specific to that Block/VirtualBlock.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
define('EBML_ID_CLUSTERBLOCK',                    0x21); //             [A1] -- Block containing the actual data to be rendered and a timecode relative to the Cluster Timecode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
define('EBML_ID_CLUSTERBLOCKVIRTUAL',             0x22); //             [A2] -- A Block with no data. It must be stored in the stream at the place the real Block should be in display order.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
define('EBML_ID_CLUSTERSIMPLEBLOCK',              0x23); //             [A3] -- Similar to Block but without all the extra information, mostly used to reduced overhead when no extra feature is needed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
define('EBML_ID_CLUSTERCODECSTATE',               0x24); //             [A4] -- The new codec state to use. Data interpretation is private to the codec. This information should always be referenced by a seek entry.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
define('EBML_ID_CLUSTERBLOCKADDITIONAL',          0x25); //             [A5] -- Interpreted by the codec as it wishes (using the BlockAddID).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
define('EBML_ID_CLUSTERBLOCKMORE',                0x26); //             [A6] -- Contain the BlockAdditional and some parameters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
define('EBML_ID_CLUSTERPOSITION',                 0x27); //             [A7] -- Position of the Cluster in the segment (0 in live broadcast streams). It might help to resynchronise offset on damaged streams.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
define('EBML_ID_CODECDECODEALL',                  0x2A); //             [AA] -- The codec can decode potentially damaged data.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
define('EBML_ID_CLUSTERPREVSIZE',                 0x2B); //             [AB] -- Size of the previous Cluster, in octets. Can be useful for backward playing.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
define('EBML_ID_TRACKENTRY',                      0x2E); //             [AE] -- Describes a track with all elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
define('EBML_ID_CLUSTERENCRYPTEDBLOCK',           0x2F); //             [AF] -- Similar to SimpleBlock but the data inside the Block are Transformed (encrypt and/or signed).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
define('EBML_ID_PIXELWIDTH',                      0x30); //             [B0] -- Width of the encoded video frames in pixels.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
define('EBML_ID_CUETIME',                         0x33); //             [B3] -- Absolute timecode according to the segment time base.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
define('EBML_ID_SAMPLINGFREQUENCY',               0x35); //             [B5] -- Sampling frequency in Hz.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
define('EBML_ID_CHAPTERATOM',                     0x36); //             [B6] -- Contains the atom information to use as the chapter atom (apply to all tracks).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
define('EBML_ID_CUETRACKPOSITIONS',               0x37); //             [B7] -- Contain positions for different tracks corresponding to the timecode.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
define('EBML_ID_FLAGENABLED',                     0x39); //             [B9] -- Set if the track is used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
define('EBML_ID_PIXELHEIGHT',                     0x3A); //             [BA] -- Height of the encoded video frames in pixels.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
define('EBML_ID_CUEPOINT',                        0x3B); //             [BB] -- Contains all information relative to a seek point in the segment.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
define('EBML_ID_CRC32',                           0x3F); //             [BF] -- The CRC is computed on all the data of the Master element it's in, regardless of its position. It's recommended to put the CRC value at the beggining of the Master element for easier reading. All level 1 elements should include a CRC-32.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
define('EBML_ID_CLUSTERBLOCKADDITIONID',          0x4B); //             [CB] -- The ID of the BlockAdditional element (0 is the main Block).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
define('EBML_ID_CLUSTERLACENUMBER',               0x4C); //             [CC] -- The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
define('EBML_ID_CLUSTERFRAMENUMBER',              0x4D); //             [CD] -- The number of the frame to generate from this lace with this delay (allow you to generate many frames from the same Block/Frame).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
define('EBML_ID_CLUSTERDELAY',                    0x4E); //             [CE] -- The (scaled) delay to apply to the element.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
define('EBML_ID_CLUSTERDURATION',                 0x4F); //             [CF] -- The (scaled) duration to apply to the element.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
define('EBML_ID_TRACKNUMBER',                     0x57); //             [D7] -- The track number as used in the Block Header (using more than 127 tracks is not encouraged, though the design allows an unlimited number).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
define('EBML_ID_CUEREFERENCE',                    0x5B); //             [DB] -- The Clusters containing the required referenced Blocks.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
define('EBML_ID_VIDEO',                           0x60); //             [E0] -- Video settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
define('EBML_ID_AUDIO',                           0x61); //             [E1] -- Audio settings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
define('EBML_ID_CLUSTERTIMESLICE',                0x68); //             [E8] -- Contains extra time information about the data contained in the Block. While there are a few files in the wild with this element, it is no longer in use and has been deprecated. Being able to interpret this element is not required for playback.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
define('EBML_ID_CUECODECSTATE',                   0x6A); //             [EA] -- The position of the Codec State corresponding to this Cue element. 0 means that the data is taken from the initial Track Entry.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
define('EBML_ID_CUEREFCODECSTATE',                0x6B); //             [EB] -- The position of the Codec State corresponding to this referenced element. 0 means that the data is taken from the initial Track Entry.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
define('EBML_ID_VOID',                            0x6C); //             [EC] -- Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is discarded. Also used to reserve space in a sub-element for later use.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
define('EBML_ID_CLUSTERTIMECODE',                 0x67); //             [E7] -- Absolute timecode of the cluster (based on TimecodeScale).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
define('EBML_ID_CLUSTERBLOCKADDID',               0x6E); //             [EE] -- An ID to identify the BlockAdditional level.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
define('EBML_ID_CUECLUSTERPOSITION',              0x71); //             [F1] -- The position of the Cluster containing the required Block.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
define('EBML_ID_CUETRACK',                        0x77); //             [F7] -- The track for which a position is given.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
define('EBML_ID_CLUSTERREFERENCEPRIORITY',        0x7A); //             [FA] -- This frame is referenced and has the specified cache priority. In cache only a frame of the same or higher priority can replace this frame. A value of 0 means the frame is not referenced.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
define('EBML_ID_CLUSTERREFERENCEBLOCK',           0x7B); //             [FB] -- Timecode of another frame used as a reference (ie: B or P frame). The timecode is relative to the block it's attached to.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
define('EBML_ID_CLUSTERREFERENCEVIRTUAL',         0x7D); //             [FD] -- Relative position of the data that should be in position of the virtual block.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
* @tutorial http://www.matroska.org/technical/specs/index.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
* @todo Rewrite EBML parser to reduce it's size and honor default element values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
* @todo After rewrite implement stream size calculation, that will provide additional useful info and enable AAC/FLAC audio bitrate detection
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
class getid3_matroska extends getid3_handler
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   221
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   222
	 * If true, do not return information about CLUSTER chunks, since there's a lot of them
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   223
	 * and they're not usually useful [default: TRUE].
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   224
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   225
	 * @var bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   226
	 */
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   227
	public $hide_clusters    = true;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   229
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   230
	 * True to parse the whole file, not only header [default: FALSE].
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   231
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   232
	 * @var bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   233
	 */
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   234
	public $parse_whole_file = false;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   235
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   236
	/*
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   237
	 * Private parser settings/placeholders.
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   238
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
	private $EBMLbuffer        = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
	private $EBMLbuffer_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
	private $EBMLbuffer_length = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
	private $current_offset    = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
	private $unuseful_elements = array(EBML_ID_CRC32, EBML_ID_VOID);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   245
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   246
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   247
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
	public function Analyze()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
	{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
		// parse container
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
		try {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
			$this->parseEBML($info);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
		} catch (Exception $e) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   256
			$this->error('EBML parser: '.$e->getMessage());
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
		// calculate playtime
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
		if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
			foreach ($info['matroska']['info'] as $key => $infoarray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
				if (isset($infoarray['Duration'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
					// TimecodeScale is how many nanoseconds each Duration unit is
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
					$info['playtime_seconds'] = $infoarray['Duration'] * ((isset($infoarray['TimecodeScale']) ? $infoarray['TimecodeScale'] : 1000000) / 1000000000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
		// extract tags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
		if (isset($info['matroska']['tags']) && is_array($info['matroska']['tags'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
			foreach ($info['matroska']['tags'] as $key => $infoarray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
				$this->ExtractCommentsSimpleTag($infoarray);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
		// process tracks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
		if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
			foreach ($info['matroska']['tracks']['tracks'] as $key => $trackarray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
				$track_info = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
				$track_info['dataformat'] = self::CodecIDtoCommonName($trackarray['CodecID']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
				$track_info['default'] = (isset($trackarray['FlagDefault']) ? $trackarray['FlagDefault'] : true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
				if (isset($trackarray['Name'])) { $track_info['name'] = $trackarray['Name']; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
				switch ($trackarray['TrackType']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
					case 1: // Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
						$track_info['resolution_x'] = $trackarray['PixelWidth'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
						$track_info['resolution_y'] = $trackarray['PixelHeight'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
						$track_info['display_unit'] = self::displayUnit(isset($trackarray['DisplayUnit']) ? $trackarray['DisplayUnit'] : 0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
						$track_info['display_x']    = (isset($trackarray['DisplayWidth']) ? $trackarray['DisplayWidth'] : $trackarray['PixelWidth']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
						$track_info['display_y']    = (isset($trackarray['DisplayHeight']) ? $trackarray['DisplayHeight'] : $trackarray['PixelHeight']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
						if (isset($trackarray['PixelCropBottom'])) { $track_info['crop_bottom'] = $trackarray['PixelCropBottom']; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
						if (isset($trackarray['PixelCropTop']))    { $track_info['crop_top']    = $trackarray['PixelCropTop']; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
						if (isset($trackarray['PixelCropLeft']))   { $track_info['crop_left']   = $trackarray['PixelCropLeft']; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
						if (isset($trackarray['PixelCropRight']))  { $track_info['crop_right']  = $trackarray['PixelCropRight']; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
						if (isset($trackarray['DefaultDuration'])) { $track_info['frame_rate']  = round(1000000000 / $trackarray['DefaultDuration'], 3); }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
						if (isset($trackarray['CodecName']))       { $track_info['codec']       = $trackarray['CodecName']; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
						switch ($trackarray['CodecID']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
							case 'V_MS/VFW/FOURCC':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   304
								getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, true);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   305
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
								$parsed = getid3_riff::ParseBITMAPINFOHEADER($trackarray['CodecPrivate']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
								$track_info['codec'] = getid3_riff::fourccLookup($parsed['fourcc']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
								$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $parsed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
							/*case 'V_MPEG4/ISO/AVC':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
								$h264['profile']    = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 1, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
								$h264['level']      = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 3, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
								$rn                 = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 4, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
								$h264['NALUlength'] = ($rn & 3) + 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
								$rn                 = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], 5, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
								$nsps               = ($rn & 31);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
								$offset             = 6;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
								for ($i = 0; $i < $nsps; $i ++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
									$length        = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
									$h264['SPS'][] = substr($trackarray['CodecPrivate'], $offset + 2, $length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
									$offset       += 2 + $length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
								$npps               = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
								$offset            += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
								for ($i = 0; $i < $npps; $i ++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
									$length        = getid3_lib::BigEndian2Int(substr($trackarray['CodecPrivate'], $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
									$h264['PPS'][] = substr($trackarray['CodecPrivate'], $offset + 2, $length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
									$offset       += 2 + $length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
								$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $h264;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
								break;*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   335
						$info['video']['streams'][$trackarray['TrackUID']] = $track_info;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
					case 2: // Audio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
						$track_info['sample_rate'] = (isset($trackarray['SamplingFrequency']) ? $trackarray['SamplingFrequency'] : 8000.0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
						$track_info['channels']    = (isset($trackarray['Channels']) ? $trackarray['Channels'] : 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
						$track_info['language']    = (isset($trackarray['Language']) ? $trackarray['Language'] : 'eng');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
						if (isset($trackarray['BitDepth']))  { $track_info['bits_per_sample'] = $trackarray['BitDepth']; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
						if (isset($trackarray['CodecName'])) { $track_info['codec']           = $trackarray['CodecName']; }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
						switch ($trackarray['CodecID']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
							case 'A_PCM/INT/LIT':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
							case 'A_PCM/INT/BIG':
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   348
								$track_info['bitrate'] = $track_info['sample_rate'] * $track_info['channels'] * $trackarray['BitDepth'];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
							case 'A_AC3':
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   352
							case 'A_EAC3':
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
							case 'A_DTS':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
							case 'A_MPEG/L3':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
							case 'A_MPEG/L2':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
							case 'A_FLAC':
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   357
								$module_dataformat = ($track_info['dataformat'] == 'mp2' ? 'mp3' : ($track_info['dataformat'] == 'eac3' ? 'ac3' : $track_info['dataformat']));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   358
								getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.'.$module_dataformat.'.php', __FILE__, true);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
								if (!isset($info['matroska']['track_data_offsets'][$trackarray['TrackNumber']])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
									$this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because $info[matroska][track_data_offsets]['.$trackarray['TrackNumber'].'] not set');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
								// create temp instance
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
								$getid3_temp = new getID3();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
								if ($track_info['dataformat'] != 'flac') {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   368
									$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
								$getid3_temp->info['avdataoffset'] = $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
								if ($track_info['dataformat'][0] == 'm' || $track_info['dataformat'] == 'flac') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
									$getid3_temp->info['avdataend'] = $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['offset'] + $info['matroska']['track_data_offsets'][$trackarray['TrackNumber']]['length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
								// analyze
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   376
								$class = 'getid3_'.$module_dataformat;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
								$header_data_key = $track_info['dataformat'][0] == 'm' ? 'mpeg' : $track_info['dataformat'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
								$getid3_audio = new $class($getid3_temp, __CLASS__);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
								if ($track_info['dataformat'] == 'flac') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
									$getid3_audio->AnalyzeString($trackarray['CodecPrivate']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
								else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
									$getid3_audio->Analyze();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
								if (!empty($getid3_temp->info[$header_data_key])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
									$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $getid3_temp->info[$header_data_key];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
									if (isset($getid3_temp->info['audio']) && is_array($getid3_temp->info['audio'])) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   388
										foreach ($getid3_temp->info['audio'] as $sub_key => $value) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   389
											$track_info[$sub_key] = $value;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
								else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
									$this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because '.$class.'::Analyze() failed at offset '.$getid3_temp->info['avdataoffset']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
								// copy errors and warnings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
								if (!empty($getid3_temp->info['error'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
									foreach ($getid3_temp->info['error'] as $newerror) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
										$this->warning($class.'() says: ['.$newerror.']');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
								if (!empty($getid3_temp->info['warning'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
									foreach ($getid3_temp->info['warning'] as $newerror) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
										$this->warning($class.'() says: ['.$newerror.']');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
								unset($getid3_temp, $getid3_audio);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
							case 'A_AAC':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
							case 'A_AAC/MPEG2/LC':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
							case 'A_AAC/MPEG2/LC/SBR':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
							case 'A_AAC/MPEG4/LC':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
							case 'A_AAC/MPEG4/LC/SBR':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   416
								$this->warning($trackarray['CodecID'].' audio data contains no header, audio/video bitrates can\'t be calculated');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
							case 'A_VORBIS':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
								if (!isset($trackarray['CodecPrivate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
									$this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because CodecPrivate data not set');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
								$vorbis_offset = strpos($trackarray['CodecPrivate'], 'vorbis', 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
								if ($vorbis_offset === false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
									$this->warning('Unable to parse audio data ['.basename(__FILE__).':'.__LINE__.'] because CodecPrivate data does not contain "vorbis" keyword');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
								$vorbis_offset -= 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   431
								getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ogg.php', __FILE__, true);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
								// create temp instance
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
								$getid3_temp = new getID3();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
								// analyze
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
								$getid3_ogg = new getid3_ogg($getid3_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
								$oggpageinfo['page_seqno'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
								$getid3_ogg->ParseVorbisPageHeader($trackarray['CodecPrivate'], $vorbis_offset, $oggpageinfo);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
								if (!empty($getid3_temp->info['ogg'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
									$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $getid3_temp->info['ogg'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
									if (isset($getid3_temp->info['audio']) && is_array($getid3_temp->info['audio'])) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   443
										foreach ($getid3_temp->info['audio'] as $sub_key => $value) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   444
											$track_info[$sub_key] = $value;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
								// copy errors and warnings
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
								if (!empty($getid3_temp->info['error'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
									foreach ($getid3_temp->info['error'] as $newerror) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
										$this->warning('getid3_ogg() says: ['.$newerror.']');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
								if (!empty($getid3_temp->info['warning'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
									foreach ($getid3_temp->info['warning'] as $newerror) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
										$this->warning('getid3_ogg() says: ['.$newerror.']');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
								if (!empty($getid3_temp->info['ogg']['bitrate_nominal'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
									$track_info['bitrate'] = $getid3_temp->info['ogg']['bitrate_nominal'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
								unset($getid3_temp, $getid3_ogg, $oggpageinfo, $vorbis_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
							case 'A_MS/ACM':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   468
								getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, true);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
								$parsed = getid3_riff::parseWAVEFORMATex($trackarray['CodecPrivate']);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   471
								foreach ($parsed as $sub_key => $value) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   472
									if ($sub_key != 'raw') {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   473
										$track_info[$sub_key] = $value;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
								$info['matroska']['track_codec_parsed'][$trackarray['TrackNumber']] = $parsed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
							default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
								$this->warning('Unhandled audio type "'.(isset($trackarray['CodecID']) ? $trackarray['CodecID'] : '').'"');
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   481
								break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   484
						$info['audio']['streams'][$trackarray['TrackUID']] = $track_info;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
			if (!empty($info['video']['streams'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
				$info['video'] = self::getDefaultStreamInfo($info['video']['streams']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
			if (!empty($info['audio']['streams'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				$info['audio'] = self::getDefaultStreamInfo($info['audio']['streams']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
		// process attachments
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
		if (isset($info['matroska']['attachments']) && $this->getid3->option_save_attachments !== getID3::ATTACHMENTS_NONE) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
			foreach ($info['matroska']['attachments'] as $i => $entry) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
				if (strpos($entry['FileMimeType'], 'image/') === 0 && !empty($entry['FileData'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
					$info['matroska']['comments']['picture'][] = array('data' => $entry['FileData'], 'image_mime' => $entry['FileMimeType'], 'filename' => $entry['FileName']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
		// determine mime type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
		if (!empty($info['video']['streams'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
			$info['mime_type'] = ($info['matroska']['doctype'] == 'webm' ? 'video/webm' : 'video/x-matroska');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
		} elseif (!empty($info['audio']['streams'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
			$info['mime_type'] = ($info['matroska']['doctype'] == 'webm' ? 'audio/webm' : 'audio/x-matroska');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
		} elseif (isset($info['mime_type'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
			unset($info['mime_type']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   515
		// use _STATISTICS_TAGS if available to set audio/video bitrates
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   516
		if (!empty($info['matroska']['tags'])) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   517
			$_STATISTICS_byTrackUID = array();
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   518
			foreach ($info['matroska']['tags'] as $key1 => $value1) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   519
				if (!empty($value1['Targets']['TagTrackUID'][0]) && !empty($value1['SimpleTag'])) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   520
					foreach ($value1['SimpleTag'] as $key2 => $value2) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   521
						if (!empty($value2['TagName']) && isset($value2['TagString'])) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   522
							$_STATISTICS_byTrackUID[$value1['Targets']['TagTrackUID'][0]][$value2['TagName']] = $value2['TagString'];
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   523
						}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   524
					}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   525
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   526
			}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   527
			foreach (array('audio','video') as $avtype) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   528
				if (!empty($info[$avtype]['streams'])) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   529
					foreach ($info[$avtype]['streams'] as $trackUID => $trackdata) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   530
						if (!isset($trackdata['bitrate']) && !empty($_STATISTICS_byTrackUID[$trackUID]['BPS'])) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   531
							$info[$avtype]['streams'][$trackUID]['bitrate'] = (int) $_STATISTICS_byTrackUID[$trackUID]['BPS'];
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   532
							@$info[$avtype]['bitrate'] += $info[$avtype]['streams'][$trackUID]['bitrate'];
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   533
						}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   534
					}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   535
				}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   536
			}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   537
		}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   538
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   542
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   543
	 * @param array $info
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   544
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
	private function parseEBML(&$info) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
		// http://www.matroska.org/technical/specs/index.html#EBMLBasics
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
		$this->current_offset = $info['avdataoffset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
		while ($this->getEBMLelement($top_element, $info['avdataend'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
			switch ($top_element['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
				case EBML_ID_EBML:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
					$info['matroska']['header']['offset'] = $top_element['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
					$info['matroska']['header']['length'] = $top_element['length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
					while ($this->getEBMLelement($element_data, $top_element['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
						switch ($element_data['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
							case EBML_ID_EBMLVERSION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
							case EBML_ID_EBMLREADVERSION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
							case EBML_ID_EBMLMAXIDLENGTH:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
							case EBML_ID_EBMLMAXSIZELENGTH:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
							case EBML_ID_DOCTYPEVERSION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
							case EBML_ID_DOCTYPEREADVERSION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
								$element_data['data'] = getid3_lib::BigEndian2Int($element_data['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
							case EBML_ID_DOCTYPE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
								$element_data['data'] = getid3_lib::trimNullByte($element_data['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
								$info['matroska']['doctype'] = $element_data['data'];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   571
								$info['fileformat'] = $element_data['data'];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
							default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
								$this->unhandledElement('header', __LINE__, $element_data);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   576
								break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
						unset($element_data['offset'], $element_data['end']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
						$info['matroska']['header']['elements'][] = $element_data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
				case EBML_ID_SEGMENT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
					$info['matroska']['segment'][0]['offset'] = $top_element['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
					$info['matroska']['segment'][0]['length'] = $top_element['length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
					while ($this->getEBMLelement($element_data, $top_element['end'])) {
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   589
						if ($element_data['id'] != EBML_ID_CLUSTER || !$this->hide_clusters) { // collect clusters only if required
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
							$info['matroska']['segments'][] = $element_data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
						switch ($element_data['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
							case EBML_ID_SEEKHEAD: // Contains the position of other level 1 elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
								while ($this->getEBMLelement($seek_entry, $element_data['end'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
									switch ($seek_entry['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
										case EBML_ID_SEEK: // Contains a single seek entry to an EBML element
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
											while ($this->getEBMLelement($sub_seek_entry, $seek_entry['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
												switch ($sub_seek_entry['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
													case EBML_ID_SEEKID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
														$seek_entry['target_id']   = self::EBML2Int($sub_seek_entry['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
														$seek_entry['target_name'] = self::EBMLidName($seek_entry['target_id']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
													case EBML_ID_SEEKPOSITION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
														$seek_entry['target_offset'] = $element_data['offset'] + getid3_lib::BigEndian2Int($sub_seek_entry['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
														$this->unhandledElement('seekhead.seek', __LINE__, $sub_seek_entry);												}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   615
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
											}
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   617
											if (!isset($seek_entry['target_id'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   618
												$this->warning('seek_entry[target_id] unexpectedly not set at '.$seek_entry['offset']);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   619
												break;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   620
											}
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   621
											if (($seek_entry['target_id'] != EBML_ID_CLUSTER) || !$this->hide_clusters) { // collect clusters only if required
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
												$info['matroska']['seek'][] = $seek_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
										default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
											$this->unhandledElement('seekhead', __LINE__, $seek_entry);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   628
											break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
							case EBML_ID_TRACKS: // A top-level block of information with many tracks described.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
								$info['matroska']['tracks'] = $element_data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
								while ($this->getEBMLelement($track_entry, $element_data['end'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
									switch ($track_entry['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
										case EBML_ID_TRACKENTRY: //subelements: Describes a track with all elements.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
											while ($this->getEBMLelement($subelement, $track_entry['end'], array(EBML_ID_VIDEO, EBML_ID_AUDIO, EBML_ID_CONTENTENCODINGS, EBML_ID_CODECPRIVATE))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
												switch ($subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   644
													case EBML_ID_TRACKUID:
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   645
														$track_entry[$subelement['id_name']] = getid3_lib::PrintHexBytes($subelement['data'], true, false);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   646
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
													case EBML_ID_TRACKNUMBER:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
													case EBML_ID_TRACKTYPE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
													case EBML_ID_MINCACHE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
													case EBML_ID_MAXCACHE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
													case EBML_ID_MAXBLOCKADDITIONID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
													case EBML_ID_DEFAULTDURATION: // nanoseconds per frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
														$track_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
													case EBML_ID_TRACKTIMECODESCALE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
														$track_entry[$subelement['id_name']] = getid3_lib::BigEndian2Float($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
													case EBML_ID_CODECID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
													case EBML_ID_LANGUAGE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
													case EBML_ID_NAME:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
													case EBML_ID_CODECNAME:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
														$track_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
													case EBML_ID_CODECPRIVATE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
														$track_entry[$subelement['id_name']] = $this->readEBMLelementData($subelement['length'], true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
													case EBML_ID_FLAGENABLED:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
													case EBML_ID_FLAGDEFAULT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
													case EBML_ID_FLAGFORCED:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
													case EBML_ID_FLAGLACING:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
													case EBML_ID_CODECDECODEALL:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
														$track_entry[$subelement['id_name']] = (bool) getid3_lib::BigEndian2Int($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
													case EBML_ID_VIDEO:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
														while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
															switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
																case EBML_ID_PIXELWIDTH:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
																case EBML_ID_PIXELHEIGHT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
																case EBML_ID_PIXELCROPBOTTOM:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
																case EBML_ID_PIXELCROPTOP:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
																case EBML_ID_PIXELCROPLEFT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
																case EBML_ID_PIXELCROPRIGHT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
																case EBML_ID_DISPLAYWIDTH:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
																case EBML_ID_DISPLAYHEIGHT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
																case EBML_ID_DISPLAYUNIT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
																case EBML_ID_ASPECTRATIOTYPE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
																case EBML_ID_STEREOMODE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
																case EBML_ID_OLDSTEREOMODE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
																case EBML_ID_FLAGINTERLACED:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
																	$track_entry[$sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
																case EBML_ID_GAMMAVALUE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Float($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
																case EBML_ID_COLOURSPACE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
																default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
																	$this->unhandledElement('track.video', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   713
																	break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
															}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
														}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
													case EBML_ID_AUDIO:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
														while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
															switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
																case EBML_ID_CHANNELS:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
																case EBML_ID_BITDEPTH:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
																case EBML_ID_SAMPLINGFREQUENCY:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
																case EBML_ID_OUTPUTSAMPLINGFREQUENCY:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Float($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
																case EBML_ID_CHANNELPOSITIONS:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
																	$track_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
																default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
																	$this->unhandledElement('track.audio', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   739
																	break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
															}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
														}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
													case EBML_ID_CONTENTENCODINGS:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
														while ($this->getEBMLelement($sub_subelement, $subelement['end'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
															switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
																case EBML_ID_CONTENTENCODING:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
																	while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(EBML_ID_CONTENTCOMPRESSION, EBML_ID_CONTENTENCRYPTION))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
																		switch ($sub_sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
																			case EBML_ID_CONTENTENCODINGORDER:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
																			case EBML_ID_CONTENTENCODINGSCOPE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
																			case EBML_ID_CONTENTENCODINGTYPE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
																				$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
																				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
																			case EBML_ID_CONTENTCOMPRESSION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
																				while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
																					switch ($sub_sub_sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
																						case EBML_ID_CONTENTCOMPALGO:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
																							$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
																							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
																						case EBML_ID_CONTENTCOMPSETTINGS:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
																							$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
																							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
																						default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
																							$this->unhandledElement('track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   775
																							break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
																					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
																				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
																				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
																			case EBML_ID_CONTENTENCRYPTION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
																				while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
																					switch ($sub_sub_sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
																						case EBML_ID_CONTENTENCALGO:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
																						case EBML_ID_CONTENTSIGALGO:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
																						case EBML_ID_CONTENTSIGHASHALGO:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
																							$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
																							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
																						case EBML_ID_CONTENTENCKEYID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
																						case EBML_ID_CONTENTSIGNATURE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
																						case EBML_ID_CONTENTSIGKEYID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
																							$track_entry[$sub_subelement['id_name']][$sub_sub_subelement['id_name']][$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
																							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
																						default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
																							$this->unhandledElement('track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   799
																							break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
																					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
																				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
																				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
																			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
																				$this->unhandledElement('track.contentencodings.contentencoding', __LINE__, $sub_sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   806
																				break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
																		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
																	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
																default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
																	$this->unhandledElement('track.contentencodings', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   813
																	break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
															}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
														}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
														$this->unhandledElement('track', __LINE__, $subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   820
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
											$info['matroska']['tracks']['tracks'][] = $track_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
										default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
											$this->unhandledElement('tracks', __LINE__, $track_entry);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   829
											break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
							case EBML_ID_INFO: // Contains miscellaneous general information and statistics on the file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
								$info_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
								while ($this->getEBMLelement($subelement, $element_data['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
									switch ($subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
										case EBML_ID_TIMECODESCALE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
											$info_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
										case EBML_ID_DURATION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
											$info_entry[$subelement['id_name']] = getid3_lib::BigEndian2Float($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
										case EBML_ID_DATEUTC:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
											$info_entry[$subelement['id_name']]         = getid3_lib::BigEndian2Int($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
											$info_entry[$subelement['id_name'].'_unix'] = self::EBMLdate2unix($info_entry[$subelement['id_name']]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
										case EBML_ID_SEGMENTUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
										case EBML_ID_PREVUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
										case EBML_ID_NEXTUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
											$info_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
										case EBML_ID_SEGMENTFAMILY:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
											$info_entry[$subelement['id_name']][] = getid3_lib::trimNullByte($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
										case EBML_ID_SEGMENTFILENAME:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
										case EBML_ID_PREVFILENAME:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
										case EBML_ID_NEXTFILENAME:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
										case EBML_ID_TITLE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
										case EBML_ID_MUXINGAPP:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
										case EBML_ID_WRITINGAPP:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
											$info_entry[$subelement['id_name']] = getid3_lib::trimNullByte($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
											$info['matroska']['comments'][strtolower($subelement['id_name'])][] = $info_entry[$subelement['id_name']];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
										case EBML_ID_CHAPTERTRANSLATE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
											$chaptertranslate_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
											while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
												switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
													case EBML_ID_CHAPTERTRANSLATEEDITIONUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
														$chaptertranslate_entry[$sub_subelement['id_name']][] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
													case EBML_ID_CHAPTERTRANSLATECODEC:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
														$chaptertranslate_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
													case EBML_ID_CHAPTERTRANSLATEID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
														$chaptertranslate_entry[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
														$this->unhandledElement('info.chaptertranslate', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   893
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
											$info_entry[$subelement['id_name']] = $chaptertranslate_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
										default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
											$this->unhandledElement('info', __LINE__, $subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   901
											break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
								$info['matroska']['info'][] = $info_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
							case 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.
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   908
								if ($this->hide_clusters) { // do not parse cues if hide clusters is "ON" till they point to clusters anyway
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
									$this->current_offset = $element_data['end'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
								$cues_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
								while ($this->getEBMLelement($subelement, $element_data['end'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
									switch ($subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
										case EBML_ID_CUEPOINT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
											$cuepoint_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
											while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CUETRACKPOSITIONS))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
												switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
													case EBML_ID_CUETRACKPOSITIONS:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
														$cuetrackpositions_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
														while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
															switch ($sub_sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
																case EBML_ID_CUETRACK:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
																case EBML_ID_CUECLUSTERPOSITION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
																case EBML_ID_CUEBLOCKNUMBER:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
																case EBML_ID_CUECODECSTATE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
																	$cuetrackpositions_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
																default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
																	$this->unhandledElement('cues.cuepoint.cuetrackpositions', __LINE__, $sub_sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   938
																	break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
															}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
														}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
														$cuepoint_entry[$sub_subelement['id_name']][] = $cuetrackpositions_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
													case EBML_ID_CUETIME:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
														$cuepoint_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
														$this->unhandledElement('cues.cuepoint', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   950
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
											$cues_entry[] = $cuepoint_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
										default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
											$this->unhandledElement('cues', __LINE__, $subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   958
											break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
								$info['matroska']['cues'] = $cues_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
							case EBML_ID_TAGS: // Element containing elements specific to Tracks/Chapters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
								$tags_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
								while ($this->getEBMLelement($subelement, $element_data['end'], false)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
									switch ($subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
										case EBML_ID_TAG:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
											$tag_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
											while ($this->getEBMLelement($sub_subelement, $subelement['end'], false)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
												switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
													case EBML_ID_TARGETS:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
														$targets_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
														while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
															switch ($sub_sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
																case EBML_ID_TARGETTYPEVALUE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
																	$targets_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
																	$targets_entry[strtolower($sub_sub_subelement['id_name']).'_long'] = self::TargetTypeValue($targets_entry[$sub_sub_subelement['id_name']]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   986
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   987
																case EBML_ID_TARGETTYPE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
																	$targets_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
																case EBML_ID_TAGTRACKUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
																case EBML_ID_TAGEDITIONUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
																case EBML_ID_TAGCHAPTERUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
																case EBML_ID_TAGATTACHMENTUID:
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   995
																	$targets_entry[$sub_sub_subelement['id_name']][] = getid3_lib::PrintHexBytes($sub_sub_subelement['data'], true, false);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
																default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
																	$this->unhandledElement('tags.tag.targets', __LINE__, $sub_sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1000
																	break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
															}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
														}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
														$tag_entry[$sub_subelement['id_name']] = $targets_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
													case EBML_ID_SIMPLETAG:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
														$tag_entry[$sub_subelement['id_name']][] = $this->HandleEMBLSimpleTag($sub_subelement['end']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
														$this->unhandledElement('tags.tag', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1012
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
											$tags_entry[] = $tag_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
										default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
											$this->unhandledElement('tags', __LINE__, $subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1020
											break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
								$info['matroska']['tags'] = $tags_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
							case EBML_ID_ATTACHMENTS: // Contain attached files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
								while ($this->getEBMLelement($subelement, $element_data['end'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
									switch ($subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
										case EBML_ID_ATTACHEDFILE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
											$attachedfile_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
											while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_FILEDATA))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
												switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
													case EBML_ID_FILEDESCRIPTION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
													case EBML_ID_FILENAME:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
													case EBML_ID_FILEMIMETYPE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
														$attachedfile_entry[$sub_subelement['id_name']] = $sub_subelement['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
													case EBML_ID_FILEDATA:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
														$attachedfile_entry['data_offset'] = $this->current_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
														$attachedfile_entry['data_length'] = $sub_subelement['length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
														$attachedfile_entry[$sub_subelement['id_name']] = $this->saveAttachment(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
															$attachedfile_entry['FileName'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
															$attachedfile_entry['data_offset'],
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
															$attachedfile_entry['data_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
														$this->current_offset = $sub_subelement['end'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
													case EBML_ID_FILEUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
														$attachedfile_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
														$this->unhandledElement('attachments.attachedfile', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1061
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
											$info['matroska']['attachments'][] = $attachedfile_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
										default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
											$this->unhandledElement('attachments', __LINE__, $subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1069
											break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
							case EBML_ID_CHAPTERS:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
								while ($this->getEBMLelement($subelement, $element_data['end'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
									switch ($subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
										case EBML_ID_EDITIONENTRY:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
											$editionentry_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
											while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CHAPTERATOM))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
												switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
													case EBML_ID_EDITIONUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
														$editionentry_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
													case EBML_ID_EDITIONFLAGHIDDEN:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
													case EBML_ID_EDITIONFLAGDEFAULT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
													case EBML_ID_EDITIONFLAGORDERED:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
														$editionentry_entry[$sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
													case EBML_ID_CHAPTERATOM:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
														$chapteratom_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
														while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(EBML_ID_CHAPTERTRACK, EBML_ID_CHAPTERDISPLAY))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
															switch ($sub_sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
																case EBML_ID_CHAPTERSEGMENTUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
																case EBML_ID_CHAPTERSEGMENTEDITIONUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
																	$chapteratom_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
																case EBML_ID_CHAPTERFLAGENABLED:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
																case EBML_ID_CHAPTERFLAGHIDDEN:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
																	$chapteratom_entry[$sub_sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
																case EBML_ID_CHAPTERUID:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
																case EBML_ID_CHAPTERTIMESTART:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
																case EBML_ID_CHAPTERTIMEEND:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
																	$chapteratom_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
																case EBML_ID_CHAPTERTRACK:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
																	$chaptertrack_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
																	while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
																		switch ($sub_sub_sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
																			case EBML_ID_CHAPTERTRACKNUMBER:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
																				$chaptertrack_entry[$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
																				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
																			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
																				$this->unhandledElement('chapters.editionentry.chapteratom.chaptertrack', __LINE__, $sub_sub_sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1129
																				break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
																		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
																	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
																	$chapteratom_entry[$sub_sub_subelement['id_name']][] = $chaptertrack_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
																case EBML_ID_CHAPTERDISPLAY:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
																	$chapterdisplay_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
																	while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
																		switch ($sub_sub_sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
																			case EBML_ID_CHAPSTRING:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
																			case EBML_ID_CHAPLANGUAGE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
																			case EBML_ID_CHAPCOUNTRY:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
																				$chapterdisplay_entry[$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
																				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
																			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
																				$this->unhandledElement('chapters.editionentry.chapteratom.chapterdisplay', __LINE__, $sub_sub_sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1149
																				break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
																		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
																	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
																	$chapteratom_entry[$sub_sub_subelement['id_name']][] = $chapterdisplay_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
																	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
																default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
																	$this->unhandledElement('chapters.editionentry.chapteratom', __LINE__, $sub_sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1157
																	break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
															}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
														}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
														$editionentry_entry[$sub_subelement['id_name']][] = $chapteratom_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
														$this->unhandledElement('chapters.editionentry', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1165
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
											$info['matroska']['chapters'][] = $editionentry_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
										default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
											$this->unhandledElement('chapters', __LINE__, $subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1173
											break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
							case EBML_ID_CLUSTER: // The lower level element containing the (monolithic) Block structure.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
								$cluster_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
								while ($this->getEBMLelement($subelement, $element_data['end'], array(EBML_ID_CLUSTERSILENTTRACKS, EBML_ID_CLUSTERBLOCKGROUP, EBML_ID_CLUSTERSIMPLEBLOCK))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
									switch ($subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
										case EBML_ID_CLUSTERTIMECODE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
										case EBML_ID_CLUSTERPOSITION:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
										case EBML_ID_CLUSTERPREVSIZE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
											$cluster_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
										case EBML_ID_CLUSTERSILENTTRACKS:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
											$cluster_silent_tracks = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
											while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
												switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
													case EBML_ID_CLUSTERSILENTTRACKNUMBER:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
														$cluster_silent_tracks[] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
														$this->unhandledElement('cluster.silenttracks', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1202
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
											$cluster_entry[$subelement['id_name']][] = $cluster_silent_tracks;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
										case EBML_ID_CLUSTERBLOCKGROUP:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
											$cluster_block_group = array('offset' => $this->current_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
											while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CLUSTERBLOCK))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
												switch ($sub_subelement['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
													case EBML_ID_CLUSTERBLOCK:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
														$cluster_block_group[$sub_subelement['id_name']] = $this->HandleEMBLClusterBlock($sub_subelement, EBML_ID_CLUSTERBLOCK, $info);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
													case EBML_ID_CLUSTERREFERENCEPRIORITY: // unsigned-int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
													case EBML_ID_CLUSTERBLOCKDURATION:     // unsigned-int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
														$cluster_block_group[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
													case EBML_ID_CLUSTERREFERENCEBLOCK:    // signed-int
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
														$cluster_block_group[$sub_subelement['id_name']][] = getid3_lib::BigEndian2Int($sub_subelement['data'], false, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
													case EBML_ID_CLUSTERCODECSTATE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
														$cluster_block_group[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
														break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
													default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
														$this->unhandledElement('clusters.blockgroup', __LINE__, $sub_subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1233
														break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
											$cluster_entry[$subelement['id_name']][] = $cluster_block_group;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
										case EBML_ID_CLUSTERSIMPLEBLOCK:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
											$cluster_entry[$subelement['id_name']][] = $this->HandleEMBLClusterBlock($subelement, EBML_ID_CLUSTERSIMPLEBLOCK, $info);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
										default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
											$this->unhandledElement('cluster', __LINE__, $subelement);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1245
											break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
									$this->current_offset = $subelement['end'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
								}
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1249
								if (!$this->hide_clusters) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
									$info['matroska']['cluster'][] = $cluster_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
								// check to see if all the data we need exists already, if so, break out of the loop
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1254
								if (!$this->parse_whole_file) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
									if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
										if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
											if (count($info['matroska']['track_data_offsets']) == count($info['matroska']['tracks']['tracks'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
												return;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
							default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
								$this->unhandledElement('segment', __LINE__, $element_data);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1267
								break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
					$this->unhandledElement('root', __LINE__, $top_element);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1274
					break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1279
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1280
	 * @param int $min_data
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1281
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1282
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1283
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
	private function EnsureBufferHasEnoughData($min_data=1024) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
		if (($this->current_offset - $this->EBMLbuffer_offset) >= ($this->EBMLbuffer_length - $min_data)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
			$read_bytes = max($min_data, $this->getid3->fread_buffer_size());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
			try {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
				$this->fseek($this->current_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
				$this->EBMLbuffer_offset = $this->current_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
				$this->EBMLbuffer        = $this->fread($read_bytes);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
				$this->EBMLbuffer_length = strlen($this->EBMLbuffer);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
			} catch (getid3_exception $e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
				$this->warning('EBML parser: '.$e->getMessage());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
			if ($this->EBMLbuffer_length == 0 && $this->feof()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
				return $this->error('EBML parser: ran out of file at offset '.$this->current_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1305
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1306
	 * @return int|float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1307
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
	private function readEBMLint() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
		$actual_offset = $this->current_offset - $this->EBMLbuffer_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
		// get length of integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
		$first_byte_int = ord($this->EBMLbuffer[$actual_offset]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
		if       (0x80 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
			$length = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
		} elseif (0x40 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
			$length = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
		} elseif (0x20 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
			$length = 3;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
		} elseif (0x10 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
			$length = 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
		} elseif (0x08 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
			$length = 5;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
		} elseif (0x04 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
			$length = 6;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
		} elseif (0x02 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
			$length = 7;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
		} elseif (0x01 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
			$length = 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
		} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
			throw new Exception('invalid EBML integer (leading 0x00) at '.$this->current_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
		// read
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
		$int_value = self::EBML2Int(substr($this->EBMLbuffer, $actual_offset, $length));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
		$this->current_offset += $length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
		return $int_value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1340
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1341
	 * @param int  $length
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1342
	 * @param bool $check_buffer
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1343
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1344
	 * @return string|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1345
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
	private function readEBMLelementData($length, $check_buffer=false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
		if ($check_buffer && !$this->EnsureBufferHasEnoughData($length)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
		$data = substr($this->EBMLbuffer, $this->current_offset - $this->EBMLbuffer_offset, $length);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
		$this->current_offset += $length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
		return $data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1355
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1356
	 * @param array      $element
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1357
	 * @param int        $parent_end
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1358
	 * @param array|bool $get_data
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1359
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1360
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1361
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
	private function getEBMLelement(&$element, $parent_end, $get_data=false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
		if ($this->current_offset >= $parent_end) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
		if (!$this->EnsureBufferHasEnoughData()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
			$this->current_offset = PHP_INT_MAX; // do not exit parser right now, allow to finish current loop to gather maximum information
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
			return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
		$element = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
		// set offset
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
		$element['offset'] = $this->current_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
		// get ID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
		$element['id'] = $this->readEBMLint();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
		// get name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
		$element['id_name'] = self::EBMLidName($element['id']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
		// get length
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
		$element['length'] = $this->readEBMLint();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
		// get end offset
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
		$element['end'] = $this->current_offset + $element['length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
		// get raw data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
		$dont_parse = (in_array($element['id'], $this->unuseful_elements) || $element['id_name'] == dechex($element['id']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
		if (($get_data === true || (is_array($get_data) && !in_array($element['id'], $get_data))) && !$dont_parse) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
			$element['data'] = $this->readEBMLelementData($element['length'], $element);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1398
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1399
	 * @param string $type
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1400
	 * @param int    $line
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1401
	 * @param array  $element
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1402
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
	private function unhandledElement($type, $line, $element) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
		// warn only about unknown and missed elements, not about unuseful
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
		if (!in_array($element['id'], $this->unuseful_elements)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
			$this->warning('Unhandled '.$type.' element ['.basename(__FILE__).':'.$line.'] ('.$element['id'].'::'.$element['id_name'].' ['.$element['length'].' bytes]) at '.$element['offset']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
		// increase offset for unparsed elements
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
		if (!isset($element['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
			$this->current_offset = $element['end'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1415
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1416
	 * @param array $SimpleTagArray
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1417
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1418
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1419
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
	private function ExtractCommentsSimpleTag($SimpleTagArray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
		if (!empty($SimpleTagArray['SimpleTag'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
			foreach ($SimpleTagArray['SimpleTag'] as $SimpleTagKey => $SimpleTagData) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
				if (!empty($SimpleTagData['TagName']) && !empty($SimpleTagData['TagString'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
					$this->getid3->info['matroska']['comments'][strtolower($SimpleTagData['TagName'])][] = $SimpleTagData['TagString'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
				if (!empty($SimpleTagData['SimpleTag'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
					$this->ExtractCommentsSimpleTag($SimpleTagData);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1435
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1436
	 * @param int $parent_end
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1437
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1438
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1439
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
	private function HandleEMBLSimpleTag($parent_end) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
		$simpletag_entry = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
		while ($this->getEBMLelement($element, $parent_end, array(EBML_ID_SIMPLETAG))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
			switch ($element['id']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
				case EBML_ID_TAGNAME:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
				case EBML_ID_TAGLANGUAGE:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
				case EBML_ID_TAGSTRING:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
				case EBML_ID_TAGBINARY:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
					$simpletag_entry[$element['id_name']] = $element['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
				case EBML_ID_SIMPLETAG:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
					$simpletag_entry[$element['id_name']][] = $this->HandleEMBLSimpleTag($element['end']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
				case EBML_ID_TAGDEFAULT:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
					$simpletag_entry[$element['id_name']] = (bool)getid3_lib::BigEndian2Int($element['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
					$this->unhandledElement('tag.simpletag', __LINE__, $element);
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1463
					break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
		return $simpletag_entry;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1470
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1471
	 * @param array $element
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1472
	 * @param int   $block_type
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1473
	 * @param array $info
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1474
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1475
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1476
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
	private function HandleEMBLClusterBlock($element, $block_type, &$info) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
		// http://www.matroska.org/technical/specs/index.html#block_structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
		// http://www.matroska.org/technical/specs/index.html#simpleblock_structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
		$block_data = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
		$block_data['tracknumber'] = $this->readEBMLint();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
		$block_data['timecode']    = getid3_lib::BigEndian2Int($this->readEBMLelementData(2), false, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
		$block_data['flags_raw']   = getid3_lib::BigEndian2Int($this->readEBMLelementData(1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
		if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
			$block_data['flags']['keyframe']  = (($block_data['flags_raw'] & 0x80) >> 7);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
			//$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0x70) >> 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
		else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
			//$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0xF0) >> 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
		$block_data['flags']['invisible'] = (bool)(($block_data['flags_raw'] & 0x08) >> 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
		$block_data['flags']['lacing']    =       (($block_data['flags_raw'] & 0x06) >> 1);  // 00=no lacing; 01=Xiph lacing; 11=EBML lacing; 10=fixed-size lacing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
		if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
			$block_data['flags']['discardable'] = (($block_data['flags_raw'] & 0x01));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
		else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
			//$block_data['flags']['reserved2'] = (($block_data['flags_raw'] & 0x01) >> 0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
		$block_data['flags']['lacing_type'] = self::BlockLacingType($block_data['flags']['lacing']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
		// Lace (when lacing bit is set)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
		if ($block_data['flags']['lacing'] > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
			$block_data['lace_frames'] = getid3_lib::BigEndian2Int($this->readEBMLelementData(1)) + 1; // Number of frames in the lace-1 (uint8)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
			if ($block_data['flags']['lacing'] != 0x02) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
				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).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
					if ($block_data['flags']['lacing'] == 0x03) { // EBML lacing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
						$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.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
					else { // Xiph lacing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
						$block_data['lace_frames_size'][$i] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
						do {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
							$size = getid3_lib::BigEndian2Int($this->readEBMLelementData(1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
							$block_data['lace_frames_size'][$i] += $size;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
						while ($size == 255);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
				if ($block_data['flags']['lacing'] == 0x01) { // calc size of the last frame only for Xiph lacing, till EBML sizes are now anyway determined incorrectly
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
					$block_data['lace_frames_size'][] = $element['end'] - $this->current_offset - array_sum($block_data['lace_frames_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
		if (!isset($info['matroska']['track_data_offsets'][$block_data['tracknumber']])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
			$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['offset'] = $this->current_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
			$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length'] = $element['end'] - $this->current_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
			//$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['total_length'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
		//$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['total_length'] += $info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
		//$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);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
		// set offset manually
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
		$this->current_offset = $element['end'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
		return $block_data;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1540
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1541
	 * @param string $EBMLstring
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1542
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1543
	 * @return int|float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1544
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
	private static function EBML2Int($EBMLstring) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
		// http://matroska.org/specs/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
		// Element ID coded with an UTF-8 like system:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
		// 1xxx xxxx                                  - Class A IDs (2^7 -2 possible values) (base 0x8X)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
		// 01xx xxxx  xxxx xxxx                       - Class B IDs (2^14-2 possible values) (base 0x4X 0xXX)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
		// 001x xxxx  xxxx xxxx  xxxx xxxx            - Class C IDs (2^21-2 possible values) (base 0x2X 0xXX 0xXX)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
		// 0001 xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx - Class D IDs (2^28-2 possible values) (base 0x1X 0xXX 0xXX 0xXX)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
		// Values with all x at 0 and 1 are reserved (hence the -2).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
		// Data size, in octets, is also coded with an UTF-8 like system :
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
		// 1xxx xxxx                                                                              - value 0 to  2^7-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
		// 01xx xxxx  xxxx xxxx                                                                   - value 0 to 2^14-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
		// 001x xxxx  xxxx xxxx  xxxx xxxx                                                        - value 0 to 2^21-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
		// 0001 xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                                             - value 0 to 2^28-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
		// 0000 1xxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                                  - value 0 to 2^35-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
		// 0000 01xx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx                       - value 0 to 2^42-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
		// 0000 001x  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx            - value 0 to 2^49-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
		// 0000 0001  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx  xxxx xxxx - value 0 to 2^56-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
		$first_byte_int = ord($EBMLstring[0]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
		if (0x80 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
			$EBMLstring[0] = chr($first_byte_int & 0x7F);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
		} elseif (0x40 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
			$EBMLstring[0] = chr($first_byte_int & 0x3F);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
		} elseif (0x20 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
			$EBMLstring[0] = chr($first_byte_int & 0x1F);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
		} elseif (0x10 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
			$EBMLstring[0] = chr($first_byte_int & 0x0F);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
		} elseif (0x08 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
			$EBMLstring[0] = chr($first_byte_int & 0x07);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
		} elseif (0x04 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
			$EBMLstring[0] = chr($first_byte_int & 0x03);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
		} elseif (0x02 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
			$EBMLstring[0] = chr($first_byte_int & 0x01);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
		} elseif (0x01 & $first_byte_int) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
			$EBMLstring[0] = chr($first_byte_int & 0x00);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
		return getid3_lib::BigEndian2Int($EBMLstring);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1587
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1588
	 * @param int $EBMLdatestamp
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1589
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1590
	 * @return float
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1591
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
	private static function EBMLdate2unix($EBMLdatestamp) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
		// Date - signed 8 octets integer in nanoseconds with 0 indicating the precise beginning of the millennium (at 2001-01-01T00:00:00,000000000 UTC)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
		// 978307200 == mktime(0, 0, 0, 1, 1, 2001) == January 1, 2001 12:00:00am UTC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
		return round(($EBMLdatestamp / 1000000000) + 978307200);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1598
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1599
	 * @param int $target_type
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1600
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1601
	 * @return string|int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1602
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
	public static function TargetTypeValue($target_type) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
		// http://www.matroska.org/technical/specs/tagging/index.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
		static $TargetTypeValue = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
		if (empty($TargetTypeValue)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
			$TargetTypeValue[10] = 'A: ~ V:shot';                                           // the lowest hierarchy found in music or movies
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
			$TargetTypeValue[20] = 'A:subtrack/part/movement ~ V:scene';                    // corresponds to parts of a track for audio (like a movement)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
			$TargetTypeValue[30] = 'A:track/song ~ V:chapter';                              // the common parts of an album or a movie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
			$TargetTypeValue[40] = 'A:part/session ~ V:part/session';                       // when an album or episode has different logical parts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
			$TargetTypeValue[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)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
			$TargetTypeValue[60] = 'A:edition/issue/volume/opus ~ V:season/sequel/volume';  // a list of lower levels grouped together
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
			$TargetTypeValue[70] = 'A:collection ~ V:collection';                           // the high hierarchy consisting of many different lower items
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
		return (isset($TargetTypeValue[$target_type]) ? $TargetTypeValue[$target_type] : $target_type);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1618
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1619
	 * @param int $lacingtype
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1620
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1621
	 * @return string|int
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1622
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
	public static function BlockLacingType($lacingtype) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
		// http://matroska.org/technical/specs/index.html#block_structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
		static $BlockLacingType = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
		if (empty($BlockLacingType)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
			$BlockLacingType[0x00] = 'no lacing';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
			$BlockLacingType[0x01] = 'Xiph lacing';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
			$BlockLacingType[0x02] = 'fixed-size lacing';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
			$BlockLacingType[0x03] = 'EBML lacing';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
		return (isset($BlockLacingType[$lacingtype]) ? $BlockLacingType[$lacingtype] : $lacingtype);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1635
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1636
	 * @param string $codecid
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1637
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1638
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1639
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
	public static function CodecIDtoCommonName($codecid) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
		// http://www.matroska.org/technical/specs/codecid/index.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
		static $CodecIDlist = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
		if (empty($CodecIDlist)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
			$CodecIDlist['A_AAC']            = 'aac';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
			$CodecIDlist['A_AAC/MPEG2/LC']   = 'aac';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
			$CodecIDlist['A_AC3']            = 'ac3';
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1647
			$CodecIDlist['A_EAC3']           = 'eac3';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
			$CodecIDlist['A_DTS']            = 'dts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
			$CodecIDlist['A_FLAC']           = 'flac';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
			$CodecIDlist['A_MPEG/L1']        = 'mp1';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
			$CodecIDlist['A_MPEG/L2']        = 'mp2';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
			$CodecIDlist['A_MPEG/L3']        = 'mp3';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
			$CodecIDlist['A_PCM/INT/LIT']    = 'pcm';       // PCM Integer Little Endian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
			$CodecIDlist['A_PCM/INT/BIG']    = 'pcm';       // PCM Integer Big Endian
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
			$CodecIDlist['A_QUICKTIME/QDMC'] = 'quicktime'; // Quicktime: QDesign Music
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
			$CodecIDlist['A_QUICKTIME/QDM2'] = 'quicktime'; // Quicktime: QDesign Music v2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
			$CodecIDlist['A_VORBIS']         = 'vorbis';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
			$CodecIDlist['V_MPEG1']          = 'mpeg';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
			$CodecIDlist['V_THEORA']         = 'theora';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
			$CodecIDlist['V_REAL/RV40']      = 'real';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
			$CodecIDlist['V_REAL/RV10']      = 'real';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
			$CodecIDlist['V_REAL/RV20']      = 'real';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
			$CodecIDlist['V_REAL/RV30']      = 'real';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
			$CodecIDlist['V_QUICKTIME']      = 'quicktime'; // Quicktime
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
			$CodecIDlist['V_MPEG4/ISO/AP']   = 'mpeg4';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
			$CodecIDlist['V_MPEG4/ISO/ASP']  = 'mpeg4';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
			$CodecIDlist['V_MPEG4/ISO/AVC']  = 'h264';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
			$CodecIDlist['V_MPEG4/ISO/SP']   = 'mpeg4';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
			$CodecIDlist['V_VP8']            = 'vp8';
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1670
			$CodecIDlist['V_MS/VFW/FOURCC']  = 'vcm'; // Microsoft (TM) Video Codec Manager (VCM)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1671
			$CodecIDlist['A_MS/ACM']         = 'acm'; // Microsoft (TM) Audio Codec Manager (ACM)
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
		return (isset($CodecIDlist[$codecid]) ? $CodecIDlist[$codecid] : $codecid);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1676
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1677
	 * @param int $value
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1678
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1679
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1680
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
	private static function EBMLidName($value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
		static $EBMLidList = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
		if (empty($EBMLidList)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
			$EBMLidList[EBML_ID_ASPECTRATIOTYPE]            = 'AspectRatioType';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
			$EBMLidList[EBML_ID_ATTACHEDFILE]               = 'AttachedFile';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
			$EBMLidList[EBML_ID_ATTACHMENTLINK]             = 'AttachmentLink';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
			$EBMLidList[EBML_ID_ATTACHMENTS]                = 'Attachments';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
			$EBMLidList[EBML_ID_AUDIO]                      = 'Audio';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
			$EBMLidList[EBML_ID_BITDEPTH]                   = 'BitDepth';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
			$EBMLidList[EBML_ID_CHANNELPOSITIONS]           = 'ChannelPositions';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
			$EBMLidList[EBML_ID_CHANNELS]                   = 'Channels';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
			$EBMLidList[EBML_ID_CHAPCOUNTRY]                = 'ChapCountry';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
			$EBMLidList[EBML_ID_CHAPLANGUAGE]               = 'ChapLanguage';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
			$EBMLidList[EBML_ID_CHAPPROCESS]                = 'ChapProcess';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
			$EBMLidList[EBML_ID_CHAPPROCESSCODECID]         = 'ChapProcessCodecID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
			$EBMLidList[EBML_ID_CHAPPROCESSCOMMAND]         = 'ChapProcessCommand';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
			$EBMLidList[EBML_ID_CHAPPROCESSDATA]            = 'ChapProcessData';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
			$EBMLidList[EBML_ID_CHAPPROCESSPRIVATE]         = 'ChapProcessPrivate';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
			$EBMLidList[EBML_ID_CHAPPROCESSTIME]            = 'ChapProcessTime';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
			$EBMLidList[EBML_ID_CHAPSTRING]                 = 'ChapString';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
			$EBMLidList[EBML_ID_CHAPTERATOM]                = 'ChapterAtom';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
			$EBMLidList[EBML_ID_CHAPTERDISPLAY]             = 'ChapterDisplay';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
			$EBMLidList[EBML_ID_CHAPTERFLAGENABLED]         = 'ChapterFlagEnabled';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
			$EBMLidList[EBML_ID_CHAPTERFLAGHIDDEN]          = 'ChapterFlagHidden';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
			$EBMLidList[EBML_ID_CHAPTERPHYSICALEQUIV]       = 'ChapterPhysicalEquiv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
			$EBMLidList[EBML_ID_CHAPTERS]                   = 'Chapters';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
			$EBMLidList[EBML_ID_CHAPTERSEGMENTEDITIONUID]   = 'ChapterSegmentEditionUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
			$EBMLidList[EBML_ID_CHAPTERSEGMENTUID]          = 'ChapterSegmentUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
			$EBMLidList[EBML_ID_CHAPTERTIMEEND]             = 'ChapterTimeEnd';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
			$EBMLidList[EBML_ID_CHAPTERTIMESTART]           = 'ChapterTimeStart';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
			$EBMLidList[EBML_ID_CHAPTERTRACK]               = 'ChapterTrack';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
			$EBMLidList[EBML_ID_CHAPTERTRACKNUMBER]         = 'ChapterTrackNumber';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
			$EBMLidList[EBML_ID_CHAPTERTRANSLATE]           = 'ChapterTranslate';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
			$EBMLidList[EBML_ID_CHAPTERTRANSLATECODEC]      = 'ChapterTranslateCodec';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
			$EBMLidList[EBML_ID_CHAPTERTRANSLATEEDITIONUID] = 'ChapterTranslateEditionUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
			$EBMLidList[EBML_ID_CHAPTERTRANSLATEID]         = 'ChapterTranslateID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
			$EBMLidList[EBML_ID_CHAPTERUID]                 = 'ChapterUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
			$EBMLidList[EBML_ID_CLUSTER]                    = 'Cluster';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
			$EBMLidList[EBML_ID_CLUSTERBLOCK]               = 'ClusterBlock';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
			$EBMLidList[EBML_ID_CLUSTERBLOCKADDID]          = 'ClusterBlockAddID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
			$EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONAL]     = 'ClusterBlockAdditional';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
			$EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONID]     = 'ClusterBlockAdditionID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
			$EBMLidList[EBML_ID_CLUSTERBLOCKADDITIONS]      = 'ClusterBlockAdditions';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
			$EBMLidList[EBML_ID_CLUSTERBLOCKDURATION]       = 'ClusterBlockDuration';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
			$EBMLidList[EBML_ID_CLUSTERBLOCKGROUP]          = 'ClusterBlockGroup';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
			$EBMLidList[EBML_ID_CLUSTERBLOCKMORE]           = 'ClusterBlockMore';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
			$EBMLidList[EBML_ID_CLUSTERBLOCKVIRTUAL]        = 'ClusterBlockVirtual';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
			$EBMLidList[EBML_ID_CLUSTERCODECSTATE]          = 'ClusterCodecState';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
			$EBMLidList[EBML_ID_CLUSTERDELAY]               = 'ClusterDelay';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
			$EBMLidList[EBML_ID_CLUSTERDURATION]            = 'ClusterDuration';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
			$EBMLidList[EBML_ID_CLUSTERENCRYPTEDBLOCK]      = 'ClusterEncryptedBlock';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
			$EBMLidList[EBML_ID_CLUSTERFRAMENUMBER]         = 'ClusterFrameNumber';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
			$EBMLidList[EBML_ID_CLUSTERLACENUMBER]          = 'ClusterLaceNumber';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
			$EBMLidList[EBML_ID_CLUSTERPOSITION]            = 'ClusterPosition';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
			$EBMLidList[EBML_ID_CLUSTERPREVSIZE]            = 'ClusterPrevSize';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
			$EBMLidList[EBML_ID_CLUSTERREFERENCEBLOCK]      = 'ClusterReferenceBlock';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
			$EBMLidList[EBML_ID_CLUSTERREFERENCEPRIORITY]   = 'ClusterReferencePriority';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
			$EBMLidList[EBML_ID_CLUSTERREFERENCEVIRTUAL]    = 'ClusterReferenceVirtual';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
			$EBMLidList[EBML_ID_CLUSTERSILENTTRACKNUMBER]   = 'ClusterSilentTrackNumber';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
			$EBMLidList[EBML_ID_CLUSTERSILENTTRACKS]        = 'ClusterSilentTracks';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
			$EBMLidList[EBML_ID_CLUSTERSIMPLEBLOCK]         = 'ClusterSimpleBlock';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
			$EBMLidList[EBML_ID_CLUSTERTIMECODE]            = 'ClusterTimecode';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
			$EBMLidList[EBML_ID_CLUSTERTIMESLICE]           = 'ClusterTimeSlice';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
			$EBMLidList[EBML_ID_CODECDECODEALL]             = 'CodecDecodeAll';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
			$EBMLidList[EBML_ID_CODECDOWNLOADURL]           = 'CodecDownloadURL';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
			$EBMLidList[EBML_ID_CODECID]                    = 'CodecID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
			$EBMLidList[EBML_ID_CODECINFOURL]               = 'CodecInfoURL';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
			$EBMLidList[EBML_ID_CODECNAME]                  = 'CodecName';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
			$EBMLidList[EBML_ID_CODECPRIVATE]               = 'CodecPrivate';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
			$EBMLidList[EBML_ID_CODECSETTINGS]              = 'CodecSettings';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
			$EBMLidList[EBML_ID_COLOURSPACE]                = 'ColourSpace';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
			$EBMLidList[EBML_ID_CONTENTCOMPALGO]            = 'ContentCompAlgo';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
			$EBMLidList[EBML_ID_CONTENTCOMPRESSION]         = 'ContentCompression';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
			$EBMLidList[EBML_ID_CONTENTCOMPSETTINGS]        = 'ContentCompSettings';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
			$EBMLidList[EBML_ID_CONTENTENCALGO]             = 'ContentEncAlgo';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
			$EBMLidList[EBML_ID_CONTENTENCKEYID]            = 'ContentEncKeyID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
			$EBMLidList[EBML_ID_CONTENTENCODING]            = 'ContentEncoding';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
			$EBMLidList[EBML_ID_CONTENTENCODINGORDER]       = 'ContentEncodingOrder';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
			$EBMLidList[EBML_ID_CONTENTENCODINGS]           = 'ContentEncodings';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
			$EBMLidList[EBML_ID_CONTENTENCODINGSCOPE]       = 'ContentEncodingScope';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
			$EBMLidList[EBML_ID_CONTENTENCODINGTYPE]        = 'ContentEncodingType';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
			$EBMLidList[EBML_ID_CONTENTENCRYPTION]          = 'ContentEncryption';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
			$EBMLidList[EBML_ID_CONTENTSIGALGO]             = 'ContentSigAlgo';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
			$EBMLidList[EBML_ID_CONTENTSIGHASHALGO]         = 'ContentSigHashAlgo';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
			$EBMLidList[EBML_ID_CONTENTSIGKEYID]            = 'ContentSigKeyID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
			$EBMLidList[EBML_ID_CONTENTSIGNATURE]           = 'ContentSignature';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
			$EBMLidList[EBML_ID_CRC32]                      = 'CRC32';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
			$EBMLidList[EBML_ID_CUEBLOCKNUMBER]             = 'CueBlockNumber';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
			$EBMLidList[EBML_ID_CUECLUSTERPOSITION]         = 'CueClusterPosition';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
			$EBMLidList[EBML_ID_CUECODECSTATE]              = 'CueCodecState';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
			$EBMLidList[EBML_ID_CUEPOINT]                   = 'CuePoint';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
			$EBMLidList[EBML_ID_CUEREFCLUSTER]              = 'CueRefCluster';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
			$EBMLidList[EBML_ID_CUEREFCODECSTATE]           = 'CueRefCodecState';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
			$EBMLidList[EBML_ID_CUEREFERENCE]               = 'CueReference';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
			$EBMLidList[EBML_ID_CUEREFNUMBER]               = 'CueRefNumber';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
			$EBMLidList[EBML_ID_CUEREFTIME]                 = 'CueRefTime';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
			$EBMLidList[EBML_ID_CUES]                       = 'Cues';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
			$EBMLidList[EBML_ID_CUETIME]                    = 'CueTime';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
			$EBMLidList[EBML_ID_CUETRACK]                   = 'CueTrack';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
			$EBMLidList[EBML_ID_CUETRACKPOSITIONS]          = 'CueTrackPositions';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
			$EBMLidList[EBML_ID_DATEUTC]                    = 'DateUTC';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
			$EBMLidList[EBML_ID_DEFAULTDURATION]            = 'DefaultDuration';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
			$EBMLidList[EBML_ID_DISPLAYHEIGHT]              = 'DisplayHeight';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
			$EBMLidList[EBML_ID_DISPLAYUNIT]                = 'DisplayUnit';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
			$EBMLidList[EBML_ID_DISPLAYWIDTH]               = 'DisplayWidth';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
			$EBMLidList[EBML_ID_DOCTYPE]                    = 'DocType';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
			$EBMLidList[EBML_ID_DOCTYPEREADVERSION]         = 'DocTypeReadVersion';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
			$EBMLidList[EBML_ID_DOCTYPEVERSION]             = 'DocTypeVersion';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
			$EBMLidList[EBML_ID_DURATION]                   = 'Duration';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
			$EBMLidList[EBML_ID_EBML]                       = 'EBML';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
			$EBMLidList[EBML_ID_EBMLMAXIDLENGTH]            = 'EBMLMaxIDLength';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
			$EBMLidList[EBML_ID_EBMLMAXSIZELENGTH]          = 'EBMLMaxSizeLength';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
			$EBMLidList[EBML_ID_EBMLREADVERSION]            = 'EBMLReadVersion';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
			$EBMLidList[EBML_ID_EBMLVERSION]                = 'EBMLVersion';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
			$EBMLidList[EBML_ID_EDITIONENTRY]               = 'EditionEntry';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
			$EBMLidList[EBML_ID_EDITIONFLAGDEFAULT]         = 'EditionFlagDefault';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
			$EBMLidList[EBML_ID_EDITIONFLAGHIDDEN]          = 'EditionFlagHidden';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
			$EBMLidList[EBML_ID_EDITIONFLAGORDERED]         = 'EditionFlagOrdered';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
			$EBMLidList[EBML_ID_EDITIONUID]                 = 'EditionUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
			$EBMLidList[EBML_ID_FILEDATA]                   = 'FileData';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
			$EBMLidList[EBML_ID_FILEDESCRIPTION]            = 'FileDescription';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
			$EBMLidList[EBML_ID_FILEMIMETYPE]               = 'FileMimeType';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
			$EBMLidList[EBML_ID_FILENAME]                   = 'FileName';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
			$EBMLidList[EBML_ID_FILEREFERRAL]               = 'FileReferral';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
			$EBMLidList[EBML_ID_FILEUID]                    = 'FileUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
			$EBMLidList[EBML_ID_FLAGDEFAULT]                = 'FlagDefault';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
			$EBMLidList[EBML_ID_FLAGENABLED]                = 'FlagEnabled';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
			$EBMLidList[EBML_ID_FLAGFORCED]                 = 'FlagForced';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
			$EBMLidList[EBML_ID_FLAGINTERLACED]             = 'FlagInterlaced';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
			$EBMLidList[EBML_ID_FLAGLACING]                 = 'FlagLacing';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
			$EBMLidList[EBML_ID_GAMMAVALUE]                 = 'GammaValue';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
			$EBMLidList[EBML_ID_INFO]                       = 'Info';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
			$EBMLidList[EBML_ID_LANGUAGE]                   = 'Language';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
			$EBMLidList[EBML_ID_MAXBLOCKADDITIONID]         = 'MaxBlockAdditionID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
			$EBMLidList[EBML_ID_MAXCACHE]                   = 'MaxCache';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
			$EBMLidList[EBML_ID_MINCACHE]                   = 'MinCache';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
			$EBMLidList[EBML_ID_MUXINGAPP]                  = 'MuxingApp';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
			$EBMLidList[EBML_ID_NAME]                       = 'Name';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
			$EBMLidList[EBML_ID_NEXTFILENAME]               = 'NextFilename';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
			$EBMLidList[EBML_ID_NEXTUID]                    = 'NextUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
			$EBMLidList[EBML_ID_OUTPUTSAMPLINGFREQUENCY]    = 'OutputSamplingFrequency';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
			$EBMLidList[EBML_ID_PIXELCROPBOTTOM]            = 'PixelCropBottom';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
			$EBMLidList[EBML_ID_PIXELCROPLEFT]              = 'PixelCropLeft';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
			$EBMLidList[EBML_ID_PIXELCROPRIGHT]             = 'PixelCropRight';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
			$EBMLidList[EBML_ID_PIXELCROPTOP]               = 'PixelCropTop';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
			$EBMLidList[EBML_ID_PIXELHEIGHT]                = 'PixelHeight';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
			$EBMLidList[EBML_ID_PIXELWIDTH]                 = 'PixelWidth';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
			$EBMLidList[EBML_ID_PREVFILENAME]               = 'PrevFilename';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
			$EBMLidList[EBML_ID_PREVUID]                    = 'PrevUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
			$EBMLidList[EBML_ID_SAMPLINGFREQUENCY]          = 'SamplingFrequency';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
			$EBMLidList[EBML_ID_SEEK]                       = 'Seek';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
			$EBMLidList[EBML_ID_SEEKHEAD]                   = 'SeekHead';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
			$EBMLidList[EBML_ID_SEEKID]                     = 'SeekID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
			$EBMLidList[EBML_ID_SEEKPOSITION]               = 'SeekPosition';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
			$EBMLidList[EBML_ID_SEGMENT]                    = 'Segment';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
			$EBMLidList[EBML_ID_SEGMENTFAMILY]              = 'SegmentFamily';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
			$EBMLidList[EBML_ID_SEGMENTFILENAME]            = 'SegmentFilename';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
			$EBMLidList[EBML_ID_SEGMENTUID]                 = 'SegmentUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
			$EBMLidList[EBML_ID_SIMPLETAG]                  = 'SimpleTag';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
			$EBMLidList[EBML_ID_CLUSTERSLICES]              = 'ClusterSlices';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
			$EBMLidList[EBML_ID_STEREOMODE]                 = 'StereoMode';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
			$EBMLidList[EBML_ID_OLDSTEREOMODE]              = 'OldStereoMode';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
			$EBMLidList[EBML_ID_TAG]                        = 'Tag';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
			$EBMLidList[EBML_ID_TAGATTACHMENTUID]           = 'TagAttachmentUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
			$EBMLidList[EBML_ID_TAGBINARY]                  = 'TagBinary';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
			$EBMLidList[EBML_ID_TAGCHAPTERUID]              = 'TagChapterUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
			$EBMLidList[EBML_ID_TAGDEFAULT]                 = 'TagDefault';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
			$EBMLidList[EBML_ID_TAGEDITIONUID]              = 'TagEditionUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
			$EBMLidList[EBML_ID_TAGLANGUAGE]                = 'TagLanguage';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
			$EBMLidList[EBML_ID_TAGNAME]                    = 'TagName';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
			$EBMLidList[EBML_ID_TAGTRACKUID]                = 'TagTrackUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
			$EBMLidList[EBML_ID_TAGS]                       = 'Tags';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
			$EBMLidList[EBML_ID_TAGSTRING]                  = 'TagString';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
			$EBMLidList[EBML_ID_TARGETS]                    = 'Targets';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
			$EBMLidList[EBML_ID_TARGETTYPE]                 = 'TargetType';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
			$EBMLidList[EBML_ID_TARGETTYPEVALUE]            = 'TargetTypeValue';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
			$EBMLidList[EBML_ID_TIMECODESCALE]              = 'TimecodeScale';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
			$EBMLidList[EBML_ID_TITLE]                      = 'Title';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
			$EBMLidList[EBML_ID_TRACKENTRY]                 = 'TrackEntry';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
			$EBMLidList[EBML_ID_TRACKNUMBER]                = 'TrackNumber';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
			$EBMLidList[EBML_ID_TRACKOFFSET]                = 'TrackOffset';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
			$EBMLidList[EBML_ID_TRACKOVERLAY]               = 'TrackOverlay';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
			$EBMLidList[EBML_ID_TRACKS]                     = 'Tracks';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
			$EBMLidList[EBML_ID_TRACKTIMECODESCALE]         = 'TrackTimecodeScale';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
			$EBMLidList[EBML_ID_TRACKTRANSLATE]             = 'TrackTranslate';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
			$EBMLidList[EBML_ID_TRACKTRANSLATECODEC]        = 'TrackTranslateCodec';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
			$EBMLidList[EBML_ID_TRACKTRANSLATEEDITIONUID]   = 'TrackTranslateEditionUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
			$EBMLidList[EBML_ID_TRACKTRANSLATETRACKID]      = 'TrackTranslateTrackID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
			$EBMLidList[EBML_ID_TRACKTYPE]                  = 'TrackType';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
			$EBMLidList[EBML_ID_TRACKUID]                   = 'TrackUID';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
			$EBMLidList[EBML_ID_VIDEO]                      = 'Video';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
			$EBMLidList[EBML_ID_VOID]                       = 'Void';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
			$EBMLidList[EBML_ID_WRITINGAPP]                 = 'WritingApp';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
		return (isset($EBMLidList[$value]) ? $EBMLidList[$value] : dechex($value));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1879
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1880
	 * @param int $value
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1881
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1882
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1883
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
	public static function displayUnit($value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
		// http://www.matroska.org/technical/specs/index.html#DisplayUnit
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
		static $units = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
			0 => 'pixels',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
			1 => 'centimeters',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
			2 => 'inches',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
			3 => 'Display Aspect Ratio');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
		return (isset($units[$value]) ? $units[$value] : 'unknown');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1895
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1896
	 * @param array $streams
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1897
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1898
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1899
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
	private static function getDefaultStreamInfo($streams)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
	{
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1902
		$stream = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
		foreach (array_reverse($streams) as $stream) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
			if ($stream['default']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
		$unset = array('default', 'name');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
		foreach ($unset as $u) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
			if (isset($stream[$u])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
				unset($stream[$u]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
		$info = $stream;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
		$info['streams'] = $streams;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
		return $info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1922
}