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