wp/wp-includes/ID3/module.audio-video.asf.php
author ymh <ymh.work@gmail.com>
Mon, 14 Oct 2019 17:39:30 +0200
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 16 a86126ab1dd4
permissions -rw-r--r--
resynchronize code repo with production
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/// getID3() by James Heinrich <info@getid3.org>               //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
//  available at http://getid3.sourceforge.net                 //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
//            or http://www.getid3.org                         //
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     6
//          also https://github.com/JamesHeinrich/getID3       //
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
// See readme.txt for more details                             //
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.asf.php                                  //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
// module for analyzing ASF, WMA and WMV files                 //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
// dependencies: module.audio-video.riff.php                   //
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.riff.php', __FILE__, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    19
class getid3_asf extends getid3_handler {
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
	public function __construct(getID3 $getid3) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
		parent::__construct($getid3);  // extends getid3_handler::__construct()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
		// initialize all GUID constants
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
		$GUIDarray = $this->KnownGUIDs();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
		foreach ($GUIDarray as $GUIDname => $hexstringvalue) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
			if (!defined($GUIDname)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
				define($GUIDname, $this->GUIDtoBytestring($hexstringvalue));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
	public function Analyze() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
		// Shortcuts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
		$thisfile_audio = &$info['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		$thisfile_video = &$info['video'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
		$info['asf']  = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
		$thisfile_asf = &$info['asf'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		$thisfile_asf['comments'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
		$thisfile_asf_comments    = &$thisfile_asf['comments'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		$thisfile_asf['header_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
		$thisfile_asf_headerobject     = &$thisfile_asf['header_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
		// ASF structure:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
		// * Header Object [required]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		//   * File Properties Object [required]   (global file attributes)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		//   * Stream Properties Object [required] (defines media stream & characteristics)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		//   * Header Extension Object [required]  (additional functionality)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		//   * Content Description Object          (bibliographic information)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		//   * Script Command Object               (commands for during playback)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		//   * Marker Object                       (named jumped points within the file)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		// * Data Object [required]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		//   * Data Packets
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
		// * Index Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
		// Header Object: (mandatory, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		// Object ID                    GUID         128             // GUID for header object - GETID3_ASF_Header_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		// Object Size                  QWORD        64              // size of header object, including 30 bytes of Header Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		// Number of Header Objects     DWORD        32              // number of objects in header object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
		// Reserved1                    BYTE         8               // hardcoded: 0x01
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		// Reserved2                    BYTE         8               // hardcoded: 0x02
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
		$info['fileformat'] = 'asf';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    69
		$this->fseek($info['avdataoffset']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    70
		$HeaderObjectData = $this->fread(30);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
		$thisfile_asf_headerobject['objectid']      = substr($HeaderObjectData, 0, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
		$thisfile_asf_headerobject['objectid_guid'] = $this->BytestringToGUID($thisfile_asf_headerobject['objectid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
		if ($thisfile_asf_headerobject['objectid'] != GETID3_ASF_Header_Object) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    75
			unset($info['fileformat'], $info['asf']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    76
			return $this->error('ASF header GUID {'.$this->BytestringToGUID($thisfile_asf_headerobject['objectid']).'} does not match expected "GETID3_ASF_Header_Object" GUID {'.$this->BytestringToGUID(GETID3_ASF_Header_Object).'}');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
		$thisfile_asf_headerobject['objectsize']    = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 16, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
		$thisfile_asf_headerobject['headerobjects'] = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 24, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
		$thisfile_asf_headerobject['reserved1']     = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 28, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
		$thisfile_asf_headerobject['reserved2']     = getid3_lib::LittleEndian2Int(substr($HeaderObjectData, 29, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    83
		$NextObjectOffset = $this->ftell();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    84
		$ASFHeaderData = $this->fread($thisfile_asf_headerobject['objectsize'] - 30);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
		$offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
		for ($HeaderObjectsCounter = 0; $HeaderObjectsCounter < $thisfile_asf_headerobject['headerobjects']; $HeaderObjectsCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
			$NextObjectGUID = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
			$NextObjectGUIDtext = $this->BytestringToGUID($NextObjectGUID);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
			$NextObjectSize = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
			$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
			switch ($NextObjectGUID) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
				case GETID3_ASF_File_Properties_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
					// File Properties Object: (mandatory, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
					// Object ID                    GUID         128             // GUID for file properties object - GETID3_ASF_File_Properties_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
					// Object Size                  QWORD        64              // size of file properties object, including 104 bytes of File Properties Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
					// File ID                      GUID         128             // unique ID - identical to File ID in Data Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
					// File Size                    QWORD        64              // entire file in bytes. Invalid if Broadcast Flag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
					// Creation Date                QWORD        64              // date & time of file creation. Maybe invalid if Broadcast Flag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
					// Data Packets Count           QWORD        64              // number of data packets in Data Object. Invalid if Broadcast Flag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
					// Play Duration                QWORD        64              // playtime, in 100-nanosecond units. Invalid if Broadcast Flag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
					// Send Duration                QWORD        64              // time needed to send file, in 100-nanosecond units. Players can ignore this value. Invalid if Broadcast Flag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
					// Preroll                      QWORD        64              // time to buffer data before starting to play file, in 1-millisecond units. If <> 0, PlayDuration and PresentationTime have been offset by this amount
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
					// Flags                        DWORD        32              //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
					// * Broadcast Flag             bits         1  (0x01)       // file is currently being written, some header values are invalid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
					// * Seekable Flag              bits         1  (0x02)       // is file seekable
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
					// * Reserved                   bits         30 (0xFFFFFFFC) // reserved - set to zero
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
					// Minimum Data Packet Size     DWORD        32              // in bytes. should be same as Maximum Data Packet Size. Invalid if Broadcast Flag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
					// Maximum Data Packet Size     DWORD        32              // in bytes. should be same as Minimum Data Packet Size. Invalid if Broadcast Flag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
					// Maximum Bitrate              DWORD        32              // maximum instantaneous bitrate in bits per second for entire file, including all data streams and ASF overhead
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
					$thisfile_asf['file_properties_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
					$thisfile_asf_filepropertiesobject      = &$thisfile_asf['file_properties_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
					$thisfile_asf_filepropertiesobject['offset']             = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
					$thisfile_asf_filepropertiesobject['objectid']           = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
					$thisfile_asf_filepropertiesobject['objectid_guid']      = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
					$thisfile_asf_filepropertiesobject['objectsize']         = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
					$thisfile_asf_filepropertiesobject['fileid']             = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
					$thisfile_asf_filepropertiesobject['fileid_guid']        = $this->BytestringToGUID($thisfile_asf_filepropertiesobject['fileid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
					$thisfile_asf_filepropertiesobject['filesize']           = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
					$thisfile_asf_filepropertiesobject['creation_date']      = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
					$thisfile_asf_filepropertiesobject['creation_date_unix'] = $this->FILETIMEtoUNIXtime($thisfile_asf_filepropertiesobject['creation_date']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
					$thisfile_asf_filepropertiesobject['data_packets']       = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
					$thisfile_asf_filepropertiesobject['play_duration']      = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
					$thisfile_asf_filepropertiesobject['send_duration']      = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
					$thisfile_asf_filepropertiesobject['preroll']            = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
					$thisfile_asf_filepropertiesobject['flags_raw']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
					$thisfile_asf_filepropertiesobject['flags']['broadcast'] = (bool) ($thisfile_asf_filepropertiesobject['flags_raw'] & 0x0001);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
					$thisfile_asf_filepropertiesobject['flags']['seekable']  = (bool) ($thisfile_asf_filepropertiesobject['flags_raw'] & 0x0002);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
					$thisfile_asf_filepropertiesobject['min_packet_size']    = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
					$thisfile_asf_filepropertiesobject['max_packet_size']    = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
					$thisfile_asf_filepropertiesobject['max_bitrate']        = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
					if ($thisfile_asf_filepropertiesobject['flags']['broadcast']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
						// broadcast flag is set, some values invalid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
						unset($thisfile_asf_filepropertiesobject['filesize']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
						unset($thisfile_asf_filepropertiesobject['data_packets']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
						unset($thisfile_asf_filepropertiesobject['play_duration']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
						unset($thisfile_asf_filepropertiesobject['send_duration']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
						unset($thisfile_asf_filepropertiesobject['min_packet_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
						unset($thisfile_asf_filepropertiesobject['max_packet_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
						// broadcast flag NOT set, perform calculations
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
						$info['playtime_seconds'] = ($thisfile_asf_filepropertiesobject['play_duration'] / 10000000) - ($thisfile_asf_filepropertiesobject['preroll'] / 1000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
						//$info['bitrate'] = $thisfile_asf_filepropertiesobject['max_bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
						$info['bitrate'] = ((isset($thisfile_asf_filepropertiesobject['filesize']) ? $thisfile_asf_filepropertiesobject['filesize'] : $info['filesize']) * 8) / $info['playtime_seconds'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
				case GETID3_ASF_Stream_Properties_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
					// Stream Properties Object: (mandatory, one per media stream)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
					// Object ID                    GUID         128             // GUID for stream properties object - GETID3_ASF_Stream_Properties_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
					// Object Size                  QWORD        64              // size of stream properties object, including 78 bytes of Stream Properties Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
					// Stream Type                  GUID         128             // GETID3_ASF_Audio_Media, GETID3_ASF_Video_Media or GETID3_ASF_Command_Media
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
					// Error Correction Type        GUID         128             // GETID3_ASF_Audio_Spread for audio-only streams, GETID3_ASF_No_Error_Correction for other stream types
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
					// Time Offset                  QWORD        64              // 100-nanosecond units. typically zero. added to all timestamps of samples in the stream
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
					// Type-Specific Data Length    DWORD        32              // number of bytes for Type-Specific Data field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
					// Error Correction Data Length DWORD        32              // number of bytes for Error Correction Data field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
					// Flags                        WORD         16              //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
					// * Stream Number              bits         7 (0x007F)      // number of this stream.  1 <= valid <= 127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
					// * Reserved                   bits         8 (0x7F80)      // reserved - set to zero
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
					// * Encrypted Content Flag     bits         1 (0x8000)      // stream contents encrypted if set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
					// Reserved                     DWORD        32              // reserved - set to zero
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
					// Type-Specific Data           BYTESTREAM   variable        // type-specific format data, depending on value of Stream Type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
					// Error Correction Data        BYTESTREAM   variable        // error-correction-specific format data, depending on value of Error Correct Type
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
					// There is one GETID3_ASF_Stream_Properties_Object for each stream (audio, video) but the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
					// stream number isn't known until halfway through decoding the structure, hence it
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
					// it is decoded to a temporary variable and then stuck in the appropriate index later
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
					$StreamPropertiesObjectData['offset']             = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
					$StreamPropertiesObjectData['objectid']           = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
					$StreamPropertiesObjectData['objectid_guid']      = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
					$StreamPropertiesObjectData['objectsize']         = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
					$StreamPropertiesObjectData['stream_type']        = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
					$StreamPropertiesObjectData['stream_type_guid']   = $this->BytestringToGUID($StreamPropertiesObjectData['stream_type']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
					$StreamPropertiesObjectData['error_correct_type'] = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
					$StreamPropertiesObjectData['error_correct_guid'] = $this->BytestringToGUID($StreamPropertiesObjectData['error_correct_type']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
					$StreamPropertiesObjectData['time_offset']        = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
					$StreamPropertiesObjectData['type_data_length']   = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
					$StreamPropertiesObjectData['error_data_length']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
					$StreamPropertiesObjectData['flags_raw']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
					$StreamPropertiesObjectStreamNumber               = $StreamPropertiesObjectData['flags_raw'] & 0x007F;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
					$StreamPropertiesObjectData['flags']['encrypted'] = (bool) ($StreamPropertiesObjectData['flags_raw'] & 0x8000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
					$offset += 4; // reserved - DWORD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
					$StreamPropertiesObjectData['type_specific_data'] = substr($ASFHeaderData, $offset, $StreamPropertiesObjectData['type_data_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
					$offset += $StreamPropertiesObjectData['type_data_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
					$StreamPropertiesObjectData['error_correct_data'] = substr($ASFHeaderData, $offset, $StreamPropertiesObjectData['error_data_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
					$offset += $StreamPropertiesObjectData['error_data_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
					switch ($StreamPropertiesObjectData['stream_type']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
						case GETID3_ASF_Audio_Media:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
							$thisfile_audio['dataformat']   = (!empty($thisfile_audio['dataformat'])   ? $thisfile_audio['dataformat']   : 'asf');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
							$thisfile_audio['bitrate_mode'] = (!empty($thisfile_audio['bitrate_mode']) ? $thisfile_audio['bitrate_mode'] : 'cbr');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
							$audiodata = getid3_riff::parseWAVEFORMATex(substr($StreamPropertiesObjectData['type_specific_data'], 0, 16));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
							unset($audiodata['raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
							$thisfile_audio = getid3_lib::array_merge_noclobber($audiodata, $thisfile_audio);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
						case GETID3_ASF_Video_Media:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
							$thisfile_video['dataformat']   = (!empty($thisfile_video['dataformat'])   ? $thisfile_video['dataformat']   : 'asf');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
							$thisfile_video['bitrate_mode'] = (!empty($thisfile_video['bitrate_mode']) ? $thisfile_video['bitrate_mode'] : 'cbr');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
						case GETID3_ASF_Command_Media:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
						default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
							// do nothing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
					$thisfile_asf['stream_properties_object'][$StreamPropertiesObjectStreamNumber] = $StreamPropertiesObjectData;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
					unset($StreamPropertiesObjectData); // clear for next stream, if any
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
				case GETID3_ASF_Header_Extension_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
					// Header Extension Object: (mandatory, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
					// Object ID                    GUID         128             // GUID for Header Extension object - GETID3_ASF_Header_Extension_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
					// Object Size                  QWORD        64              // size of Header Extension object, including 46 bytes of Header Extension Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
					// Reserved Field 1             GUID         128             // hardcoded: GETID3_ASF_Reserved_1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
					// Reserved Field 2             WORD         16              // hardcoded: 0x00000006
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
					// Header Extension Data Size   DWORD        32              // in bytes. valid: 0, or > 24. equals object size minus 46
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
					// Header Extension Data        BYTESTREAM   variable        // array of zero or more extended header objects
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
					$thisfile_asf['header_extension_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
					$thisfile_asf_headerextensionobject      = &$thisfile_asf['header_extension_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
					$thisfile_asf_headerextensionobject['offset']              = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
					$thisfile_asf_headerextensionobject['objectid']            = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
					$thisfile_asf_headerextensionobject['objectid_guid']       = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
					$thisfile_asf_headerextensionobject['objectsize']          = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
					$thisfile_asf_headerextensionobject['reserved_1']          = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
					$thisfile_asf_headerextensionobject['reserved_1_guid']     = $this->BytestringToGUID($thisfile_asf_headerextensionobject['reserved_1']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
					if ($thisfile_asf_headerextensionobject['reserved_1'] != GETID3_ASF_Reserved_1) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   269
						$this->warning('header_extension_object.reserved_1 GUID ('.$this->BytestringToGUID($thisfile_asf_headerextensionobject['reserved_1']).') does not match expected "GETID3_ASF_Reserved_1" GUID ('.$this->BytestringToGUID(GETID3_ASF_Reserved_1).')');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
						//return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
					$thisfile_asf_headerextensionobject['reserved_2']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
					if ($thisfile_asf_headerextensionobject['reserved_2'] != 6) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   276
						$this->warning('header_extension_object.reserved_2 ('.getid3_lib::PrintHexBytes($thisfile_asf_headerextensionobject['reserved_2']).') does not match expected value of "6"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
						//return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
					$thisfile_asf_headerextensionobject['extension_data_size'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
					$thisfile_asf_headerextensionobject['extension_data']      =                              substr($ASFHeaderData, $offset, $thisfile_asf_headerextensionobject['extension_data_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
					$unhandled_sections = 0;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   284
					$thisfile_asf_headerextensionobject['extension_data_parsed'] = $this->HeaderExtensionObjectDataParse($thisfile_asf_headerextensionobject['extension_data'], $unhandled_sections);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
					if ($unhandled_sections === 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
						unset($thisfile_asf_headerextensionobject['extension_data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
					$offset += $thisfile_asf_headerextensionobject['extension_data_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
				case GETID3_ASF_Codec_List_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
					// Codec List Object: (optional, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
					// Object ID                    GUID         128             // GUID for Codec List object - GETID3_ASF_Codec_List_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
					// Object Size                  QWORD        64              // size of Codec List object, including 44 bytes of Codec List Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
					// Reserved                     GUID         128             // hardcoded: 86D15241-311D-11D0-A3A4-00A0C90348F6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
					// Codec Entries Count          DWORD        32              // number of entries in Codec Entries array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
					// Codec Entries                array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
					// * Type                       WORD         16              // 0x0001 = Video Codec, 0x0002 = Audio Codec, 0xFFFF = Unknown Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
					// * Codec Name Length          WORD         16              // number of Unicode characters stored in the Codec Name field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
					// * Codec Name                 WCHAR        variable        // array of Unicode characters - name of codec used to create the content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
					// * Codec Description Length   WORD         16              // number of Unicode characters stored in the Codec Description field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
					// * Codec Description          WCHAR        variable        // array of Unicode characters - description of format used to create the content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
					// * Codec Information Length   WORD         16              // number of Unicode characters stored in the Codec Information field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
					// * Codec Information          BYTESTREAM   variable        // opaque array of information bytes about the codec used to create the content
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
					$thisfile_asf['codec_list_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
					$thisfile_asf_codeclistobject      = &$thisfile_asf['codec_list_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
					$thisfile_asf_codeclistobject['offset']                    = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
					$thisfile_asf_codeclistobject['objectid']                  = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
					$thisfile_asf_codeclistobject['objectid_guid']             = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
					$thisfile_asf_codeclistobject['objectsize']                = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
					$thisfile_asf_codeclistobject['reserved']                  = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
					$thisfile_asf_codeclistobject['reserved_guid']             = $this->BytestringToGUID($thisfile_asf_codeclistobject['reserved']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
					if ($thisfile_asf_codeclistobject['reserved'] != $this->GUIDtoBytestring('86D15241-311D-11D0-A3A4-00A0C90348F6')) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   319
						$this->warning('codec_list_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_codeclistobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {86D15241-311D-11D0-A3A4-00A0C90348F6}');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
						//return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
					$thisfile_asf_codeclistobject['codec_entries_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
					for ($CodecEntryCounter = 0; $CodecEntryCounter < $thisfile_asf_codeclistobject['codec_entries_count']; $CodecEntryCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
						// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
						$thisfile_asf_codeclistobject['codec_entries'][$CodecEntryCounter] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
						$thisfile_asf_codeclistobject_codecentries_current = &$thisfile_asf_codeclistobject['codec_entries'][$CodecEntryCounter];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
						$thisfile_asf_codeclistobject_codecentries_current['type_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
						$offset += 2;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   332
						$thisfile_asf_codeclistobject_codecentries_current['type'] = self::codecListObjectTypeLookup($thisfile_asf_codeclistobject_codecentries_current['type_raw']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
						$CodecNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
						$thisfile_asf_codeclistobject_codecentries_current['name'] = substr($ASFHeaderData, $offset, $CodecNameLength);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
						$offset += $CodecNameLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
						$CodecDescriptionLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
						$thisfile_asf_codeclistobject_codecentries_current['description'] = substr($ASFHeaderData, $offset, $CodecDescriptionLength);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
						$offset += $CodecDescriptionLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
						$CodecInformationLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
						$thisfile_asf_codeclistobject_codecentries_current['information'] = substr($ASFHeaderData, $offset, $CodecInformationLength);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
						$offset += $CodecInformationLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
						if ($thisfile_asf_codeclistobject_codecentries_current['type_raw'] == 2) { // audio codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
							if (strpos($thisfile_asf_codeclistobject_codecentries_current['description'], ',') === false) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   352
								$this->warning('[asf][codec_list_object][codec_entries]['.$CodecEntryCounter.'][description] expected to contain comma-separated list of parameters: "'.$thisfile_asf_codeclistobject_codecentries_current['description'].'"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
							} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
								list($AudioCodecBitrate, $AudioCodecFrequency, $AudioCodecChannels) = explode(',', $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['description']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
								$thisfile_audio['codec'] = $this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
								if (!isset($thisfile_audio['bitrate']) && strstr($AudioCodecBitrate, 'kbps')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
									$thisfile_audio['bitrate'] = (int) (trim(str_replace('kbps', '', $AudioCodecBitrate)) * 1000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
								//if (!isset($thisfile_video['bitrate']) && isset($thisfile_audio['bitrate']) && isset($thisfile_asf['file_properties_object']['max_bitrate']) && ($thisfile_asf_codeclistobject['codec_entries_count'] > 1)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
								if (empty($thisfile_video['bitrate']) && !empty($thisfile_audio['bitrate']) && !empty($info['bitrate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
									//$thisfile_video['bitrate'] = $thisfile_asf['file_properties_object']['max_bitrate'] - $thisfile_audio['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
									$thisfile_video['bitrate'] = $info['bitrate'] - $thisfile_audio['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
								$AudioCodecFrequency = (int) trim(str_replace('kHz', '', $AudioCodecFrequency));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
								switch ($AudioCodecFrequency) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
									case 8:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
									case 8000:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
										$thisfile_audio['sample_rate'] = 8000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
									case 11:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
									case 11025:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
										$thisfile_audio['sample_rate'] = 11025;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
									case 12:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
									case 12000:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
										$thisfile_audio['sample_rate'] = 12000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
									case 16:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
									case 16000:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
										$thisfile_audio['sample_rate'] = 16000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
									case 22:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
									case 22050:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
										$thisfile_audio['sample_rate'] = 22050;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
									case 24:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
									case 24000:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
										$thisfile_audio['sample_rate'] = 24000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
									case 32:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
									case 32000:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
										$thisfile_audio['sample_rate'] = 32000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
									case 44:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
									case 441000:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
										$thisfile_audio['sample_rate'] = 44100;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
									case 48:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
									case 48000:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
										$thisfile_audio['sample_rate'] = 48000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
									default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   415
										$this->warning('unknown frequency: "'.$AudioCodecFrequency.'" ('.$this->TrimConvert($thisfile_asf_codeclistobject_codecentries_current['description']).')');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
								if (!isset($thisfile_audio['channels'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
									if (strstr($AudioCodecChannels, 'stereo')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
										$thisfile_audio['channels'] = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
									} elseif (strstr($AudioCodecChannels, 'mono')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
										$thisfile_audio['channels'] = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
				case GETID3_ASF_Script_Command_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
					// Script Command Object: (optional, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
					// Object ID                    GUID         128             // GUID for Script Command object - GETID3_ASF_Script_Command_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
					// Object Size                  QWORD        64              // size of Script Command object, including 44 bytes of Script Command Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
					// Reserved                     GUID         128             // hardcoded: 4B1ACBE3-100B-11D0-A39B-00A0C90348F6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
					// Commands Count               WORD         16              // number of Commands structures in the Script Commands Objects
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
					// Command Types Count          WORD         16              // number of Command Types structures in the Script Commands Objects
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
					// Command Types                array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
					// * Command Type Name Length   WORD         16              // number of Unicode characters for Command Type Name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
					// * Command Type Name          WCHAR        variable        // array of Unicode characters - name of a type of command
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
					// Commands                     array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
					// * Presentation Time          DWORD        32              // presentation time of that command, in milliseconds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
					// * Type Index                 WORD         16              // type of this command, as a zero-based index into the array of Command Types of this object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
					// * Command Name Length        WORD         16              // number of Unicode characters for Command Name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
					// * Command Name               WCHAR        variable        // array of Unicode characters - name of this command
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
					$thisfile_asf['script_command_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
					$thisfile_asf_scriptcommandobject      = &$thisfile_asf['script_command_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
					$thisfile_asf_scriptcommandobject['offset']               = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
					$thisfile_asf_scriptcommandobject['objectid']             = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
					$thisfile_asf_scriptcommandobject['objectid_guid']        = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
					$thisfile_asf_scriptcommandobject['objectsize']           = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
					$thisfile_asf_scriptcommandobject['reserved']             = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
					$thisfile_asf_scriptcommandobject['reserved_guid']        = $this->BytestringToGUID($thisfile_asf_scriptcommandobject['reserved']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
					if ($thisfile_asf_scriptcommandobject['reserved'] != $this->GUIDtoBytestring('4B1ACBE3-100B-11D0-A39B-00A0C90348F6')) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   461
						$this->warning('script_command_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_scriptcommandobject['reserved']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {4B1ACBE3-100B-11D0-A39B-00A0C90348F6}');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
						//return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
					$thisfile_asf_scriptcommandobject['commands_count']       = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
					$thisfile_asf_scriptcommandobject['command_types_count']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
					for ($CommandTypesCounter = 0; $CommandTypesCounter < $thisfile_asf_scriptcommandobject['command_types_count']; $CommandTypesCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
						$CommandTypeNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
						$thisfile_asf_scriptcommandobject['command_types'][$CommandTypesCounter]['name'] = substr($ASFHeaderData, $offset, $CommandTypeNameLength);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
						$offset += $CommandTypeNameLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
					for ($CommandsCounter = 0; $CommandsCounter < $thisfile_asf_scriptcommandobject['commands_count']; $CommandsCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
						$thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['presentation_time']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
						$thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['type_index']         = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
						$CommandTypeNameLength = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2)) * 2; // 2 bytes per character
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
						$thisfile_asf_scriptcommandobject['commands'][$CommandsCounter]['name'] = substr($ASFHeaderData, $offset, $CommandTypeNameLength);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
						$offset += $CommandTypeNameLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
				case GETID3_ASF_Marker_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
					// Marker Object: (optional, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
					// Object ID                    GUID         128             // GUID for Marker object - GETID3_ASF_Marker_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
					// Object Size                  QWORD        64              // size of Marker object, including 48 bytes of Marker Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
					// Reserved                     GUID         128             // hardcoded: 4CFEDB20-75F6-11CF-9C0F-00A0C90349CB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
					// Markers Count                DWORD        32              // number of Marker structures in Marker Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
					// Reserved                     WORD         16              // hardcoded: 0x0000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
					// Name Length                  WORD         16              // number of bytes in the Name field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
					// Name                         WCHAR        variable        // name of the Marker Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
					// Markers                      array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
					// * Offset                     QWORD        64              // byte offset into Data Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
					// * Presentation Time          QWORD        64              // in 100-nanosecond units
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
					// * Entry Length               WORD         16              // length in bytes of (Send Time + Flags + Marker Description Length + Marker Description + Padding)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
					// * Send Time                  DWORD        32              // in milliseconds
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
					// * Flags                      DWORD        32              // hardcoded: 0x00000000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
					// * Marker Description Length  DWORD        32              // number of bytes in Marker Description field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
					// * Marker Description         WCHAR        variable        // array of Unicode characters - description of marker entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
					// * Padding                    BYTESTREAM   variable        // optional padding bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
					$thisfile_asf['marker_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
					$thisfile_asf_markerobject     = &$thisfile_asf['marker_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
					$thisfile_asf_markerobject['offset']               = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
					$thisfile_asf_markerobject['objectid']             = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
					$thisfile_asf_markerobject['objectid_guid']        = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
					$thisfile_asf_markerobject['objectsize']           = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
					$thisfile_asf_markerobject['reserved']             = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
					$thisfile_asf_markerobject['reserved_guid']        = $this->BytestringToGUID($thisfile_asf_markerobject['reserved']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
					if ($thisfile_asf_markerobject['reserved'] != $this->GUIDtoBytestring('4CFEDB20-75F6-11CF-9C0F-00A0C90349CB')) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   520
						$this->warning('marker_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_markerobject['reserved_1']).'} does not match expected "GETID3_ASF_Reserved_1" GUID {4CFEDB20-75F6-11CF-9C0F-00A0C90349CB}');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
					$thisfile_asf_markerobject['markers_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
					$thisfile_asf_markerobject['reserved_2'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
					if ($thisfile_asf_markerobject['reserved_2'] != 0) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   528
						$this->warning('marker_object.reserved_2 ('.getid3_lib::PrintHexBytes($thisfile_asf_markerobject['reserved_2']).') does not match expected value of "0"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
					$thisfile_asf_markerobject['name_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
					$thisfile_asf_markerobject['name'] = substr($ASFHeaderData, $offset, $thisfile_asf_markerobject['name_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
					$offset += $thisfile_asf_markerobject['name_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
					for ($MarkersCounter = 0; $MarkersCounter < $thisfile_asf_markerobject['markers_count']; $MarkersCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['offset']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
						$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['presentation_time']         = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
						$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['entry_length']              = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['send_time']                 = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['flags']                     = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
						$thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description']        = substr($ASFHeaderData, $offset, $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
						$offset += $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
						$PaddingLength = $thisfile_asf_markerobject['markers'][$MarkersCounter]['entry_length'] - 4 -  4 - 4 - $thisfile_asf_markerobject['markers'][$MarkersCounter]['marker_description_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
						if ($PaddingLength > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
							$thisfile_asf_markerobject['markers'][$MarkersCounter]['padding']               = substr($ASFHeaderData, $offset, $PaddingLength);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
							$offset += $PaddingLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
				case GETID3_ASF_Bitrate_Mutual_Exclusion_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
					// Bitrate Mutual Exclusion Object: (optional)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
					// Object ID                    GUID         128             // GUID for Bitrate Mutual Exclusion object - GETID3_ASF_Bitrate_Mutual_Exclusion_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
					// Object Size                  QWORD        64              // size of Bitrate Mutual Exclusion object, including 42 bytes of Bitrate Mutual Exclusion Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
					// Exlusion Type                GUID         128             // nature of mutual exclusion relationship. one of: (GETID3_ASF_Mutex_Bitrate, GETID3_ASF_Mutex_Unknown)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
					// Stream Numbers Count         WORD         16              // number of video streams
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
					// Stream Numbers               WORD         variable        // array of mutually exclusive video stream numbers. 1 <= valid <= 127
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
					$thisfile_asf['bitrate_mutual_exclusion_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
					$thisfile_asf_bitratemutualexclusionobject       = &$thisfile_asf['bitrate_mutual_exclusion_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
					$thisfile_asf_bitratemutualexclusionobject['offset']               = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
					$thisfile_asf_bitratemutualexclusionobject['objectid']             = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
					$thisfile_asf_bitratemutualexclusionobject['objectid_guid']        = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
					$thisfile_asf_bitratemutualexclusionobject['objectsize']           = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
					$thisfile_asf_bitratemutualexclusionobject['reserved']             = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
					$thisfile_asf_bitratemutualexclusionobject['reserved_guid']        = $this->BytestringToGUID($thisfile_asf_bitratemutualexclusionobject['reserved']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
					if (($thisfile_asf_bitratemutualexclusionobject['reserved'] != GETID3_ASF_Mutex_Bitrate) && ($thisfile_asf_bitratemutualexclusionobject['reserved'] != GETID3_ASF_Mutex_Unknown)) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   579
						$this->warning('bitrate_mutual_exclusion_object.reserved GUID {'.$this->BytestringToGUID($thisfile_asf_bitratemutualexclusionobject['reserved']).'} does not match expected "GETID3_ASF_Mutex_Bitrate" GUID {'.$this->BytestringToGUID(GETID3_ASF_Mutex_Bitrate).'} or  "GETID3_ASF_Mutex_Unknown" GUID {'.$this->BytestringToGUID(GETID3_ASF_Mutex_Unknown).'}');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
						//return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
					$thisfile_asf_bitratemutualexclusionobject['stream_numbers_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
					for ($StreamNumberCounter = 0; $StreamNumberCounter < $thisfile_asf_bitratemutualexclusionobject['stream_numbers_count']; $StreamNumberCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
						$thisfile_asf_bitratemutualexclusionobject['stream_numbers'][$StreamNumberCounter] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
				case GETID3_ASF_Error_Correction_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
					// Error Correction Object: (optional, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
					// Object ID                    GUID         128             // GUID for Error Correction object - GETID3_ASF_Error_Correction_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
					// Object Size                  QWORD        64              // size of Error Correction object, including 44 bytes of Error Correction Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
					// Error Correction Type        GUID         128             // type of error correction. one of: (GETID3_ASF_No_Error_Correction, GETID3_ASF_Audio_Spread)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
					// Error Correction Data Length DWORD        32              // number of bytes in Error Correction Data field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
					// Error Correction Data        BYTESTREAM   variable        // structure depends on value of Error Correction Type field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
					$thisfile_asf['error_correction_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
					$thisfile_asf_errorcorrectionobject      = &$thisfile_asf['error_correction_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
					$thisfile_asf_errorcorrectionobject['offset']                = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
					$thisfile_asf_errorcorrectionobject['objectid']              = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
					$thisfile_asf_errorcorrectionobject['objectid_guid']         = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
					$thisfile_asf_errorcorrectionobject['objectsize']            = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
					$thisfile_asf_errorcorrectionobject['error_correction_type'] = substr($ASFHeaderData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
					$thisfile_asf_errorcorrectionobject['error_correction_guid'] = $this->BytestringToGUID($thisfile_asf_errorcorrectionobject['error_correction_type']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
					$thisfile_asf_errorcorrectionobject['error_correction_data_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
					switch ($thisfile_asf_errorcorrectionobject['error_correction_type']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
						case GETID3_ASF_No_Error_Correction:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
							// should be no data, but just in case there is, skip to the end of the field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
							$offset += $thisfile_asf_errorcorrectionobject['error_correction_data_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
						case GETID3_ASF_Audio_Spread:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
							// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
							// Span                         BYTE         8               // number of packets over which audio will be spread.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
							// Virtual Packet Length        WORD         16              // size of largest audio payload found in audio stream
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
							// Virtual Chunk Length         WORD         16              // size of largest audio payload found in audio stream
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
							// Silence Data Length          WORD         16              // number of bytes in Silence Data field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
							// Silence Data                 BYTESTREAM   variable        // hardcoded: 0x00 * (Silence Data Length) bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
							$thisfile_asf_errorcorrectionobject['span']                  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
							$offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
							$thisfile_asf_errorcorrectionobject['virtual_packet_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
							$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
							$thisfile_asf_errorcorrectionobject['virtual_chunk_length']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
							$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
							$thisfile_asf_errorcorrectionobject['silence_data_length']   = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
							$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
							$thisfile_asf_errorcorrectionobject['silence_data']          = substr($ASFHeaderData, $offset, $thisfile_asf_errorcorrectionobject['silence_data_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
							$offset += $thisfile_asf_errorcorrectionobject['silence_data_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
						default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   640
							$this->warning('error_correction_object.error_correction_type GUID {'.$this->BytestringToGUID($thisfile_asf_errorcorrectionobject['reserved']).'} does not match expected "GETID3_ASF_No_Error_Correction" GUID {'.$this->BytestringToGUID(GETID3_ASF_No_Error_Correction).'} or  "GETID3_ASF_Audio_Spread" GUID {'.$this->BytestringToGUID(GETID3_ASF_Audio_Spread).'}');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
							//return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
				case GETID3_ASF_Content_Description_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
					// Content Description Object: (optional, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
					// Object ID                    GUID         128             // GUID for Content Description object - GETID3_ASF_Content_Description_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
					// Object Size                  QWORD        64              // size of Content Description object, including 34 bytes of Content Description Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
					// Title Length                 WORD         16              // number of bytes in Title field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
					// Author Length                WORD         16              // number of bytes in Author field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
					// Copyright Length             WORD         16              // number of bytes in Copyright field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
					// Description Length           WORD         16              // number of bytes in Description field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
					// Rating Length                WORD         16              // number of bytes in Rating field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
					// Title                        WCHAR        16              // array of Unicode characters - Title
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
					// Author                       WCHAR        16              // array of Unicode characters - Author
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
					// Copyright                    WCHAR        16              // array of Unicode characters - Copyright
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
					// Description                  WCHAR        16              // array of Unicode characters - Description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
					// Rating                       WCHAR        16              // array of Unicode characters - Rating
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
					$thisfile_asf['content_description_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
					$thisfile_asf_contentdescriptionobject      = &$thisfile_asf['content_description_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
					$thisfile_asf_contentdescriptionobject['offset']                = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
					$thisfile_asf_contentdescriptionobject['objectid']              = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
					$thisfile_asf_contentdescriptionobject['objectid_guid']         = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
					$thisfile_asf_contentdescriptionobject['objectsize']            = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
					$thisfile_asf_contentdescriptionobject['title_length']          = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
					$thisfile_asf_contentdescriptionobject['author_length']         = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
					$thisfile_asf_contentdescriptionobject['copyright_length']      = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
					$thisfile_asf_contentdescriptionobject['description_length']    = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
					$thisfile_asf_contentdescriptionobject['rating_length']         = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
					$thisfile_asf_contentdescriptionobject['title']                 = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['title_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
					$offset += $thisfile_asf_contentdescriptionobject['title_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
					$thisfile_asf_contentdescriptionobject['author']                = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['author_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
					$offset += $thisfile_asf_contentdescriptionobject['author_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
					$thisfile_asf_contentdescriptionobject['copyright']             = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['copyright_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
					$offset += $thisfile_asf_contentdescriptionobject['copyright_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
					$thisfile_asf_contentdescriptionobject['description']           = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['description_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
					$offset += $thisfile_asf_contentdescriptionobject['description_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
					$thisfile_asf_contentdescriptionobject['rating']                = substr($ASFHeaderData, $offset, $thisfile_asf_contentdescriptionobject['rating_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
					$offset += $thisfile_asf_contentdescriptionobject['rating_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
					$ASFcommentKeysToCopy = array('title'=>'title', 'author'=>'artist', 'copyright'=>'copyright', 'description'=>'comment', 'rating'=>'rating');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
					foreach ($ASFcommentKeysToCopy as $keytocopyfrom => $keytocopyto) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
						if (!empty($thisfile_asf_contentdescriptionobject[$keytocopyfrom])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
							$thisfile_asf_comments[$keytocopyto][] = $this->TrimTerm($thisfile_asf_contentdescriptionobject[$keytocopyfrom]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
				case GETID3_ASF_Extended_Content_Description_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
					// Extended Content Description Object: (optional, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
					// Object ID                    GUID         128             // GUID for Extended Content Description object - GETID3_ASF_Extended_Content_Description_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
					// Object Size                  QWORD        64              // size of ExtendedContent Description object, including 26 bytes of Extended Content Description Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
					// Content Descriptors Count    WORD         16              // number of entries in Content Descriptors list
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
					// Content Descriptors          array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
					// * Descriptor Name Length     WORD         16              // size in bytes of Descriptor Name field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
					// * Descriptor Name            WCHAR        variable        // array of Unicode characters - Descriptor Name
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
					// * Descriptor Value Data Type WORD         16              // Lookup array:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
																					// 0x0000 = Unicode String (variable length)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
																					// 0x0001 = BYTE array     (variable length)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
																					// 0x0002 = BOOL           (DWORD, 32 bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
																					// 0x0003 = DWORD          (DWORD, 32 bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
																					// 0x0004 = QWORD          (QWORD, 64 bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
																					// 0x0005 = WORD           (WORD,  16 bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
					// * Descriptor Value Length    WORD         16              // number of bytes stored in Descriptor Value field
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
					// * Descriptor Value           variable     variable        // value for Content Descriptor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
					$thisfile_asf['extended_content_description_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
					$thisfile_asf_extendedcontentdescriptionobject       = &$thisfile_asf['extended_content_description_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
					$thisfile_asf_extendedcontentdescriptionobject['offset']                    = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
					$thisfile_asf_extendedcontentdescriptionobject['objectid']                  = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
					$thisfile_asf_extendedcontentdescriptionobject['objectid_guid']             = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
					$thisfile_asf_extendedcontentdescriptionobject['objectsize']                = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
					$thisfile_asf_extendedcontentdescriptionobject['content_descriptors_count'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
					for ($ExtendedContentDescriptorsCounter = 0; $ExtendedContentDescriptorsCounter < $thisfile_asf_extendedcontentdescriptionobject['content_descriptors_count']; $ExtendedContentDescriptorsCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
						// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
						$thisfile_asf_extendedcontentdescriptionobject['content_descriptors'][$ExtendedContentDescriptorsCounter] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current                 = &$thisfile_asf_extendedcontentdescriptionobject['content_descriptors'][$ExtendedContentDescriptorsCounter];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['base_offset']  = $offset + 30;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length']  = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name']         = substr($ASFHeaderData, $offset, $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
						$offset += $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type']   = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
						$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']        = substr($ASFHeaderData, $offset, $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
						$offset += $thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
						switch ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
							case 0x0000: // Unicode string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
								break;
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 0x0001: // BYTE array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
								// do nothing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
							case 0x0002: // BOOL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = (bool) getid3_lib::LittleEndian2Int($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
							case 0x0003: // DWORD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
							case 0x0004: // QWORD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
							case 0x0005: // WORD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = getid3_lib::LittleEndian2Int($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
							default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   764
								$this->warning('extended_content_description.content_descriptors.'.$ExtendedContentDescriptorsCounter.'.value_type is invalid ('.$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type'].')');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
								//return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
						switch ($this->TrimConvert(strtolower($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name']))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
							case 'wm/albumartist':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
							case 'artist':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
								// Note: not 'artist', that comes from 'author' tag
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
								$thisfile_asf_comments['albumartist'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
							case 'wm/albumtitle':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
							case 'album':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
								$thisfile_asf_comments['album']  = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
							case 'wm/genre':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
							case 'genre':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
								$thisfile_asf_comments['genre'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
							case 'wm/partofset':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
								$thisfile_asf_comments['partofset'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
							case 'wm/tracknumber':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
							case 'tracknumber':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
								// be careful casting to int: casting unicode strings to int gives unexpected results (stops parsing at first non-numeric character)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
								$thisfile_asf_comments['track'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
								foreach ($thisfile_asf_comments['track'] as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
									if (preg_match('/^[0-9\x00]+$/', $value)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
										$thisfile_asf_comments['track'][$key] = intval(str_replace("\x00", '', $value));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
							case 'wm/track':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
								if (empty($thisfile_asf_comments['track'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
									$thisfile_asf_comments['track'] = array(1 + $this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
							case 'wm/year':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
							case 'year':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
							case 'date':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
								$thisfile_asf_comments['year'] = array( $this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
							case 'wm/lyrics':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
							case 'lyrics':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
								$thisfile_asf_comments['lyrics'] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
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
							case 'isvbr':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
								if ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
									$thisfile_audio['bitrate_mode'] = 'vbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
									$thisfile_video['bitrate_mode'] = 'vbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
							case 'id3':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   826
								$this->getid3->include_module('tag.id3v2');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   828
								$getid3_id3v2 = new getid3_id3v2($this->getid3);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   829
								$getid3_id3v2->AnalyzeString($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   830
								unset($getid3_id3v2);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   832
								if ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_length'] > 1024) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   833
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'] = '<value too large to display>';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
							case 'wm/encodingtime':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['encoding_time_unix'] = $this->FILETIMEtoUNIXtime($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
								$thisfile_asf_comments['encoding_time_unix'] = array($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['encoding_time_unix']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
							case 'wm/picture':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
								$WMpicture = $this->ASF_WMpicture($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
								foreach ($WMpicture as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current[$key] = $value;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
								unset($WMpicture);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
								$wm_picture_offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id'] = getid3_lib::LittleEndian2Int(substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
								$wm_picture_offset += 1;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   852
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type']    = self::WMpictureTypeLookup($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_type_id']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_size']    = getid3_lib::LittleEndian2Int(substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
								$wm_picture_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
								do {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
									$next_byte_pair = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
									$wm_picture_offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] .= $next_byte_pair;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
								} while ($next_byte_pair !== "\x00\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_description'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
								do {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
									$next_byte_pair = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
									$wm_picture_offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_description'] .= $next_byte_pair;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
								} while ($next_byte_pair !== "\x00\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['dataoffset'] = $wm_picture_offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'] = substr($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value'], $wm_picture_offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
								unset($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
								$imageinfo = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
								$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
								$imagechunkcheck = getid3_lib::GetDataImageSize($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'], $imageinfo);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
								unset($imageinfo);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
								if (!empty($imagechunkcheck)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
									$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime'] = image_type_to_mime_type($imagechunkcheck[2]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
								if (!isset($thisfile_asf_comments['picture'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
									$thisfile_asf_comments['picture'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
								$thisfile_asf_comments['picture'][] = array('data'=>$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['data'], 'image_mime'=>$thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['image_mime']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
							default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
								switch ($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value_type']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
									case 0: // Unicode string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
										if (substr($this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name']), 0, 3) == 'WM/') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
											$thisfile_asf_comments[str_replace('wm/', '', strtolower($this->TrimConvert($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['name'])))] = array($this->TrimTerm($thisfile_asf_extendedcontentdescriptionobject_contentdescriptor_current['value']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
									case 1:
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
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
				case GETID3_ASF_Stream_Bitrate_Properties_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
					// Stream Bitrate Properties Object: (optional, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
					// Object ID                    GUID         128             // GUID for Stream Bitrate Properties object - GETID3_ASF_Stream_Bitrate_Properties_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
					// Object Size                  QWORD        64              // size of Extended Content Description object, including 26 bytes of Stream Bitrate Properties Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
					// Bitrate Records Count        WORD         16              // number of records in Bitrate Records
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
					// Bitrate Records              array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
					// * Flags                      WORD         16              //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
					// * * Stream Number            bits         7  (0x007F)     // number of this stream
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
					// * * Reserved                 bits         9  (0xFF80)     // hardcoded: 0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
					// * Average Bitrate            DWORD        32              // in bits per second
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
					$thisfile_asf['stream_bitrate_properties_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
					$thisfile_asf_streambitratepropertiesobject       = &$thisfile_asf['stream_bitrate_properties_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
					$thisfile_asf_streambitratepropertiesobject['offset']                    = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
					$thisfile_asf_streambitratepropertiesobject['objectid']                  = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
					$thisfile_asf_streambitratepropertiesobject['objectid_guid']             = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
					$thisfile_asf_streambitratepropertiesobject['objectsize']                = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
					$thisfile_asf_streambitratepropertiesobject['bitrate_records_count']     = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
					for ($BitrateRecordsCounter = 0; $BitrateRecordsCounter < $thisfile_asf_streambitratepropertiesobject['bitrate_records_count']; $BitrateRecordsCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
						$thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags_raw'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
						$thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags']['stream_number'] = $thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['flags_raw'] & 0x007F;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
						$thisfile_asf_streambitratepropertiesobject['bitrate_records'][$BitrateRecordsCounter]['bitrate'] = getid3_lib::LittleEndian2Int(substr($ASFHeaderData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
					}
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
				case GETID3_ASF_Padding_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
					// Padding Object: (optional)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
					// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
					// Object ID                    GUID         128             // GUID for Padding object - GETID3_ASF_Padding_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
					// Object Size                  QWORD        64              // size of Padding object, including 24 bytes of ASF Padding Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
					// Padding Data                 BYTESTREAM   variable        // ignore
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
					$thisfile_asf['padding_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
					$thisfile_asf_paddingobject     = &$thisfile_asf['padding_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
					$thisfile_asf_paddingobject['offset']                    = $NextObjectOffset + $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
					$thisfile_asf_paddingobject['objectid']                  = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
					$thisfile_asf_paddingobject['objectid_guid']             = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
					$thisfile_asf_paddingobject['objectsize']                = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
					$thisfile_asf_paddingobject['padding_length']            = $thisfile_asf_paddingobject['objectsize'] - 16 - 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
					$thisfile_asf_paddingobject['padding']                   = substr($ASFHeaderData, $offset, $thisfile_asf_paddingobject['padding_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
					$offset += ($NextObjectSize - 16 - 8);
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
				case GETID3_ASF_Extended_Content_Encryption_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
				case GETID3_ASF_Content_Encryption_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
					// WMA DRM - just ignore
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
					$offset += ($NextObjectSize - 16 - 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
					// Implementations shall ignore any standard or non-standard object that they do not know how to handle.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
					if ($this->GUIDname($NextObjectGUIDtext)) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   965
						$this->warning('unhandled GUID "'.$this->GUIDname($NextObjectGUIDtext).'" {'.$NextObjectGUIDtext.'} in ASF header at offset '.($offset - 16 - 8));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
					} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   967
						$this->warning('unknown GUID {'.$NextObjectGUIDtext.'} in ASF header at offset '.($offset - 16 - 8));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
					$offset += ($NextObjectSize - 16 - 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
		if (isset($thisfile_asf_streambitrateproperties['bitrate_records_count'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
			$ASFbitrateAudio = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
			$ASFbitrateVideo = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
			for ($BitrateRecordsCounter = 0; $BitrateRecordsCounter < $thisfile_asf_streambitrateproperties['bitrate_records_count']; $BitrateRecordsCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
				if (isset($thisfile_asf_codeclistobject['codec_entries'][$BitrateRecordsCounter])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
					switch ($thisfile_asf_codeclistobject['codec_entries'][$BitrateRecordsCounter]['type_raw']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
						case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
							$ASFbitrateVideo += $thisfile_asf_streambitrateproperties['bitrate_records'][$BitrateRecordsCounter]['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
						case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
							$ASFbitrateAudio += $thisfile_asf_streambitrateproperties['bitrate_records'][$BitrateRecordsCounter]['bitrate'];
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
						default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
							// do nothing
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
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
			if ($ASFbitrateAudio > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
				$thisfile_audio['bitrate'] = $ASFbitrateAudio;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
			if ($ASFbitrateVideo > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
				$thisfile_video['bitrate'] = $ASFbitrateVideo;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   999
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1000
		if (isset($thisfile_asf['stream_properties_object']) && is_array($thisfile_asf['stream_properties_object'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
			$thisfile_audio['bitrate'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
			$thisfile_video['bitrate'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
			foreach ($thisfile_asf['stream_properties_object'] as $streamnumber => $streamdata) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
				switch ($streamdata['stream_type']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
					case GETID3_ASF_Audio_Media:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
						// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
						// Codec ID / Format Tag        WORD         16              // unique ID of audio codec - defined as wFormatTag field of WAVEFORMATEX structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
						// Number of Channels           WORD         16              // number of channels of audio - defined as nChannels field of WAVEFORMATEX structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
						// Samples Per Second           DWORD        32              // in Hertz - defined as nSamplesPerSec field of WAVEFORMATEX structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
						// Average number of Bytes/sec  DWORD        32              // bytes/sec of audio stream  - defined as nAvgBytesPerSec field of WAVEFORMATEX structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
						// Block Alignment              WORD         16              // block size in bytes of audio codec - defined as nBlockAlign field of WAVEFORMATEX structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
						// Bits per sample              WORD         16              // bits per sample of mono data. set to zero for variable bitrate codecs. defined as wBitsPerSample field of WAVEFORMATEX structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
						// Codec Specific Data Size     WORD         16              // size in bytes of Codec Specific Data buffer - defined as cbSize field of WAVEFORMATEX structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
						// Codec Specific Data          BYTESTREAM   variable        // array of codec-specific data bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
						// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
						$thisfile_asf['audio_media'][$streamnumber] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
						$thisfile_asf_audiomedia_currentstream      = &$thisfile_asf['audio_media'][$streamnumber];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
						$audiomediaoffset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
						$thisfile_asf_audiomedia_currentstream = getid3_riff::parseWAVEFORMATex(substr($streamdata['type_specific_data'], $audiomediaoffset, 16));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
						$audiomediaoffset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
						$thisfile_audio['lossless'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
						switch ($thisfile_asf_audiomedia_currentstream['raw']['wFormatTag']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
							case 0x0001: // PCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
							case 0x0163: // WMA9 Lossless
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
								$thisfile_audio['lossless'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
						if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
							foreach ($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'] as $dummy => $dataarray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
								if (isset($dataarray['flags']['stream_number']) && ($dataarray['flags']['stream_number'] == $streamnumber)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
									$thisfile_asf_audiomedia_currentstream['bitrate'] = $dataarray['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
									$thisfile_audio['bitrate'] += $dataarray['bitrate'];
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
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
							if (!empty($thisfile_asf_audiomedia_currentstream['bytes_sec'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
								$thisfile_audio['bitrate'] += $thisfile_asf_audiomedia_currentstream['bytes_sec'] * 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
							} elseif (!empty($thisfile_asf_audiomedia_currentstream['bitrate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
								$thisfile_audio['bitrate'] += $thisfile_asf_audiomedia_currentstream['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
						$thisfile_audio['streams'][$streamnumber]                = $thisfile_asf_audiomedia_currentstream;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
						$thisfile_audio['streams'][$streamnumber]['wformattag']  = $thisfile_asf_audiomedia_currentstream['raw']['wFormatTag'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
						$thisfile_audio['streams'][$streamnumber]['lossless']    = $thisfile_audio['lossless'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
						$thisfile_audio['streams'][$streamnumber]['bitrate']     = $thisfile_audio['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
						$thisfile_audio['streams'][$streamnumber]['dataformat']  = 'wma';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
						unset($thisfile_audio['streams'][$streamnumber]['raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
						$thisfile_asf_audiomedia_currentstream['codec_data_size'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $audiomediaoffset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
						$audiomediaoffset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
						$thisfile_asf_audiomedia_currentstream['codec_data']      = substr($streamdata['type_specific_data'], $audiomediaoffset, $thisfile_asf_audiomedia_currentstream['codec_data_size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
						$audiomediaoffset += $thisfile_asf_audiomedia_currentstream['codec_data_size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
					case GETID3_ASF_Video_Media:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
						// Field Name                   Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
						// Encoded Image Width          DWORD        32              // width of image in pixels
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
						// Encoded Image Height         DWORD        32              // height of image in pixels
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
						// Reserved Flags               BYTE         8               // hardcoded: 0x02
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
						// Format Data Size             WORD         16              // size of Format Data field in bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
						// Format Data                  array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
						// * Format Data Size           DWORD        32              // number of bytes in Format Data field, in bytes - defined as biSize field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
						// * Image Width                LONG         32              // width of encoded image in pixels - defined as biWidth field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
						// * Image Height               LONG         32              // height of encoded image in pixels - defined as biHeight field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
						// * Reserved                   WORD         16              // hardcoded: 0x0001 - defined as biPlanes field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
						// * Bits Per Pixel Count       WORD         16              // bits per pixel - defined as biBitCount field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
						// * Compression ID             FOURCC       32              // fourcc of video codec - defined as biCompression field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
						// * Image Size                 DWORD        32              // image size in bytes - defined as biSizeImage field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
						// * Horizontal Pixels / Meter  DWORD        32              // horizontal resolution of target device in pixels per meter - defined as biXPelsPerMeter field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
						// * Vertical Pixels / Meter    DWORD        32              // vertical resolution of target device in pixels per meter - defined as biYPelsPerMeter field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
						// * Colors Used Count          DWORD        32              // number of color indexes in the color table that are actually used - defined as biClrUsed field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
						// * Important Colors Count     DWORD        32              // number of color index required for displaying bitmap. if zero, all colors are required. defined as biClrImportant field of BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
						// * Codec Specific Data        BYTESTREAM   variable        // array of codec-specific data bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
						// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
						$thisfile_asf['video_media'][$streamnumber] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
						$thisfile_asf_videomedia_currentstream      = &$thisfile_asf['video_media'][$streamnumber];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
						$videomediaoffset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
						$thisfile_asf_videomedia_currentstream['image_width']                     = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
						$thisfile_asf_videomedia_currentstream['image_height']                    = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
						$thisfile_asf_videomedia_currentstream['flags']                           = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
						$videomediaoffset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
						$thisfile_asf_videomedia_currentstream['format_data_size']                = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
						$videomediaoffset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
						$thisfile_asf_videomedia_currentstream['format_data']['format_data_size'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
						$thisfile_asf_videomedia_currentstream['format_data']['image_width']      = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
						$thisfile_asf_videomedia_currentstream['format_data']['image_height']     = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
						$thisfile_asf_videomedia_currentstream['format_data']['reserved']         = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
						$videomediaoffset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
						$thisfile_asf_videomedia_currentstream['format_data']['bits_per_pixel']   = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
						$videomediaoffset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
						$thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc']     = substr($streamdata['type_specific_data'], $videomediaoffset, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
						$thisfile_asf_videomedia_currentstream['format_data']['image_size']       = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
						$thisfile_asf_videomedia_currentstream['format_data']['horizontal_pels']  = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
						$thisfile_asf_videomedia_currentstream['format_data']['vertical_pels']    = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
						$thisfile_asf_videomedia_currentstream['format_data']['colors_used']      = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
						$thisfile_asf_videomedia_currentstream['format_data']['colors_important'] = getid3_lib::LittleEndian2Int(substr($streamdata['type_specific_data'], $videomediaoffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
						$videomediaoffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
						$thisfile_asf_videomedia_currentstream['format_data']['codec_data']       = substr($streamdata['type_specific_data'], $videomediaoffset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
						if (!empty($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
							foreach ($thisfile_asf['stream_bitrate_properties_object']['bitrate_records'] as $dummy => $dataarray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
								if (isset($dataarray['flags']['stream_number']) && ($dataarray['flags']['stream_number'] == $streamnumber)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
									$thisfile_asf_videomedia_currentstream['bitrate'] = $dataarray['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
									$thisfile_video['streams'][$streamnumber]['bitrate'] = $dataarray['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
									$thisfile_video['bitrate'] += $dataarray['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
								}
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
						$thisfile_asf_videomedia_currentstream['format_data']['codec'] = getid3_riff::fourccLookup($thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
						$thisfile_video['streams'][$streamnumber]['fourcc']          = $thisfile_asf_videomedia_currentstream['format_data']['codec_fourcc'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
						$thisfile_video['streams'][$streamnumber]['codec']           = $thisfile_asf_videomedia_currentstream['format_data']['codec'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
						$thisfile_video['streams'][$streamnumber]['resolution_x']    = $thisfile_asf_videomedia_currentstream['image_width'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
						$thisfile_video['streams'][$streamnumber]['resolution_y']    = $thisfile_asf_videomedia_currentstream['image_height'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
						$thisfile_video['streams'][$streamnumber]['bits_per_sample'] = $thisfile_asf_videomedia_currentstream['format_data']['bits_per_pixel'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
					default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1148
		while ($this->ftell() < $info['avdataend']) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1149
			$NextObjectDataHeader = $this->fread(24);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
			$offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
			$NextObjectGUID = substr($NextObjectDataHeader, 0, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
			$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
			$NextObjectGUIDtext = $this->BytestringToGUID($NextObjectGUID);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
			$NextObjectSize = getid3_lib::LittleEndian2Int(substr($NextObjectDataHeader, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
			$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
			switch ($NextObjectGUID) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
				case GETID3_ASF_Data_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
					// Data Object: (mandatory, one only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
					// Field Name                       Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
					// Object ID                        GUID         128             // GUID for Data object - GETID3_ASF_Data_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
					// Object Size                      QWORD        64              // size of Data object, including 50 bytes of Data Object header. may be 0 if FilePropertiesObject.BroadcastFlag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
					// File ID                          GUID         128             // unique identifier. identical to File ID field in Header Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
					// Total Data Packets               QWORD        64              // number of Data Packet entries in Data Object. invalid if FilePropertiesObject.BroadcastFlag == 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
					// Reserved                         WORD         16              // hardcoded: 0x0101
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
					$thisfile_asf['data_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
					$thisfile_asf_dataobject     = &$thisfile_asf['data_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1171
					$DataObjectData = $NextObjectDataHeader.$this->fread(50 - 24);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
					$offset = 24;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
					$thisfile_asf_dataobject['objectid']           = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
					$thisfile_asf_dataobject['objectid_guid']      = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
					$thisfile_asf_dataobject['objectsize']         = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
					$thisfile_asf_dataobject['fileid']             = substr($DataObjectData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
					$thisfile_asf_dataobject['fileid_guid']        = $this->BytestringToGUID($thisfile_asf_dataobject['fileid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
					$thisfile_asf_dataobject['total_data_packets'] = getid3_lib::LittleEndian2Int(substr($DataObjectData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
					$thisfile_asf_dataobject['reserved']           = getid3_lib::LittleEndian2Int(substr($DataObjectData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
					if ($thisfile_asf_dataobject['reserved'] != 0x0101) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1186
						$this->warning('data_object.reserved ('.getid3_lib::PrintHexBytes($thisfile_asf_dataobject['reserved']).') does not match expected value of "0x0101"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
						//return false;
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
					// Data Packets                     array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
					// * Error Correction Flags         BYTE         8               //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
					// * * Error Correction Data Length bits         4               // if Error Correction Length Type == 00, size of Error Correction Data in bytes, else hardcoded: 0000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
					// * * Opaque Data Present          bits         1               //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
					// * * Error Correction Length Type bits         2               // number of bits for size of the error correction data. hardcoded: 00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
					// * * Error Correction Present     bits         1               // If set, use Opaque Data Packet structure, else use Payload structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
					// * Error Correction Data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1199
					$info['avdataoffset'] = $this->ftell();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1200
					$this->fseek(($thisfile_asf_dataobject['objectsize'] - 50), SEEK_CUR); // skip actual audio/video data
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1201
					$info['avdataend'] = $this->ftell();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
				case GETID3_ASF_Simple_Index_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
					// Simple Index Object: (optional, recommended, one per video stream)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
					// Field Name                       Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
					// Object ID                        GUID         128             // GUID for Simple Index object - GETID3_ASF_Data_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
					// Object Size                      QWORD        64              // size of Simple Index object, including 56 bytes of Simple Index Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
					// File ID                          GUID         128             // unique identifier. may be zero or identical to File ID field in Data Object and Header Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
					// Index Entry Time Interval        QWORD        64              // interval between index entries in 100-nanosecond units
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
					// Maximum Packet Count             DWORD        32              // maximum packet count for all index entries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
					// Index Entries Count              DWORD        32              // number of Index Entries structures
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
					// Index Entries                    array of:    variable        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
					// * Packet Number                  DWORD        32              // number of the Data Packet associated with this index entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
					// * Packet Count                   WORD         16              // number of Data Packets to sent at this index entry
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
					$thisfile_asf['simple_index_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
					$thisfile_asf_simpleindexobject      = &$thisfile_asf['simple_index_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1221
					$SimpleIndexObjectData = $NextObjectDataHeader.$this->fread(56 - 24);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
					$offset = 24;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
					$thisfile_asf_simpleindexobject['objectid']                  = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
					$thisfile_asf_simpleindexobject['objectid_guid']             = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
					$thisfile_asf_simpleindexobject['objectsize']                = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
					$thisfile_asf_simpleindexobject['fileid']                    =                  substr($SimpleIndexObjectData, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
					$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
					$thisfile_asf_simpleindexobject['fileid_guid']               = $this->BytestringToGUID($thisfile_asf_simpleindexobject['fileid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
					$thisfile_asf_simpleindexobject['index_entry_time_interval'] = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
					$thisfile_asf_simpleindexobject['maximum_packet_count']      = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
					$thisfile_asf_simpleindexobject['index_entries_count']       = getid3_lib::LittleEndian2Int(substr($SimpleIndexObjectData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1238
					$IndexEntriesData = $SimpleIndexObjectData.$this->fread(6 * $thisfile_asf_simpleindexobject['index_entries_count']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
					for ($IndexEntriesCounter = 0; $IndexEntriesCounter < $thisfile_asf_simpleindexobject['index_entries_count']; $IndexEntriesCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
						$thisfile_asf_simpleindexobject['index_entries'][$IndexEntriesCounter]['packet_number'] = getid3_lib::LittleEndian2Int(substr($IndexEntriesData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
						$thisfile_asf_simpleindexobject['index_entries'][$IndexEntriesCounter]['packet_count']  = getid3_lib::LittleEndian2Int(substr($IndexEntriesData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
				case GETID3_ASF_Index_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
					// 6.2 ASF top-level Index Object (optional but recommended when appropriate, 0 or 1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
					// Field Name                       Field Type   Size (bits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
					// Object ID                        GUID         128             // GUID for the Index Object - GETID3_ASF_Index_Object
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
					// Object Size                      QWORD        64              // Specifies the size, in bytes, of the Index Object, including at least 34 bytes of Index Object header
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
					// Index Entry Time Interval        DWORD        32              // Specifies the time interval between each index entry in ms.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
					// Index Specifiers Count           WORD         16              // Specifies the number of Index Specifiers structures in this Index Object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
					// Index Blocks Count               DWORD        32              // Specifies the number of Index Blocks structures in this Index Object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
					// Index Entry Time Interval        DWORD        32              // Specifies the time interval between index entries in milliseconds.  This value cannot be 0.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
					// Index Specifiers Count           WORD         16              // Specifies the number of entries in the Index Specifiers list.  Valid values are 1 and greater.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
					// Index Specifiers                 array of:    varies          //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
					// * Stream Number                  WORD         16              // Specifies the stream number that the Index Specifiers refer to. Valid values are between 1 and 127.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
					// * Index Type                     WORD         16              // Specifies Index Type values as follows:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
																					//   1 = Nearest Past Data Packet - indexes point to the data packet whose presentation time is closest to the index entry time.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
																					//   2 = Nearest Past Media Object - indexes point to the closest data packet containing an entire object or first fragment of an object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
																					//   3 = Nearest Past Cleanpoint. - indexes point to the closest data packet containing an entire object (or first fragment of an object) that has the Cleanpoint Flag set.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
																					//   Nearest Past Cleanpoint is the most common type of index.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
					// Index Entry Count                DWORD        32              // Specifies the number of Index Entries in the block.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
					// * Block Positions                QWORD        varies          // Specifies a list of byte offsets of the beginnings of the blocks relative to the beginning of the first Data Packet (i.e., the beginning of the Data Object + 50 bytes). The number of entries in this list is specified by the value of the Index Specifiers Count field. The order of those byte offsets is tied to the order in which Index Specifiers are listed.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
					// * Index Entries                  array of:    varies          //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
					// * * Offsets                      DWORD        varies          // An offset value of 0xffffffff indicates an invalid offset value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
					$thisfile_asf['asf_index_object'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
					$thisfile_asf_asfindexobject      = &$thisfile_asf['asf_index_object'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1275
					$ASFIndexObjectData = $NextObjectDataHeader.$this->fread(34 - 24);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
					$offset = 24;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
					$thisfile_asf_asfindexobject['objectid']                  = $NextObjectGUID;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
					$thisfile_asf_asfindexobject['objectid_guid']             = $NextObjectGUIDtext;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
					$thisfile_asf_asfindexobject['objectsize']                = $NextObjectSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
					$thisfile_asf_asfindexobject['entry_time_interval']       = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
					$thisfile_asf_asfindexobject['index_specifiers_count']    = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
					$thisfile_asf_asfindexobject['index_blocks_count']        = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1289
					$ASFIndexObjectData .= $this->fread(4 * $thisfile_asf_asfindexobject['index_specifiers_count']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
					for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
						$IndexSpecifierStreamNumber = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
						$thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['stream_number']   = $IndexSpecifierStreamNumber;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
						$thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type']      = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
						$thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type_text'] = $this->ASFIndexObjectIndexTypeLookup($thisfile_asf_asfindexobject['index_specifiers'][$IndexSpecifiersCounter]['index_type']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1299
					$ASFIndexObjectData .= $this->fread(4);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
					$thisfile_asf_asfindexobject['index_entry_count'] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1303
					$ASFIndexObjectData .= $this->fread(8 * $thisfile_asf_asfindexobject['index_specifiers_count']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
					for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
						$thisfile_asf_asfindexobject['block_positions'][$IndexSpecifiersCounter] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
						$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1309
					$ASFIndexObjectData .= $this->fread(4 * $thisfile_asf_asfindexobject['index_specifiers_count'] * $thisfile_asf_asfindexobject['index_entry_count']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
					for ($IndexEntryCounter = 0; $IndexEntryCounter < $thisfile_asf_asfindexobject['index_entry_count']; $IndexEntryCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
						for ($IndexSpecifiersCounter = 0; $IndexSpecifiersCounter < $thisfile_asf_asfindexobject['index_specifiers_count']; $IndexSpecifiersCounter++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
							$thisfile_asf_asfindexobject['offsets'][$IndexSpecifiersCounter][$IndexEntryCounter] = getid3_lib::LittleEndian2Int(substr($ASFIndexObjectData, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
							$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
					// Implementations shall ignore any standard or non-standard object that they do not know how to handle.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
					if ($this->GUIDname($NextObjectGUIDtext)) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1322
						$this->warning('unhandled GUID "'.$this->GUIDname($NextObjectGUIDtext).'" {'.$NextObjectGUIDtext.'} in ASF body at offset '.($offset - 16 - 8));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
					} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1324
						$this->warning('unknown GUID {'.$NextObjectGUIDtext.'} in ASF body at offset '.($this->ftell() - 16 - 8));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
					}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1326
					$this->fseek(($NextObjectSize - 16 - 8), SEEK_CUR);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
		if (isset($thisfile_asf_codeclistobject['codec_entries']) && is_array($thisfile_asf_codeclistobject['codec_entries'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
			foreach ($thisfile_asf_codeclistobject['codec_entries'] as $streamnumber => $streamdata) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
				switch ($streamdata['information']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
					case 'WMV1':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
					case 'WMV2':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
					case 'WMV3':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
					case 'MSS1':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
					case 'MSS2':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
					case 'WMVA':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
					case 'WVC1':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
					case 'WMVP':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
					case 'WVP2':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
						$thisfile_video['dataformat'] = 'wmv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
						$info['mime_type'] = 'video/x-ms-wmv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
					case 'MP42':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
					case 'MP43':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
					case 'MP4S':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
					case 'mp4s':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
						$thisfile_video['dataformat'] = 'asf';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
						$info['mime_type'] = 'video/x-ms-asf';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
					default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
						switch ($streamdata['type_raw']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
							case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
								if (strstr($this->TrimConvert($streamdata['name']), 'Windows Media')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
									$thisfile_video['dataformat'] = 'wmv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
									if ($info['mime_type'] == 'video/x-ms-asf') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
										$info['mime_type'] = 'video/x-ms-wmv';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
							case 2:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
								if (strstr($this->TrimConvert($streamdata['name']), 'Windows Media')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
									$thisfile_audio['dataformat'] = 'wma';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
									if ($info['mime_type'] == 'video/x-ms-asf') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
										$info['mime_type'] = 'audio/x-ms-wma';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
		switch (isset($thisfile_audio['codec']) ? $thisfile_audio['codec'] : '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
			case 'MPEG Layer-3':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
				$thisfile_audio['dataformat'] = 'mp3';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
		if (isset($thisfile_asf_codeclistobject['codec_entries'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
			foreach ($thisfile_asf_codeclistobject['codec_entries'] as $streamnumber => $streamdata) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
				switch ($streamdata['type_raw']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
					case 1: // video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
						$thisfile_video['encoder'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][$streamnumber]['name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
					case 2: // audio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
						$thisfile_audio['encoder'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][$streamnumber]['name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
						// AH 2003-10-01
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
						$thisfile_audio['encoder_options'] = $this->TrimConvert($thisfile_asf_codeclistobject['codec_entries'][0]['description']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
						$thisfile_audio['codec']   = $thisfile_audio['encoder'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
					default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1408
						$this->warning('Unknown streamtype: [codec_list_object][codec_entries]['.$streamnumber.'][type_raw] == '.$streamdata['type_raw']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
				}
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
		if (isset($info['audio'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
			$thisfile_audio['lossless']           = (isset($thisfile_audio['lossless'])           ? $thisfile_audio['lossless']           : false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
			$thisfile_audio['dataformat']         = (!empty($thisfile_audio['dataformat'])        ? $thisfile_audio['dataformat']         : 'asf');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
		if (!empty($thisfile_video['dataformat'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
			$thisfile_video['lossless']           = (isset($thisfile_audio['lossless'])           ? $thisfile_audio['lossless']           : false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
			$thisfile_video['pixel_aspect_ratio'] = (isset($thisfile_audio['pixel_aspect_ratio']) ? $thisfile_audio['pixel_aspect_ratio'] : (float) 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
			$thisfile_video['dataformat']         = (!empty($thisfile_video['dataformat'])        ? $thisfile_video['dataformat']         : 'asf');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
		if (!empty($thisfile_video['streams'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1425
			$thisfile_video['resolution_x'] = 0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1426
			$thisfile_video['resolution_y'] = 0;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
			foreach ($thisfile_video['streams'] as $key => $valuearray) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1428
				if (($valuearray['resolution_x'] > $thisfile_video['resolution_x']) || ($valuearray['resolution_y'] > $thisfile_video['resolution_y'])) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
					$thisfile_video['resolution_x'] = $valuearray['resolution_x'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
					$thisfile_video['resolution_y'] = $valuearray['resolution_y'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
		$info['bitrate'] = (isset($thisfile_audio['bitrate']) ? $thisfile_audio['bitrate'] : 0) + (isset($thisfile_video['bitrate']) ? $thisfile_video['bitrate'] : 0);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
		if ((!isset($info['playtime_seconds']) || ($info['playtime_seconds'] <= 0)) && ($info['bitrate'] > 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
			$info['playtime_seconds'] = ($info['filesize'] - $info['avdataoffset']) / ($info['bitrate'] / 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1443
	public static function codecListObjectTypeLookup($CodecListType) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1444
		static $lookup = array(
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1445
			0x0001 => 'Video Codec',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1446
			0x0002 => 'Audio Codec',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1447
			0xFFFF => 'Unknown Codec'
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1448
		);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1450
		return (isset($lookup[$CodecListType]) ? $lookup[$CodecListType] : 'Invalid Codec Type');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
	public static function KnownGUIDs() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
		static $GUIDarray = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
			'GETID3_ASF_Extended_Stream_Properties_Object'   => '14E6A5CB-C672-4332-8399-A96952065B5A',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
			'GETID3_ASF_Padding_Object'                      => '1806D474-CADF-4509-A4BA-9AABCB96AAE8',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
			'GETID3_ASF_Payload_Ext_Syst_Pixel_Aspect_Ratio' => '1B1EE554-F9EA-4BC8-821A-376B74E4C4B8',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
			'GETID3_ASF_Script_Command_Object'               => '1EFB1A30-0B62-11D0-A39B-00A0C90348F6',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
			'GETID3_ASF_No_Error_Correction'                 => '20FB5700-5B55-11CF-A8FD-00805F5C442B',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
			'GETID3_ASF_Content_Branding_Object'             => '2211B3FA-BD23-11D2-B4B7-00A0C955FC6E',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
			'GETID3_ASF_Content_Encryption_Object'           => '2211B3FB-BD23-11D2-B4B7-00A0C955FC6E',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
			'GETID3_ASF_Digital_Signature_Object'            => '2211B3FC-BD23-11D2-B4B7-00A0C955FC6E',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
			'GETID3_ASF_Extended_Content_Encryption_Object'  => '298AE614-2622-4C17-B935-DAE07EE9289C',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
			'GETID3_ASF_Simple_Index_Object'                 => '33000890-E5B1-11CF-89F4-00A0C90349CB',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
			'GETID3_ASF_Degradable_JPEG_Media'               => '35907DE0-E415-11CF-A917-00805F5C442B',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
			'GETID3_ASF_Payload_Extension_System_Timecode'   => '399595EC-8667-4E2D-8FDB-98814CE76C1E',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
			'GETID3_ASF_Binary_Media'                        => '3AFB65E2-47EF-40F2-AC2C-70A90D71D343',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
			'GETID3_ASF_Timecode_Index_Object'               => '3CB73FD0-0C4A-4803-953D-EDF7B6228F0C',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
			'GETID3_ASF_Metadata_Library_Object'             => '44231C94-9498-49D1-A141-1D134E457054',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
			'GETID3_ASF_Reserved_3'                          => '4B1ACBE3-100B-11D0-A39B-00A0C90348F6',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
			'GETID3_ASF_Reserved_4'                          => '4CFEDB20-75F6-11CF-9C0F-00A0C90349CB',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
			'GETID3_ASF_Command_Media'                       => '59DACFC0-59E6-11D0-A3AC-00A0C90348F6',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
			'GETID3_ASF_Header_Extension_Object'             => '5FBF03B5-A92E-11CF-8EE3-00C00C205365',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
			'GETID3_ASF_Media_Object_Index_Parameters_Obj'   => '6B203BAD-3F11-4E84-ACA8-D7613DE2CFA7',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
			'GETID3_ASF_Header_Object'                       => '75B22630-668E-11CF-A6D9-00AA0062CE6C',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
			'GETID3_ASF_Content_Description_Object'          => '75B22633-668E-11CF-A6D9-00AA0062CE6C',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
			'GETID3_ASF_Error_Correction_Object'             => '75B22635-668E-11CF-A6D9-00AA0062CE6C',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
			'GETID3_ASF_Data_Object'                         => '75B22636-668E-11CF-A6D9-00AA0062CE6C',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
			'GETID3_ASF_Web_Stream_Media_Subtype'            => '776257D4-C627-41CB-8F81-7AC7FF1C40CC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
			'GETID3_ASF_Stream_Bitrate_Properties_Object'    => '7BF875CE-468D-11D1-8D82-006097C9A2B2',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
			'GETID3_ASF_Language_List_Object'                => '7C4346A9-EFE0-4BFC-B229-393EDE415C85',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
			'GETID3_ASF_Codec_List_Object'                   => '86D15240-311D-11D0-A3A4-00A0C90348F6',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
			'GETID3_ASF_Reserved_2'                          => '86D15241-311D-11D0-A3A4-00A0C90348F6',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
			'GETID3_ASF_File_Properties_Object'              => '8CABDCA1-A947-11CF-8EE4-00C00C205365',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
			'GETID3_ASF_File_Transfer_Media'                 => '91BD222C-F21C-497A-8B6D-5AA86BFC0185',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
			'GETID3_ASF_Old_RTP_Extension_Data'              => '96800C63-4C94-11D1-837B-0080C7A37F95',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
			'GETID3_ASF_Advanced_Mutual_Exclusion_Object'    => 'A08649CF-4775-4670-8A16-6E35357566CD',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
			'GETID3_ASF_Bandwidth_Sharing_Object'            => 'A69609E6-517B-11D2-B6AF-00C04FD908E9',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
			'GETID3_ASF_Reserved_1'                          => 'ABD3D211-A9BA-11cf-8EE6-00C00C205365',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
			'GETID3_ASF_Bandwidth_Sharing_Exclusive'         => 'AF6060AA-5197-11D2-B6AF-00C04FD908E9',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
			'GETID3_ASF_Bandwidth_Sharing_Partial'           => 'AF6060AB-5197-11D2-B6AF-00C04FD908E9',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
			'GETID3_ASF_JFIF_Media'                          => 'B61BE100-5B4E-11CF-A8FD-00805F5C442B',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
			'GETID3_ASF_Stream_Properties_Object'            => 'B7DC0791-A9B7-11CF-8EE6-00C00C205365',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
			'GETID3_ASF_Video_Media'                         => 'BC19EFC0-5B4D-11CF-A8FD-00805F5C442B',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
			'GETID3_ASF_Audio_Spread'                        => 'BFC3CD50-618F-11CF-8BB2-00AA00B4E220',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
			'GETID3_ASF_Metadata_Object'                     => 'C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
			'GETID3_ASF_Payload_Ext_Syst_Sample_Duration'    => 'C6BD9450-867F-4907-83A3-C77921B733AD',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
			'GETID3_ASF_Group_Mutual_Exclusion_Object'       => 'D1465A40-5A79-4338-B71B-E36B8FD6C249',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
			'GETID3_ASF_Extended_Content_Description_Object' => 'D2D0A440-E307-11D2-97F0-00A0C95EA850',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
			'GETID3_ASF_Stream_Prioritization_Object'        => 'D4FED15B-88D3-454F-81F0-ED5C45999E24',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
			'GETID3_ASF_Payload_Ext_System_Content_Type'     => 'D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
			'GETID3_ASF_Old_File_Properties_Object'          => 'D6E229D0-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
			'GETID3_ASF_Old_ASF_Header_Object'               => 'D6E229D1-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
			'GETID3_ASF_Old_ASF_Data_Object'                 => 'D6E229D2-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
			'GETID3_ASF_Index_Object'                        => 'D6E229D3-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
			'GETID3_ASF_Old_Stream_Properties_Object'        => 'D6E229D4-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
			'GETID3_ASF_Old_Content_Description_Object'      => 'D6E229D5-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
			'GETID3_ASF_Old_Script_Command_Object'           => 'D6E229D6-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
			'GETID3_ASF_Old_Marker_Object'                   => 'D6E229D7-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
			'GETID3_ASF_Old_Component_Download_Object'       => 'D6E229D8-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
			'GETID3_ASF_Old_Stream_Group_Object'             => 'D6E229D9-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
			'GETID3_ASF_Old_Scalable_Object'                 => 'D6E229DA-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
			'GETID3_ASF_Old_Prioritization_Object'           => 'D6E229DB-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
			'GETID3_ASF_Bitrate_Mutual_Exclusion_Object'     => 'D6E229DC-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
			'GETID3_ASF_Old_Inter_Media_Dependency_Object'   => 'D6E229DD-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
			'GETID3_ASF_Old_Rating_Object'                   => 'D6E229DE-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
			'GETID3_ASF_Index_Parameters_Object'             => 'D6E229DF-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
			'GETID3_ASF_Old_Color_Table_Object'              => 'D6E229E0-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
			'GETID3_ASF_Old_Language_List_Object'            => 'D6E229E1-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
			'GETID3_ASF_Old_Audio_Media'                     => 'D6E229E2-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
			'GETID3_ASF_Old_Video_Media'                     => 'D6E229E3-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
			'GETID3_ASF_Old_Image_Media'                     => 'D6E229E4-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
			'GETID3_ASF_Old_Timecode_Media'                  => 'D6E229E5-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
			'GETID3_ASF_Old_Text_Media'                      => 'D6E229E6-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
			'GETID3_ASF_Old_MIDI_Media'                      => 'D6E229E7-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
			'GETID3_ASF_Old_Command_Media'                   => 'D6E229E8-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
			'GETID3_ASF_Old_No_Error_Concealment'            => 'D6E229EA-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
			'GETID3_ASF_Old_Scrambled_Audio'                 => 'D6E229EB-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
			'GETID3_ASF_Old_No_Color_Table'                  => 'D6E229EC-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
			'GETID3_ASF_Old_SMPTE_Time'                      => 'D6E229ED-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
			'GETID3_ASF_Old_ASCII_Text'                      => 'D6E229EE-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
			'GETID3_ASF_Old_Unicode_Text'                    => 'D6E229EF-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
			'GETID3_ASF_Old_HTML_Text'                       => 'D6E229F0-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
			'GETID3_ASF_Old_URL_Command'                     => 'D6E229F1-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
			'GETID3_ASF_Old_Filename_Command'                => 'D6E229F2-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
			'GETID3_ASF_Old_ACM_Codec'                       => 'D6E229F3-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
			'GETID3_ASF_Old_VCM_Codec'                       => 'D6E229F4-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
			'GETID3_ASF_Old_QuickTime_Codec'                 => 'D6E229F5-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
			'GETID3_ASF_Old_DirectShow_Transform_Filter'     => 'D6E229F6-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
			'GETID3_ASF_Old_DirectShow_Rendering_Filter'     => 'D6E229F7-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
			'GETID3_ASF_Old_No_Enhancement'                  => 'D6E229F8-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
			'GETID3_ASF_Old_Unknown_Enhancement_Type'        => 'D6E229F9-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
			'GETID3_ASF_Old_Temporal_Enhancement'            => 'D6E229FA-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
			'GETID3_ASF_Old_Spatial_Enhancement'             => 'D6E229FB-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
			'GETID3_ASF_Old_Quality_Enhancement'             => 'D6E229FC-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
			'GETID3_ASF_Old_Number_of_Channels_Enhancement'  => 'D6E229FD-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
			'GETID3_ASF_Old_Frequency_Response_Enhancement'  => 'D6E229FE-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
			'GETID3_ASF_Old_Media_Object'                    => 'D6E229FF-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
			'GETID3_ASF_Mutex_Language'                      => 'D6E22A00-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
			'GETID3_ASF_Mutex_Bitrate'                       => 'D6E22A01-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
			'GETID3_ASF_Mutex_Unknown'                       => 'D6E22A02-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
			'GETID3_ASF_Old_ASF_Placeholder_Object'          => 'D6E22A0E-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
			'GETID3_ASF_Old_Data_Unit_Extension_Object'      => 'D6E22A0F-35DA-11D1-9034-00A0C90349BE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
			'GETID3_ASF_Web_Stream_Format'                   => 'DA1E6B13-8359-4050-B398-388E965BF00C',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
			'GETID3_ASF_Payload_Ext_System_File_Name'        => 'E165EC0E-19ED-45D7-B4A7-25CBD1E28E9B',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
			'GETID3_ASF_Marker_Object'                       => 'F487CD01-A951-11CF-8EE6-00C00C205365',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
			'GETID3_ASF_Timecode_Index_Parameters_Object'    => 'F55E496D-9797-4B5D-8C8B-604DFE9BFB24',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
			'GETID3_ASF_Audio_Media'                         => 'F8699E40-5B4D-11CF-A8FD-00805F5C442B',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
			'GETID3_ASF_Media_Object_Index_Object'           => 'FEB103F8-12AD-4C64-840F-2A1D2F7AD48C',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
			'GETID3_ASF_Alt_Extended_Content_Encryption_Obj' => 'FF889EF1-ADEE-40DA-9E71-98704BB928CE',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
			'GETID3_ASF_Index_Placeholder_Object'            => 'D9AADE20-7C17-4F9C-BC28-8555DD98E2A2', // http://cpan.uwinnipeg.ca/htdocs/Audio-WMA/Audio/WMA.pm.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
			'GETID3_ASF_Compatibility_Object'                => '26F18B5D-4584-47EC-9F5F-0E651F0452C9', // http://cpan.uwinnipeg.ca/htdocs/Audio-WMA/Audio/WMA.pm.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
		return $GUIDarray;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
	public static function GUIDname($GUIDstring) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
		static $GUIDarray = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
		if (empty($GUIDarray)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
			$GUIDarray = self::KnownGUIDs();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
		return array_search($GUIDstring, $GUIDarray);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
	public static function ASFIndexObjectIndexTypeLookup($id) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
		static $ASFIndexObjectIndexTypeLookup = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
		if (empty($ASFIndexObjectIndexTypeLookup)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
			$ASFIndexObjectIndexTypeLookup[1] = 'Nearest Past Data Packet';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
			$ASFIndexObjectIndexTypeLookup[2] = 'Nearest Past Media Object';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
			$ASFIndexObjectIndexTypeLookup[3] = 'Nearest Past Cleanpoint';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
		return (isset($ASFIndexObjectIndexTypeLookup[$id]) ? $ASFIndexObjectIndexTypeLookup[$id] : 'invalid');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
	public static function GUIDtoBytestring($GUIDstring) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
		// Microsoft defines these 16-byte (128-bit) GUIDs in the strangest way:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
		// first 4 bytes are in little-endian order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
		// next 2 bytes are appended in little-endian order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
		// next 2 bytes are appended in little-endian order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
		// next 2 bytes are appended in big-endian order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
		// next 6 bytes are appended in big-endian order
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
		// AaBbCcDd-EeFf-GgHh-IiJj-KkLlMmNnOoPp is stored as this 16-byte string:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
		// $Dd $Cc $Bb $Aa $Ff $Ee $Hh $Gg $Ii $Jj $Kk $Ll $Mm $Nn $Oo $Pp
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
		$hexbytecharstring  = chr(hexdec(substr($GUIDstring,  6, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring,  4, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring,  2, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring,  0, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 11, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring,  9, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 16, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 14, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 19, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 21, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 24, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 26, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 28, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 30, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 32, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
		$hexbytecharstring .= chr(hexdec(substr($GUIDstring, 34, 2)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
		return $hexbytecharstring;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
	public static function BytestringToGUID($Bytestring) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
		$GUIDstring  = str_pad(dechex(ord($Bytestring{3})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
		$GUIDstring .= str_pad(dechex(ord($Bytestring{2})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
		$GUIDstring .= str_pad(dechex(ord($Bytestring{1})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
		$GUIDstring .= str_pad(dechex(ord($Bytestring{0})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
		$GUIDstring .= '-';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
		$GUIDstring .= str_pad(dechex(ord($Bytestring{5})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
		$GUIDstring .= str_pad(dechex(ord($Bytestring{4})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
		$GUIDstring .= '-';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
		$GUIDstring .= str_pad(dechex(ord($Bytestring{7})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
		$GUIDstring .= str_pad(dechex(ord($Bytestring{6})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
		$GUIDstring .= '-';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
		$GUIDstring .= str_pad(dechex(ord($Bytestring{8})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
		$GUIDstring .= str_pad(dechex(ord($Bytestring{9})),  2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
		$GUIDstring .= '-';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
		$GUIDstring .= str_pad(dechex(ord($Bytestring{10})), 2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
		$GUIDstring .= str_pad(dechex(ord($Bytestring{11})), 2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
		$GUIDstring .= str_pad(dechex(ord($Bytestring{12})), 2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
		$GUIDstring .= str_pad(dechex(ord($Bytestring{13})), 2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
		$GUIDstring .= str_pad(dechex(ord($Bytestring{14})), 2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
		$GUIDstring .= str_pad(dechex(ord($Bytestring{15})), 2, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
		return strtoupper($GUIDstring);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
	public static function FILETIMEtoUNIXtime($FILETIME, $round=true) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
		// FILETIME is a 64-bit unsigned integer representing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
		// the number of 100-nanosecond intervals since January 1, 1601
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
		// UNIX timestamp is number of seconds since January 1, 1970
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
		// 116444736000000000 = 10000000 * 60 * 60 * 24 * 365 * 369 + 89 leap days
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
		if ($round) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
			return intval(round(($FILETIME - 116444736000000000) / 10000000));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
		return ($FILETIME - 116444736000000000) / 10000000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
	public static function WMpictureTypeLookup($WMpictureType) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1657
		static $lookup = null;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1658
		if ($lookup === null) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1659
			$lookup = array(
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1660
				0x03 => 'Front Cover',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1661
				0x04 => 'Back Cover',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1662
				0x00 => 'User Defined',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1663
				0x05 => 'Leaflet Page',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1664
				0x06 => 'Media Label',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1665
				0x07 => 'Lead Artist',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1666
				0x08 => 'Artist',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1667
				0x09 => 'Conductor',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1668
				0x0A => 'Band',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1669
				0x0B => 'Composer',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1670
				0x0C => 'Lyricist',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1671
				0x0D => 'Recording Location',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1672
				0x0E => 'During Recording',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1673
				0x0F => 'During Performance',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1674
				0x10 => 'Video Screen Capture',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1675
				0x12 => 'Illustration',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1676
				0x13 => 'Band Logotype',
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1677
				0x14 => 'Publisher Logotype'
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1678
			);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1679
			$lookup = array_map(function($str) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1680
				return getid3_lib::iconv_fallback('UTF-8', 'UTF-16LE', $str);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1681
			}, $lookup);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
		}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1683
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1684
		return (isset($lookup[$WMpictureType]) ? $lookup[$WMpictureType] : '');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1687
	public function HeaderExtensionObjectDataParse(&$asf_header_extension_object_data, &$unhandled_sections) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
		// http://msdn.microsoft.com/en-us/library/bb643323.aspx
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
		$offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
		$objectOffset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
		$HeaderExtensionObjectParsed = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
		while ($objectOffset < strlen($asf_header_extension_object_data)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
			$offset = $objectOffset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
			$thisObject = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
			$thisObject['guid']                              =                              substr($asf_header_extension_object_data, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
			$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
			$thisObject['guid_text'] = $this->BytestringToGUID($thisObject['guid']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
			$thisObject['guid_name'] = $this->GUIDname($thisObject['guid_text']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
			$thisObject['size']                              = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
			$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
			if ($thisObject['size'] <= 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
			switch ($thisObject['guid']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
				case GETID3_ASF_Extended_Stream_Properties_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
					$thisObject['start_time']                        = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
					$thisObject['start_time_unix']                   = $this->FILETIMEtoUNIXtime($thisObject['start_time']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
					$thisObject['end_time']                          = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
					$offset += 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
					$thisObject['end_time_unix']                     = $this->FILETIMEtoUNIXtime($thisObject['end_time']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
					$thisObject['data_bitrate']                      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
					$thisObject['buffer_size']                       = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
					$thisObject['initial_buffer_fullness']           = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
					$thisObject['alternate_data_bitrate']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
					$thisObject['alternate_buffer_size']             = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
					$thisObject['alternate_initial_buffer_fullness'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
					$thisObject['maximum_object_size']               = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
					$thisObject['flags_raw']                         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
					$thisObject['flags']['reliable']                = (bool) $thisObject['flags_raw'] & 0x00000001;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
					$thisObject['flags']['seekable']                = (bool) $thisObject['flags_raw'] & 0x00000002;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
					$thisObject['flags']['no_cleanpoints']          = (bool) $thisObject['flags_raw'] & 0x00000004;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
					$thisObject['flags']['resend_live_cleanpoints'] = (bool) $thisObject['flags_raw'] & 0x00000008;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
					$thisObject['stream_number']                     = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
					$thisObject['stream_language_id_index']          = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
					$thisObject['average_time_per_frame']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
					$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
					$thisObject['stream_name_count']                 = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
					$thisObject['payload_extension_system_count']    = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
					for ($i = 0; $i < $thisObject['stream_name_count']; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
						$streamName = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
						$streamName['language_id_index']             = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
						$streamName['stream_name_length']            = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
						$streamName['stream_name']                   = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  $streamName['stream_name_length']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
						$offset += $streamName['stream_name_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
						$thisObject['stream_names'][$i] = $streamName;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
					for ($i = 0; $i < $thisObject['payload_extension_system_count']; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
						$payloadExtensionSystem = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
						$payloadExtensionSystem['extension_system_id']   =                              substr($asf_header_extension_object_data, $offset, 16);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
						$offset += 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
						$payloadExtensionSystem['extension_system_id_text'] = $this->BytestringToGUID($payloadExtensionSystem['extension_system_id']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
						$payloadExtensionSystem['extension_system_size'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
						if ($payloadExtensionSystem['extension_system_size'] <= 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
							break 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
						$payloadExtensionSystem['extension_system_info_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
						$payloadExtensionSystem['extension_system_info_length'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  $payloadExtensionSystem['extension_system_info_length']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
						$offset += $payloadExtensionSystem['extension_system_info_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
						$thisObject['payload_extension_systems'][$i] = $payloadExtensionSystem;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
				case GETID3_ASF_Padding_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
					// padding, skip it
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
				case GETID3_ASF_Metadata_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
					$thisObject['description_record_counts'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
					for ($i = 0; $i < $thisObject['description_record_counts']; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
						$descriptionRecord = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
						$descriptionRecord['reserved_1']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2)); // must be zero
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
						$descriptionRecord['stream_number']      = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
						$descriptionRecord['name_length']        = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
						$descriptionRecord['data_type']          = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
						$offset += 2;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1822
						$descriptionRecord['data_type_text'] = self::metadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
						$descriptionRecord['data_length']        = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
						$descriptionRecord['name']               =                              substr($asf_header_extension_object_data, $offset,  $descriptionRecord['name_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
						$offset += $descriptionRecord['name_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
						$descriptionRecord['data']               =                              substr($asf_header_extension_object_data, $offset,  $descriptionRecord['data_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
						$offset += $descriptionRecord['data_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
						switch ($descriptionRecord['data_type']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
							case 0x0000: // Unicode string
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
							case 0x0001: // BYTE array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
								// do nothing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
							case 0x0002: // BOOL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
								$descriptionRecord['data'] = (bool) getid3_lib::LittleEndian2Int($descriptionRecord['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
							case 0x0003: // DWORD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
							case 0x0004: // QWORD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
							case 0x0005: // WORD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
								$descriptionRecord['data'] = getid3_lib::LittleEndian2Int($descriptionRecord['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
							case 0x0006: // GUID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
								$descriptionRecord['data_text'] = $this->BytestringToGUID($descriptionRecord['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
						$thisObject['description_record'][$i] = $descriptionRecord;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
				case GETID3_ASF_Language_List_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
					$thisObject['language_id_record_counts'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
					for ($i = 0; $i < $thisObject['language_id_record_counts']; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
						$languageIDrecord = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
						$languageIDrecord['language_id_length']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
						$offset += 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
						$languageIDrecord['language_id']                =                              substr($asf_header_extension_object_data, $offset,  $languageIDrecord['language_id_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
						$offset += $languageIDrecord['language_id_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
						$thisObject['language_id_record'][$i] = $languageIDrecord;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
				case GETID3_ASF_Metadata_Library_Object:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
					$thisObject['description_records_count'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
					for ($i = 0; $i < $thisObject['description_records_count']; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
						$descriptionRecord = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
						$descriptionRecord['language_list_index'] = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
						$descriptionRecord['stream_number']       = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
						$descriptionRecord['name_length']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
						$descriptionRecord['data_type']           = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
						$offset += 2;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1894
						$descriptionRecord['data_type_text'] = self::metadataLibraryObjectDataTypeLookup($descriptionRecord['data_type']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1896
						$descriptionRecord['data_length']         = getid3_lib::LittleEndian2Int(substr($asf_header_extension_object_data, $offset,  4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
						$descriptionRecord['name']                =                              substr($asf_header_extension_object_data, $offset,  $descriptionRecord['name_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
						$offset += $descriptionRecord['name_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
						$descriptionRecord['data']                =                              substr($asf_header_extension_object_data, $offset,  $descriptionRecord['data_length']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
						$offset += $descriptionRecord['data_length'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
						if (preg_match('#^WM/Picture$#', str_replace("\x00", '', trim($descriptionRecord['name'])))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
							$WMpicture = $this->ASF_WMpicture($descriptionRecord['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
							foreach ($WMpicture as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
								$descriptionRecord['data'] = $WMpicture;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
							unset($WMpicture);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
						$thisObject['description_record'][$i] = $descriptionRecord;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
					$unhandled_sections++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
					if ($this->GUIDname($thisObject['guid_text'])) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1920
						$this->warning('unhandled Header Extension Object GUID "'.$this->GUIDname($thisObject['guid_text']).'" {'.$thisObject['guid_text'].'} at offset '.($offset - 16 - 8));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
					} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1922
						$this->warning('unknown Header Extension Object GUID {'.$thisObject['guid_text'].'} in at offset '.($offset - 16 - 8));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
			$HeaderExtensionObjectParsed[] = $thisObject;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
			$objectOffset += $thisObject['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
		return $HeaderExtensionObjectParsed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1934
	public static function metadataLibraryObjectDataTypeLookup($id) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1935
		static $lookup = array(
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1936
			0x0000 => 'Unicode string', // The data consists of a sequence of Unicode characters
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
			0x0001 => 'BYTE array',     // The type of the data is implementation-specific
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
			0x0002 => 'BOOL',           // The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer. Only 0x0000 or 0x0001 are permitted values
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
			0x0003 => 'DWORD',          // The data is 4 bytes long and should be interpreted as a 32-bit unsigned integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
			0x0004 => 'QWORD',          // The data is 8 bytes long and should be interpreted as a 64-bit unsigned integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
			0x0005 => 'WORD',           // The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
			0x0006 => 'GUID',           // The data is 16 bytes long and should be interpreted as a 128-bit GUID
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
		);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1944
		return (isset($lookup[$id]) ? $lookup[$id] : 'invalid');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1945
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
	public function ASF_WMpicture(&$data) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
		//typedef struct _WMPicture{
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
		//  LPWSTR  pwszMIMEType;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
		//  BYTE  bPictureType;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
		//  LPWSTR  pwszDescription;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
		//  DWORD  dwDataLen;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
		//  BYTE*  pbData;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
		//} WM_PICTURE;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
		$WMpicture = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
		$offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
		$WMpicture['image_type_id'] = getid3_lib::LittleEndian2Int(substr($data, $offset, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
		$offset += 1;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1961
		$WMpicture['image_type']    = self::WMpictureTypeLookup($WMpicture['image_type_id']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
		$WMpicture['image_size']    = getid3_lib::LittleEndian2Int(substr($data, $offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
		$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
		$WMpicture['image_mime'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
		do {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
			$next_byte_pair = substr($data, $offset, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
			$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
			$WMpicture['image_mime'] .= $next_byte_pair;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
		} while ($next_byte_pair !== "\x00\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1972
		$WMpicture['image_description'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
		do {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
			$next_byte_pair = substr($data, $offset, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
			$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
			$WMpicture['image_description'] .= $next_byte_pair;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
		} while ($next_byte_pair !== "\x00\x00");
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
		$WMpicture['dataoffset'] = $offset;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
		$WMpicture['data'] = substr($data, $offset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
		$imageinfo = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
		$WMpicture['image_mime'] = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
		$imagechunkcheck = getid3_lib::GetDataImageSize($WMpicture['data'], $imageinfo);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
		unset($imageinfo);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
		if (!empty($imagechunkcheck)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
			$WMpicture['image_mime'] = image_type_to_mime_type($imagechunkcheck[2]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1988
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1989
		if (!isset($this->getid3->info['asf']['comments']['picture'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1990
			$this->getid3->info['asf']['comments']['picture'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1991
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1992
		$this->getid3->info['asf']['comments']['picture'][] = array('data'=>$WMpicture['data'], 'image_mime'=>$WMpicture['image_mime']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1993
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1994
		return $WMpicture;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1995
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1996
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1997
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1998
	// Remove terminator 00 00 and convert UTF-16LE to Latin-1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1999
	public static function TrimConvert($string) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2000
		return trim(getid3_lib::iconv_fallback('UTF-16LE', 'ISO-8859-1', self::TrimTerm($string)), ' ');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2001
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2002
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
	// Remove terminator 00 00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2005
	public static function TrimTerm($string) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2006
		// remove terminator, only if present (it should be, but...)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2007
		if (substr($string, -2) === "\x00\x00") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2008
			$string = substr($string, 0, -2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2009
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2010
		return $string;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2011
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2012
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2013
}