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