wp/wp-includes/ID3/module.audio-video.riff.php
author ymh <ymh.work@gmail.com>
Fri, 05 Sep 2025 18:52:52 +0200
changeset 22 8c2e4d02f4ef
parent 21 48c4eec2b7e6
permissions -rw-r--r--
Update WordPress to latest version (6.7) - Sync WordPress core files from latest release - Updated admin interface, blocks, and core functionality - Enhanced block editor features and performance - Security updates and bug fixes - Preserved custom wp-content directory and configuration 🤖 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
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     2
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
/// getID3() by James Heinrich <info@getid3.org>               //
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     5
//  available at https://github.com/JamesHeinrich/getID3       //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     6
//            or https://www.getid3.org                        //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     7
//            or http://getid3.sourceforge.net                 //
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
     8
//  see readme.txt for more details                            //
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
//                                                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
// module.audio-video.riff.php                                 //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
// module for analyzing RIFF files                             //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
// multiple formats supported by this module:                  //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
//    Wave, AVI, AIFF/AIFC, (MP3,AC3)/RIFF, Wavpack v3, 8SVX   //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
// dependencies: module.audio.mp3.php                          //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
//               module.audio.ac3.php                          //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
//               module.audio.dts.php                          //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
//                                                            ///
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
/////////////////////////////////////////////////////////////////
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
* @todo Parse AC-3/DTS audio inside WAVE correctly
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
* @todo Rewrite RIFF parser totally
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    26
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
    27
	exit;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    28
}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.mp3.php', __FILE__, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.ac3.php', __FILE__, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio.dts.php', __FILE__, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    33
class getid3_riff extends getid3_handler
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    34
{
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    35
	protected $container = 'riff'; // default
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    37
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    38
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    39
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    40
	 * @throws getid3_exception
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    41
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
	public function Analyze() {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
		// initialize these values to an empty array, otherwise they default to NULL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
		// and you can't append array values to a NULL value
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
		$info['riff'] = array('raw'=>array());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		// Shortcuts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
		$thisfile_riff             = &$info['riff'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		$thisfile_riff_raw         = &$thisfile_riff['raw'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
		$thisfile_audio            = &$info['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		$thisfile_video            = &$info['video'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
		$thisfile_audio_dataformat = &$thisfile_audio['dataformat'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
		$thisfile_riff_audio       = &$thisfile_riff['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
		$thisfile_riff_video       = &$thisfile_riff['video'];
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    57
		$thisfile_riff_WAVE        = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    59
		$Original                 = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
		$Original['avdataoffset'] = $info['avdataoffset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
		$Original['avdataend']    = $info['avdataend'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
		$this->fseek($info['avdataoffset']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
		$RIFFheader = $this->fread(12);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
		$offset = $this->ftell();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
		$RIFFtype    = substr($RIFFheader, 0, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
		$RIFFsize    = substr($RIFFheader, 4, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
		$RIFFsubtype = substr($RIFFheader, 8, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
		switch ($RIFFtype) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
			case 'FORM':  // AIFF, AIFC
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    73
				//$info['fileformat']   = 'aiff';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    74
				$this->container = 'aiff';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
				$thisfile_riff['header_size'] = $this->EitherEndian2Int($RIFFsize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
				$thisfile_riff[$RIFFsubtype]  = $this->ParseRIFF($offset, ($offset + $thisfile_riff['header_size'] - 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
			case 'RIFF':  // AVI, WAV, etc
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
			case 'SDSS':  // SDSS is identical to RIFF, just renamed. Used by SmartSound QuickTracks (www.smartsound.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
			case 'RMP3':  // RMP3 is identical to RIFF, just renamed. Used by [unknown program] when creating RIFF-MP3s
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    82
				//$info['fileformat']   = 'riff';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    83
				$this->container = 'riff';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
				$thisfile_riff['header_size'] = $this->EitherEndian2Int($RIFFsize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
				if ($RIFFsubtype == 'RMP3') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
					// RMP3 is identical to WAVE, just renamed. Used by [unknown program] when creating RIFF-MP3s
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
					$RIFFsubtype = 'WAVE';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
				}
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    89
				if ($RIFFsubtype != 'AMV ') {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    90
					// AMV files are RIFF-AVI files with parts of the spec deliberately broken, such as chunk size fields hardcoded to zero (because players known in hardware that these fields are always a certain size
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    91
					// Handled separately in ParseRIFFAMV()
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    92
					$thisfile_riff[$RIFFsubtype]  = $this->ParseRIFF($offset, ($offset + $thisfile_riff['header_size'] - 4));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    93
				}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
				if (($info['avdataend'] - $info['filesize']) == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
					// LiteWave appears to incorrectly *not* pad actual output file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
					// to nearest WORD boundary so may appear to be short by one
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
					// byte, in which case - skip warning
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
					$info['avdataend'] = $info['filesize'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
				$nextRIFFoffset = $Original['avdataoffset'] + 8 + $thisfile_riff['header_size']; // 8 = "RIFF" + 32-bit offset
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
				while ($nextRIFFoffset < min($info['filesize'], $info['avdataend'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
					try {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
						$this->fseek($nextRIFFoffset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
					} catch (getid3_exception $e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
						if ($e->getCode() == 10) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
							//$this->warning('RIFF parser: '.$e->getMessage());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
							$this->error('AVI extends beyond '.round(PHP_INT_MAX / 1073741824).'GB and PHP filesystem functions cannot read that far, playtime may be wrong');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
							$this->warning('[avdataend] value may be incorrect, multiple AVIX chunks may be present');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
							throw $e;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
					$nextRIFFheader = $this->fread(12);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
					if ($nextRIFFoffset == ($info['avdataend'] - 1)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
						if (substr($nextRIFFheader, 0, 1) == "\x00") {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
							// RIFF padded to WORD boundary, we're actually already at the end
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
					$nextRIFFheaderID =                         substr($nextRIFFheader, 0, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
					$nextRIFFsize     = $this->EitherEndian2Int(substr($nextRIFFheader, 4, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
					$nextRIFFtype     =                         substr($nextRIFFheader, 8, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
					$chunkdata = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
					$chunkdata['offset'] = $nextRIFFoffset + 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
					$chunkdata['size']   = $nextRIFFsize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
					$nextRIFFoffset = $chunkdata['offset'] + $chunkdata['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
					switch ($nextRIFFheaderID) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
						case 'RIFF':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
							$chunkdata['chunks'] = $this->ParseRIFF($chunkdata['offset'] + 4, $nextRIFFoffset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
							if (!isset($thisfile_riff[$nextRIFFtype])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
								$thisfile_riff[$nextRIFFtype] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
							$thisfile_riff[$nextRIFFtype][] = $chunkdata;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   139
						case 'AMV ':
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   140
							unset($info['riff']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   141
							$info['amv'] = $this->ParseRIFFAMV($chunkdata['offset'] + 4, $nextRIFFoffset);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   142
							break;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   143
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
						case 'JUNK':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
							// ignore
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
							$thisfile_riff[$nextRIFFheaderID][] = $chunkdata;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
						case 'IDVX':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
							$info['divxtag']['comments'] = self::ParseDIVXTAG($this->fread($chunkdata['size']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
						default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
							if ($info['filesize'] == ($chunkdata['offset'] - 8 + 128)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
								$DIVXTAG = $nextRIFFheader.$this->fread(128 - 12);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
								if (substr($DIVXTAG, -7) == 'DIVXTAG') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
									// DIVXTAG is supposed to be inside an IDVX chunk in a LIST chunk, but some bad encoders just slap it on the end of a file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
									$this->warning('Found wrongly-structured DIVXTAG at offset '.($this->ftell() - 128).', parsing anyway');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
									$info['divxtag']['comments'] = self::ParseDIVXTAG($DIVXTAG);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
									break 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
							$this->warning('Expecting "RIFF|JUNK|IDVX" at '.$nextRIFFoffset.', found "'.$nextRIFFheaderID.'" ('.getid3_lib::PrintHexBytes($nextRIFFheaderID).') - skipping rest of file');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
							break 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
				if ($RIFFsubtype == 'WAVE') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
					$thisfile_riff_WAVE = &$thisfile_riff['WAVE'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
			default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
				$this->error('Cannot parse RIFF (this is maybe not a RIFF / WAV / AVI file?) - expecting "FORM|RIFF|SDSS|RMP3" found "'.$RIFFsubtype.'" instead');
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   176
				//unset($info['fileformat']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
				return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		$streamindex = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
		switch ($RIFFsubtype) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   182
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   183
			// http://en.wikipedia.org/wiki/Wav
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
			case 'WAVE':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   185
				$info['fileformat'] = 'wav';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   186
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
				if (empty($thisfile_audio['bitrate_mode'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
					$thisfile_audio['bitrate_mode'] = 'cbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
				if (empty($thisfile_audio_dataformat)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
					$thisfile_audio_dataformat = 'wav';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
				if (isset($thisfile_riff_WAVE['data'][0]['offset'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
					$info['avdataoffset'] = $thisfile_riff_WAVE['data'][0]['offset'] + 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
					$info['avdataend']    = $info['avdataoffset'] + $thisfile_riff_WAVE['data'][0]['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
				if (isset($thisfile_riff_WAVE['fmt '][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
					$thisfile_riff_audio[$streamindex] = self::parseWAVEFORMATex($thisfile_riff_WAVE['fmt '][0]['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
					$thisfile_audio['wformattag'] = $thisfile_riff_audio[$streamindex]['raw']['wFormatTag'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
					if (!isset($thisfile_riff_audio[$streamindex]['bitrate']) || ($thisfile_riff_audio[$streamindex]['bitrate'] == 0)) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   203
						$this->error('Corrupt RIFF file: bitrate_audio == zero');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
					$thisfile_riff_raw['fmt '] = $thisfile_riff_audio[$streamindex]['raw'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
					unset($thisfile_riff_audio[$streamindex]['raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
					$thisfile_audio['streams'][$streamindex] = $thisfile_riff_audio[$streamindex];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   210
					$thisfile_audio = (array) getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
					if (substr($thisfile_audio['codec'], 0, strlen('unknown: 0x')) == 'unknown: 0x') {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   212
						$this->warning('Audio codec = '.$thisfile_audio['codec']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
					$thisfile_audio['bitrate'] = $thisfile_riff_audio[$streamindex]['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
					if (empty($info['playtime_seconds'])) { // may already be set (e.g. DTS-WAV)
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   217
						$info['playtime_seconds'] =  (float)getid3_lib::SafeDiv(($info['avdataend'] - $info['avdataoffset']) * 8, $thisfile_audio['bitrate']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
					$thisfile_audio['lossless'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
					if (isset($thisfile_riff_WAVE['data'][0]['offset']) && isset($thisfile_riff_raw['fmt ']['wFormatTag'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
						switch ($thisfile_riff_raw['fmt ']['wFormatTag']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
							case 0x0001:  // PCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
								$thisfile_audio['lossless'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
							case 0x2000:  // AC-3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
								$thisfile_audio_dataformat = 'ac3';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
							default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
								// do nothing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
					$thisfile_audio['streams'][$streamindex]['wformattag']   = $thisfile_audio['wformattag'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
					$thisfile_audio['streams'][$streamindex]['bitrate_mode'] = $thisfile_audio['bitrate_mode'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
					$thisfile_audio['streams'][$streamindex]['lossless']     = $thisfile_audio['lossless'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
					$thisfile_audio['streams'][$streamindex]['dataformat']   = $thisfile_audio_dataformat;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
				if (isset($thisfile_riff_WAVE['rgad'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
					// shortcuts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
					$rgadData = &$thisfile_riff_WAVE['rgad'][0]['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
					$thisfile_riff_raw['rgad']    = array('track'=>array(), 'album'=>array());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
					$thisfile_riff_raw_rgad       = &$thisfile_riff_raw['rgad'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
					$thisfile_riff_raw_rgad_track = &$thisfile_riff_raw_rgad['track'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
					$thisfile_riff_raw_rgad_album = &$thisfile_riff_raw_rgad['album'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
					$thisfile_riff_raw_rgad['fPeakAmplitude']      = getid3_lib::LittleEndian2Float(substr($rgadData, 0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
					$thisfile_riff_raw_rgad['nRadioRgAdjust']      =        $this->EitherEndian2Int(substr($rgadData, 4, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
					$thisfile_riff_raw_rgad['nAudiophileRgAdjust'] =        $this->EitherEndian2Int(substr($rgadData, 6, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
					$nRadioRgAdjustBitstring      = str_pad(getid3_lib::Dec2Bin($thisfile_riff_raw_rgad['nRadioRgAdjust']), 16, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
					$nAudiophileRgAdjustBitstring = str_pad(getid3_lib::Dec2Bin($thisfile_riff_raw_rgad['nAudiophileRgAdjust']), 16, '0', STR_PAD_LEFT);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
					$thisfile_riff_raw_rgad_track['name']       = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 0, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
					$thisfile_riff_raw_rgad_track['originator'] = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 3, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
					$thisfile_riff_raw_rgad_track['signbit']    = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 6, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
					$thisfile_riff_raw_rgad_track['adjustment'] = getid3_lib::Bin2Dec(substr($nRadioRgAdjustBitstring, 7, 9));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
					$thisfile_riff_raw_rgad_album['name']       = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 0, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
					$thisfile_riff_raw_rgad_album['originator'] = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 3, 3));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
					$thisfile_riff_raw_rgad_album['signbit']    = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 6, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
					$thisfile_riff_raw_rgad_album['adjustment'] = getid3_lib::Bin2Dec(substr($nAudiophileRgAdjustBitstring, 7, 9));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
					$thisfile_riff['rgad']['peakamplitude'] = $thisfile_riff_raw_rgad['fPeakAmplitude'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
					if (($thisfile_riff_raw_rgad_track['name'] != 0) && ($thisfile_riff_raw_rgad_track['originator'] != 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
						$thisfile_riff['rgad']['track']['name']            = getid3_lib::RGADnameLookup($thisfile_riff_raw_rgad_track['name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
						$thisfile_riff['rgad']['track']['originator']      = getid3_lib::RGADoriginatorLookup($thisfile_riff_raw_rgad_track['originator']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
						$thisfile_riff['rgad']['track']['adjustment']      = getid3_lib::RGADadjustmentLookup($thisfile_riff_raw_rgad_track['adjustment'], $thisfile_riff_raw_rgad_track['signbit']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
					if (($thisfile_riff_raw_rgad_album['name'] != 0) && ($thisfile_riff_raw_rgad_album['originator'] != 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
						$thisfile_riff['rgad']['album']['name']       = getid3_lib::RGADnameLookup($thisfile_riff_raw_rgad_album['name']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
						$thisfile_riff['rgad']['album']['originator'] = getid3_lib::RGADoriginatorLookup($thisfile_riff_raw_rgad_album['originator']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
						$thisfile_riff['rgad']['album']['adjustment'] = getid3_lib::RGADadjustmentLookup($thisfile_riff_raw_rgad_album['adjustment'], $thisfile_riff_raw_rgad_album['signbit']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
				if (isset($thisfile_riff_WAVE['fact'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
					$thisfile_riff_raw['fact']['NumberOfSamples'] = $this->EitherEndian2Int(substr($thisfile_riff_WAVE['fact'][0]['data'], 0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
					// This should be a good way of calculating exact playtime,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
					// but some sample files have had incorrect number of samples,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
					// so cannot use this method
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
					// if (!empty($thisfile_riff_raw['fmt ']['nSamplesPerSec'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
					//     $info['playtime_seconds'] = (float) $thisfile_riff_raw['fact']['NumberOfSamples'] / $thisfile_riff_raw['fmt ']['nSamplesPerSec'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
					// }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
				if (!empty($thisfile_riff_raw['fmt ']['nAvgBytesPerSec'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
					$thisfile_audio['bitrate'] = getid3_lib::CastAsInt($thisfile_riff_raw['fmt ']['nAvgBytesPerSec'] * 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
				if (isset($thisfile_riff_WAVE['bext'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
					$thisfile_riff_WAVE_bext_0 = &$thisfile_riff_WAVE['bext'][0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   300
					$thisfile_riff_WAVE_bext_0['title']          =                              substr($thisfile_riff_WAVE_bext_0['data'],   0, 256);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   301
					$thisfile_riff_WAVE_bext_0['author']         =                              substr($thisfile_riff_WAVE_bext_0['data'], 256,  32);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   302
					$thisfile_riff_WAVE_bext_0['reference']      =                              substr($thisfile_riff_WAVE_bext_0['data'], 288,  32);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   303
					foreach (array('title','author','reference') as $bext_key) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   304
						// Some software (notably Logic Pro) may not blank existing data before writing a null-terminated string to the offsets
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   305
						// assigned for text fields, resulting in a null-terminated string (or possibly just a single null) followed by garbage
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   306
						// Keep only string as far as first null byte, discard rest of fixed-width data
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   307
						// https://github.com/JamesHeinrich/getID3/issues/263
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   308
						$null_terminator_offset = strpos($thisfile_riff_WAVE_bext_0[$bext_key], "\x00");
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   309
						$thisfile_riff_WAVE_bext_0[$bext_key] = substr($thisfile_riff_WAVE_bext_0[$bext_key], 0, $null_terminator_offset);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   310
					}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   311
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
					$thisfile_riff_WAVE_bext_0['origin_date']    =                              substr($thisfile_riff_WAVE_bext_0['data'], 320,  10);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
					$thisfile_riff_WAVE_bext_0['origin_time']    =                              substr($thisfile_riff_WAVE_bext_0['data'], 330,   8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
					$thisfile_riff_WAVE_bext_0['time_reference'] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_bext_0['data'], 338,   8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
					$thisfile_riff_WAVE_bext_0['bwf_version']    = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_bext_0['data'], 346,   1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
					$thisfile_riff_WAVE_bext_0['reserved']       =                              substr($thisfile_riff_WAVE_bext_0['data'], 347, 254);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
					$thisfile_riff_WAVE_bext_0['coding_history'] =         explode("\r\n", trim(substr($thisfile_riff_WAVE_bext_0['data'], 601)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
					if (preg_match('#^([0-9]{4}).([0-9]{2}).([0-9]{2})$#', $thisfile_riff_WAVE_bext_0['origin_date'], $matches_bext_date)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
						if (preg_match('#^([0-9]{2}).([0-9]{2}).([0-9]{2})$#', $thisfile_riff_WAVE_bext_0['origin_time'], $matches_bext_time)) {
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   320
							$bext_timestamp = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
							list($dummy, $bext_timestamp['year'], $bext_timestamp['month'],  $bext_timestamp['day'])    = $matches_bext_date;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
							list($dummy, $bext_timestamp['hour'], $bext_timestamp['minute'], $bext_timestamp['second']) = $matches_bext_time;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
							$thisfile_riff_WAVE_bext_0['origin_date_unix'] = gmmktime($bext_timestamp['hour'], $bext_timestamp['minute'], $bext_timestamp['second'], $bext_timestamp['month'], $bext_timestamp['day'], $bext_timestamp['year']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
						} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   325
							$this->warning('RIFF.WAVE.BEXT.origin_time is invalid');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
					} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   328
						$this->warning('RIFF.WAVE.BEXT.origin_date is invalid');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
					$thisfile_riff['comments']['author'][] = $thisfile_riff_WAVE_bext_0['author'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
					$thisfile_riff['comments']['title'][]  = $thisfile_riff_WAVE_bext_0['title'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
				if (isset($thisfile_riff_WAVE['MEXT'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
					$thisfile_riff_WAVE_MEXT_0 = &$thisfile_riff_WAVE['MEXT'][0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
					$thisfile_riff_WAVE_MEXT_0['raw']['sound_information']      = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 0, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
					$thisfile_riff_WAVE_MEXT_0['flags']['homogenous']           = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0001);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
					if ($thisfile_riff_WAVE_MEXT_0['flags']['homogenous']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
						$thisfile_riff_WAVE_MEXT_0['flags']['padding']          = ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0002) ? false : true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
						$thisfile_riff_WAVE_MEXT_0['flags']['22_or_44']         =        (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0004);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
						$thisfile_riff_WAVE_MEXT_0['flags']['free_format']      =        (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['sound_information'] & 0x0008);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
						$thisfile_riff_WAVE_MEXT_0['nominal_frame_size']        = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 2, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
					$thisfile_riff_WAVE_MEXT_0['anciliary_data_length']         = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 6, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
					$thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def']     = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_MEXT_0['data'], 8, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
					$thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_left']  = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0001);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
					$thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_free']  = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0002);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
					$thisfile_riff_WAVE_MEXT_0['flags']['anciliary_data_right'] = (bool) ($thisfile_riff_WAVE_MEXT_0['raw']['anciliary_data_def'] & 0x0004);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
				if (isset($thisfile_riff_WAVE['cart'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
					$thisfile_riff_WAVE_cart_0 = &$thisfile_riff_WAVE['cart'][0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
					$thisfile_riff_WAVE_cart_0['version']              =                              substr($thisfile_riff_WAVE_cart_0['data'],   0,  4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
					$thisfile_riff_WAVE_cart_0['title']                =                         trim(substr($thisfile_riff_WAVE_cart_0['data'],   4, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
					$thisfile_riff_WAVE_cart_0['artist']               =                         trim(substr($thisfile_riff_WAVE_cart_0['data'],  68, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
					$thisfile_riff_WAVE_cart_0['cut_id']               =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 132, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
					$thisfile_riff_WAVE_cart_0['client_id']            =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 196, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
					$thisfile_riff_WAVE_cart_0['category']             =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 260, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
					$thisfile_riff_WAVE_cart_0['classification']       =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 324, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
					$thisfile_riff_WAVE_cart_0['out_cue']              =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 388, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
					$thisfile_riff_WAVE_cart_0['start_date']           =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 452, 10));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
					$thisfile_riff_WAVE_cart_0['start_time']           =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 462,  8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
					$thisfile_riff_WAVE_cart_0['end_date']             =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 470, 10));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
					$thisfile_riff_WAVE_cart_0['end_time']             =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 480,  8));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
					$thisfile_riff_WAVE_cart_0['producer_app_id']      =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 488, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
					$thisfile_riff_WAVE_cart_0['producer_app_version'] =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 552, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
					$thisfile_riff_WAVE_cart_0['user_defined_text']    =                         trim(substr($thisfile_riff_WAVE_cart_0['data'], 616, 64));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
					$thisfile_riff_WAVE_cart_0['zero_db_reference']    = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_cart_0['data'], 680,  4), true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
					for ($i = 0; $i < 8; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
						$thisfile_riff_WAVE_cart_0['post_time'][$i]['usage_fourcc'] =                  substr($thisfile_riff_WAVE_cart_0['data'], 684 + ($i * 8), 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
						$thisfile_riff_WAVE_cart_0['post_time'][$i]['timer_value']  = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE_cart_0['data'], 684 + ($i * 8) + 4, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
					$thisfile_riff_WAVE_cart_0['url']              =                 trim(substr($thisfile_riff_WAVE_cart_0['data'],  748, 1024));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
					$thisfile_riff_WAVE_cart_0['tag_text']         = explode("\r\n", trim(substr($thisfile_riff_WAVE_cart_0['data'], 1772)));
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   380
					$thisfile_riff['comments']['tag_text'][]       =                      substr($thisfile_riff_WAVE_cart_0['data'], 1772);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
					$thisfile_riff['comments']['artist'][] = $thisfile_riff_WAVE_cart_0['artist'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
					$thisfile_riff['comments']['title'][]  = $thisfile_riff_WAVE_cart_0['title'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
				if (isset($thisfile_riff_WAVE['SNDM'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
					// SoundMiner metadata
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
					// shortcuts
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
					$thisfile_riff_WAVE_SNDM_0      = &$thisfile_riff_WAVE['SNDM'][0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
					$thisfile_riff_WAVE_SNDM_0_data = &$thisfile_riff_WAVE_SNDM_0['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
					$SNDM_startoffset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
					$SNDM_endoffset   = $thisfile_riff_WAVE_SNDM_0['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
					while ($SNDM_startoffset < $SNDM_endoffset) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
						$SNDM_thisTagOffset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
						$SNDM_thisTagSize      = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
						$SNDM_thisTagOffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
						$SNDM_thisTagKey       =                           substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
						$SNDM_thisTagOffset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
						$SNDM_thisTagDataSize  = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
						$SNDM_thisTagOffset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
						$SNDM_thisTagDataFlags = getid3_lib::BigEndian2Int(substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
						$SNDM_thisTagOffset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
						$SNDM_thisTagDataText =                            substr($thisfile_riff_WAVE_SNDM_0_data, $SNDM_startoffset + $SNDM_thisTagOffset, $SNDM_thisTagDataSize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
						$SNDM_thisTagOffset += $SNDM_thisTagDataSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
						if ($SNDM_thisTagSize != (4 + 4 + 2 + 2 + $SNDM_thisTagDataSize)) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   409
							$this->warning('RIFF.WAVE.SNDM.data contains tag not expected length (expected: '.$SNDM_thisTagSize.', found: '.(4 + 4 + 2 + 2 + $SNDM_thisTagDataSize).') at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')');
0
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
						} elseif ($SNDM_thisTagSize <= 0) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   412
							$this->warning('RIFF.WAVE.SNDM.data contains zero-size tag at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
						$SNDM_startoffset += $SNDM_thisTagSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
						$thisfile_riff_WAVE_SNDM_0['parsed_raw'][$SNDM_thisTagKey] = $SNDM_thisTagDataText;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
						if ($parsedkey = self::waveSNDMtagLookup($SNDM_thisTagKey)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
							$thisfile_riff_WAVE_SNDM_0['parsed'][$parsedkey] = $SNDM_thisTagDataText;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
						} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   421
							$this->warning('RIFF.WAVE.SNDM contains unknown tag "'.$SNDM_thisTagKey.'" at offset '.$SNDM_startoffset.' (file offset '.($thisfile_riff_WAVE_SNDM_0['offset'] + $SNDM_startoffset).')');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
					$tagmapping = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
						'tracktitle'=>'title',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
						'category'  =>'genre',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
						'cdtitle'   =>'album',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
					);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
					foreach ($tagmapping as $fromkey => $tokey) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
						if (isset($thisfile_riff_WAVE_SNDM_0['parsed'][$fromkey])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
							$thisfile_riff['comments'][$tokey][] = $thisfile_riff_WAVE_SNDM_0['parsed'][$fromkey];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
				if (isset($thisfile_riff_WAVE['iXML'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
					// requires functions simplexml_load_string and get_object_vars
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
					if ($parsedXML = getid3_lib::XML2array($thisfile_riff_WAVE['iXML'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
						$thisfile_riff_WAVE['iXML'][0]['parsed'] = $parsedXML;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
						if (isset($parsedXML['SPEED']['MASTER_SPEED'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
							@list($numerator, $denominator) = explode('/', $parsedXML['SPEED']['MASTER_SPEED']);
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   443
							$thisfile_riff_WAVE['iXML'][0]['master_speed'] = (int) $numerator / ($denominator ? $denominator : 1000);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
						if (isset($parsedXML['SPEED']['TIMECODE_RATE'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
							@list($numerator, $denominator) = explode('/', $parsedXML['SPEED']['TIMECODE_RATE']);
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   447
							$thisfile_riff_WAVE['iXML'][0]['timecode_rate'] = (int) $numerator / ($denominator ? $denominator : 1000);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
						if (isset($parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_LO']) && !empty($parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']) && !empty($thisfile_riff_WAVE['iXML'][0]['timecode_rate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
							$samples_since_midnight = floatval(ltrim($parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_HI'].$parsedXML['SPEED']['TIMESTAMP_SAMPLES_SINCE_MIDNIGHT_LO'], '0'));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   451
							$timestamp_sample_rate = (is_array($parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']) ? max($parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']) : $parsedXML['SPEED']['TIMESTAMP_SAMPLE_RATE']); // XML could possibly contain more than one TIMESTAMP_SAMPLE_RATE tag, returning as array instead of integer [why? does it make sense? perhaps doesn't matter but getID3 needs to deal with it] - see https://github.com/JamesHeinrich/getID3/issues/105
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   452
							$thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] = $samples_since_midnight / $timestamp_sample_rate;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
							$h = floor( $thisfile_riff_WAVE['iXML'][0]['timecode_seconds']       / 3600);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
							$m = floor(($thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600))      / 60);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
							$s = floor( $thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600) - ($m * 60));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
							$f =       ($thisfile_riff_WAVE['iXML'][0]['timecode_seconds'] - ($h * 3600) - ($m * 60) - $s) * $thisfile_riff_WAVE['iXML'][0]['timecode_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
							$thisfile_riff_WAVE['iXML'][0]['timecode_string']       = sprintf('%02d:%02d:%02d:%05.2f', $h, $m, $s,       $f);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
							$thisfile_riff_WAVE['iXML'][0]['timecode_string_round'] = sprintf('%02d:%02d:%02d:%02d',   $h, $m, $s, round($f));
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   459
							unset($samples_since_midnight, $timestamp_sample_rate, $h, $m, $s, $f);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
						unset($parsedXML);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   465
				if (isset($thisfile_riff_WAVE['guan'][0]['data'])) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   466
					// shortcut
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   467
					$thisfile_riff_WAVE_guan_0 = &$thisfile_riff_WAVE['guan'][0];
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   468
					if (!empty($thisfile_riff_WAVE_guan_0['data']) && (substr($thisfile_riff_WAVE_guan_0['data'], 0, 14) == 'GUANO|Version:')) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   469
						$thisfile_riff['guano'] = array();
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   470
						foreach (explode("\n", $thisfile_riff_WAVE_guan_0['data']) as $line) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   471
							if ($line) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   472
								@list($key, $value) = explode(':', $line, 2);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   473
								if (substr($value, 0, 3) == '[{"') {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   474
									if ($decoded = @json_decode($value, true)) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   475
										if (!empty($decoded) && (count($decoded) == 1)) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   476
											$value = $decoded[0];
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   477
										} else {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   478
											$value = $decoded;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   479
										}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   480
									}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   481
								}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   482
								$thisfile_riff['guano'] = array_merge_recursive($thisfile_riff['guano'], getid3_lib::CreateDeepArray($key, '|', $value));
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   483
							}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   484
						}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   486
						// https://www.wildlifeacoustics.com/SCHEMA/GUANO.html
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   487
						foreach ($thisfile_riff['guano'] as $key => $value) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   488
							switch ($key) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   489
								case 'Loc Position':
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   490
									if (preg_match('#^([\\+\\-]?[0-9]+\\.[0-9]+) ([\\+\\-]?[0-9]+\\.[0-9]+)$#', $value, $matches)) {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   491
										list($dummy, $latitude, $longitude) = $matches;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   492
										$thisfile_riff['comments']['gps_latitude'][0]  = floatval($latitude);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   493
										$thisfile_riff['comments']['gps_longitude'][0] = floatval($longitude);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   494
										$thisfile_riff['guano'][$key] = floatval($latitude).' '.floatval($longitude);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   495
									}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   496
									break;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   497
								case 'Loc Elevation': // Elevation/altitude above mean sea level in meters
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   498
									$thisfile_riff['comments']['gps_altitude'][0] = floatval($value);
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   499
									$thisfile_riff['guano'][$key] = (float) $value;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   500
									break;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   501
								case 'Filter HP':        // High-pass filter frequency in kHz
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   502
								case 'Filter LP':        // Low-pass filter frequency in kHz
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   503
								case 'Humidity':         // Relative humidity as a percentage
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   504
								case 'Length':           // Recording length in seconds
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   505
								case 'Loc Accuracy':     // Estimated Position Error in meters
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   506
								case 'Temperature Ext':  // External temperature in degrees Celsius outside the recorder's housing
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   507
								case 'Temperature Int':  // Internal temperature in degrees Celsius inside the recorder's housing
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   508
									$thisfile_riff['guano'][$key] = (float) $value;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   509
									break;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   510
								case 'Samplerate':       // Recording sample rate, Hz
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   511
								case 'TE':               // Time-expansion factor. If not specified, then 1 (no time-expansion a.k.a. direct-recording) is assumed.
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   512
									$thisfile_riff['guano'][$key] = (int) $value;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   513
									break;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   514
							}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   515
						}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   516
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   517
					} else {
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   518
						$this->warning('RIFF.guan data not in expected format');
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   519
					}
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   520
				}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
				if (!isset($thisfile_audio['bitrate']) && isset($thisfile_riff_audio[$streamindex]['bitrate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
					$thisfile_audio['bitrate'] = $thisfile_riff_audio[$streamindex]['bitrate'];
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   524
					$info['playtime_seconds'] = (float)getid3_lib::SafeDiv((($info['avdataend'] - $info['avdataoffset']) * 8), $thisfile_audio['bitrate']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
				if (!empty($info['wavpack'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
					$thisfile_audio_dataformat = 'wavpack';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
					$thisfile_audio['bitrate_mode'] = 'vbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
					$thisfile_audio['encoder']      = 'WavPack v'.$info['wavpack']['version'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
					// Reset to the way it was - RIFF parsing will have messed this up
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
					$info['avdataend']        = $Original['avdataend'];
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   534
					$thisfile_audio['bitrate'] = getid3_lib::SafeDiv(($info['avdataend'] - $info['avdataoffset']) * 8, $info['playtime_seconds']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
					$this->fseek($info['avdataoffset'] - 44);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
					$RIFFdata = $this->fread(44);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
					$OrignalRIFFheaderSize = getid3_lib::LittleEndian2Int(substr($RIFFdata,  4, 4)) +  8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
					$OrignalRIFFdataSize   = getid3_lib::LittleEndian2Int(substr($RIFFdata, 40, 4)) + 44;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
					if ($OrignalRIFFheaderSize > $OrignalRIFFdataSize) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
						$info['avdataend'] -= ($OrignalRIFFheaderSize - $OrignalRIFFdataSize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
						$this->fseek($info['avdataend']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
						$RIFFdata .= $this->fread($OrignalRIFFheaderSize - $OrignalRIFFdataSize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
					// move the data chunk after all other chunks (if any)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
					// so that the RIFF parser doesn't see EOF when trying
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
					// to skip over the data chunk
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
					$RIFFdata = substr($RIFFdata, 0, 36).substr($RIFFdata, 44).substr($RIFFdata, 36, 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
					$getid3_riff = new getid3_riff($this->getid3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
					$getid3_riff->ParseRIFFdata($RIFFdata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
					unset($getid3_riff);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
				if (isset($thisfile_riff_raw['fmt ']['wFormatTag'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
					switch ($thisfile_riff_raw['fmt ']['wFormatTag']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
						case 0x0001: // PCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
							if (!empty($info['ac3'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
								// Dolby Digital WAV files masquerade as PCM-WAV, but they're not
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
								$thisfile_audio['wformattag']  = 0x2000;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
								$thisfile_audio['codec']       = self::wFormatTagLookup($thisfile_audio['wformattag']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
								$thisfile_audio['lossless']    = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
								$thisfile_audio['bitrate']     = $info['ac3']['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
								$thisfile_audio['sample_rate'] = $info['ac3']['sample_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
							if (!empty($info['dts'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
								// Dolby DTS files masquerade as PCM-WAV, but they're not
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
								$thisfile_audio['wformattag']  = 0x2001;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
								$thisfile_audio['codec']       = self::wFormatTagLookup($thisfile_audio['wformattag']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
								$thisfile_audio['lossless']    = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
								$thisfile_audio['bitrate']     = $info['dts']['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
								$thisfile_audio['sample_rate'] = $info['dts']['sample_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
						case 0x08AE: // ClearJump LiteWave
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
							$thisfile_audio['bitrate_mode'] = 'vbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   578
							$thisfile_audio_dataformat   = 'litewave';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   579
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   580
							//typedef struct tagSLwFormat {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   581
							//  WORD    m_wCompFormat;     // low byte defines compression method, high byte is compression flags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   582
							//  DWORD   m_dwScale;         // scale factor for lossy compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   583
							//  DWORD   m_dwBlockSize;     // number of samples in encoded blocks
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   584
							//  WORD    m_wQuality;        // alias for the scale factor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   585
							//  WORD    m_wMarkDistance;   // distance between marks in bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
							//  WORD    m_wReserved;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
							//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
							//  //following paramters are ignored if CF_FILESRC is not set
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
							//  DWORD   m_dwOrgSize;       // original file size in bytes
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
							//  WORD    m_bFactExists;     // indicates if 'fact' chunk exists in the original file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
							//  DWORD   m_dwRiffChunkSize; // riff chunk size in the original file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
							//
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
							//  PCMWAVEFORMAT m_OrgWf;     // original wave format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
							// }SLwFormat, *PSLwFormat;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
							// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
							$thisfile_riff['litewave']['raw'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   598
							$riff_litewave     = &$thisfile_riff['litewave'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   599
							$riff_litewave_raw = &$riff_litewave['raw'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
							$flags = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   602
								'compression_method' => 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
								'compression_flags'  => 1,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
								'm_dwScale'          => 4,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   605
								'm_dwBlockSize'      => 4,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
								'm_wQuality'         => 2,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
								'm_wMarkDistance'    => 2,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
								'm_wReserved'        => 2,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
								'm_dwOrgSize'        => 4,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
								'm_bFactExists'      => 2,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
								'm_dwRiffChunkSize'  => 4,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
							);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
							$litewave_offset = 18;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
							foreach ($flags as $flag => $length) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
								$riff_litewave_raw[$flag] = getid3_lib::LittleEndian2Int(substr($thisfile_riff_WAVE['fmt '][0]['data'], $litewave_offset, $length));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
								$litewave_offset += $length;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
							//$riff_litewave['quality_factor'] = intval(round((2000 - $riff_litewave_raw['m_dwScale']) / 20));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
							$riff_litewave['quality_factor'] = $riff_litewave_raw['m_wQuality'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
							$riff_litewave['flags']['raw_source']    = ($riff_litewave_raw['compression_flags'] & 0x01) ? false : true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
							$riff_litewave['flags']['vbr_blocksize'] = ($riff_litewave_raw['compression_flags'] & 0x02) ? false : true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
							$riff_litewave['flags']['seekpoints']    =        (bool) ($riff_litewave_raw['compression_flags'] & 0x04);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
							$thisfile_audio['lossless']        = (($riff_litewave_raw['m_wQuality'] == 100) ? true : false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   627
							$thisfile_audio['encoder_options'] = '-q'.$riff_litewave['quality_factor'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   629
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   630
						default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   631
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
				if ($info['avdataend'] > $info['filesize']) {
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   635
					switch ($thisfile_audio_dataformat) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
						case 'wavpack': // WavPack
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
						case 'lpac':    // LPAC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
						case 'ofr':     // OptimFROG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
						case 'ofs':     // OptimFROG DualStream
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
							// lossless compressed audio formats that keep original RIFF headers - skip warning
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
						case 'litewave':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
							if (($info['avdataend'] - $info['filesize']) == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
								// LiteWave appears to incorrectly *not* pad actual output file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
								// to nearest WORD boundary so may appear to be short by one
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
								// byte, in which case - skip warning
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
							} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
								// Short by more than one byte, throw warning
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   650
								$this->warning('Probably truncated file - expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   651
								$info['avdataend'] = $info['filesize'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   652
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   653
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
						default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
							if ((($info['avdataend'] - $info['filesize']) == 1) && (($thisfile_riff[$RIFFsubtype]['data'][0]['size'] % 2) == 0) && ((($info['filesize'] - $info['avdataoffset']) % 2) == 1)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
								// output file appears to be incorrectly *not* padded to nearest WORD boundary
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
								// Output less severe warning
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   659
								$this->warning('File should probably be padded to nearest WORD boundary, but it is not (expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' therefore short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
								$info['avdataend'] = $info['filesize'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
							} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
								// Short by more than one byte, throw warning
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   663
								$this->warning('Probably truncated file - expecting '.$thisfile_riff[$RIFFsubtype]['data'][0]['size'].' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($thisfile_riff[$RIFFsubtype]['data'][0]['size'] - ($info['filesize'] - $info['avdataoffset'])).' bytes)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
								$info['avdataend'] = $info['filesize'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
				if (!empty($info['mpeg']['audio']['LAME']['audio_bytes'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
					if ((($info['avdataend'] - $info['avdataoffset']) - $info['mpeg']['audio']['LAME']['audio_bytes']) == 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
						$info['avdataend']--;
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   672
						$this->warning('Extra null byte at end of MP3 data assumed to be RIFF padding and therefore ignored');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
				}
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   675
				if ($thisfile_audio_dataformat == 'ac3') {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
					unset($thisfile_audio['bits_per_sample']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
					if (!empty($info['ac3']['bitrate']) && ($info['ac3']['bitrate'] != $thisfile_audio['bitrate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
						$thisfile_audio['bitrate'] = $info['ac3']['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   683
			// http://en.wikipedia.org/wiki/Audio_Video_Interleave
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
			case 'AVI ':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   685
				$info['fileformat'] = 'avi';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   686
				$info['mime_type']  = 'video/avi';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   687
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
				$thisfile_video['bitrate_mode'] = 'vbr'; // maybe not, but probably
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
				$thisfile_video['dataformat']   = 'avi';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   691
				$thisfile_riff_video_current = array();
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   692
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
				if (isset($thisfile_riff[$RIFFsubtype]['movi']['offset'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
					$info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['movi']['offset'] + 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
					if (isset($thisfile_riff['AVIX'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
						$info['avdataend'] = $thisfile_riff['AVIX'][(count($thisfile_riff['AVIX']) - 1)]['chunks']['movi']['offset'] + $thisfile_riff['AVIX'][(count($thisfile_riff['AVIX']) - 1)]['chunks']['movi']['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
					} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
						$info['avdataend'] = $thisfile_riff['AVI ']['movi']['offset'] + $thisfile_riff['AVI ']['movi']['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
					if ($info['avdataend'] > $info['filesize']) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   701
						$this->warning('Probably truncated file - expecting '.($info['avdataend'] - $info['avdataoffset']).' bytes of data, only found '.($info['filesize'] - $info['avdataoffset']).' (short by '.($info['avdataend'] - $info['filesize']).' bytes)');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
						$info['avdataend'] = $info['filesize'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
				if (isset($thisfile_riff['AVI ']['hdrl']['strl']['indx'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
					//$bIndexType = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
					//	0x00 => 'AVI_INDEX_OF_INDEXES',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
					//	0x01 => 'AVI_INDEX_OF_CHUNKS',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
					//	0x80 => 'AVI_INDEX_IS_DATA',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
					//);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
					//$bIndexSubtype = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
					//	0x01 => array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
					//		0x01 => 'AVI_INDEX_2FIELD',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
					//	),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
					//);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
					foreach ($thisfile_riff['AVI ']['hdrl']['strl']['indx'] as $streamnumber => $steamdataarray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   718
						$ahsisd = &$thisfile_riff['AVI ']['hdrl']['strl']['indx'][$streamnumber]['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   719
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   720
						$thisfile_riff_raw['indx'][$streamnumber]['wLongsPerEntry'] = $this->EitherEndian2Int(substr($ahsisd,  0, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   721
						$thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType']  = $this->EitherEndian2Int(substr($ahsisd,  2, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   722
						$thisfile_riff_raw['indx'][$streamnumber]['bIndexType']     = $this->EitherEndian2Int(substr($ahsisd,  3, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   723
						$thisfile_riff_raw['indx'][$streamnumber]['nEntriesInUse']  = $this->EitherEndian2Int(substr($ahsisd,  4, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   724
						$thisfile_riff_raw['indx'][$streamnumber]['dwChunkId']      =                         substr($ahsisd,  8, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   725
						$thisfile_riff_raw['indx'][$streamnumber]['dwReserved']     = $this->EitherEndian2Int(substr($ahsisd, 12, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   726
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
						//$thisfile_riff_raw['indx'][$streamnumber]['bIndexType_name']    =    $bIndexType[$thisfile_riff_raw['indx'][$streamnumber]['bIndexType']];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
						//$thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType_name'] = $bIndexSubtype[$thisfile_riff_raw['indx'][$streamnumber]['bIndexType']][$thisfile_riff_raw['indx'][$streamnumber]['bIndexSubType']];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
						unset($ahsisd);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
				if (isset($thisfile_riff['AVI ']['hdrl']['avih'][$streamindex]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
					$avihData = $thisfile_riff['AVI ']['hdrl']['avih'][$streamindex]['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
					$thisfile_riff_raw['avih'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
					$thisfile_riff_raw_avih = &$thisfile_riff_raw['avih'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
					$thisfile_riff_raw_avih['dwMicroSecPerFrame']    = $this->EitherEndian2Int(substr($avihData,  0, 4)); // frame display rate (or 0L)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
					if ($thisfile_riff_raw_avih['dwMicroSecPerFrame'] == 0) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   742
						$this->error('Corrupt RIFF file: avih.dwMicroSecPerFrame == zero');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
					$flags = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
						'dwMaxBytesPerSec',       // max. transfer rate
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
						'dwPaddingGranularity',   // pad to multiples of this size; normally 2K.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   749
						'dwFlags',                // the ever-present flags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
						'dwTotalFrames',          // # frames in file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
						'dwInitialFrames',        //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
						'dwStreams',              //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
						'dwSuggestedBufferSize',  //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
						'dwWidth',                //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
						'dwHeight',               //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
						'dwScale',                //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
						'dwRate',                 //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
						'dwStart',                //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
						'dwLength',               //
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
					);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
					$avih_offset = 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
					foreach ($flags as $flag) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
						$thisfile_riff_raw_avih[$flag] = $this->EitherEndian2Int(substr($avihData, $avih_offset, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
						$avih_offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
					$flags = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
						'hasindex'     => 0x00000010,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
						'mustuseindex' => 0x00000020,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
						'interleaved'  => 0x00000100,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
						'trustcktype'  => 0x00000800,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
						'capturedfile' => 0x00010000,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
						'copyrighted'  => 0x00020010,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
					);
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   775
					foreach ($flags as $flag => $value) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
						$thisfile_riff_raw_avih['flags'][$flag] = (bool) ($thisfile_riff_raw_avih['dwFlags'] & $value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
					$thisfile_riff_video[$streamindex] = array();
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   781
					/** @var array $thisfile_riff_video_current */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
					$thisfile_riff_video_current = &$thisfile_riff_video[$streamindex];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   784
					if ($thisfile_riff_raw_avih['dwWidth'] > 0) { // @phpstan-ignore-line
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
						$thisfile_riff_video_current['frame_width'] = $thisfile_riff_raw_avih['dwWidth'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
						$thisfile_video['resolution_x']             = $thisfile_riff_video_current['frame_width'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
					}
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   788
					if ($thisfile_riff_raw_avih['dwHeight'] > 0) { // @phpstan-ignore-line
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
						$thisfile_riff_video_current['frame_height'] = $thisfile_riff_raw_avih['dwHeight'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
						$thisfile_video['resolution_y']              = $thisfile_riff_video_current['frame_height'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
					}
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   792
					if ($thisfile_riff_raw_avih['dwTotalFrames'] > 0) { // @phpstan-ignore-line
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
						$thisfile_riff_video_current['total_frames'] = $thisfile_riff_raw_avih['dwTotalFrames'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
						$thisfile_video['total_frames']              = $thisfile_riff_video_current['total_frames'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
					$thisfile_riff_video_current['frame_rate'] = round(1000000 / $thisfile_riff_raw_avih['dwMicroSecPerFrame'], 3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
					$thisfile_video['frame_rate'] = $thisfile_riff_video_current['frame_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
				if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strh'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
					if (is_array($thisfile_riff['AVI ']['hdrl']['strl']['strh'])) {
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
   802
						$thisfile_riff_raw_strf_strhfccType_streamindex = null;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
						for ($i = 0; $i < count($thisfile_riff['AVI ']['hdrl']['strl']['strh']); $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
							if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strh'][$i]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
								$strhData = $thisfile_riff['AVI ']['hdrl']['strl']['strh'][$i]['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
								$strhfccType = substr($strhData,  0, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
								if (isset($thisfile_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
									$strfData = $thisfile_riff['AVI ']['hdrl']['strl']['strf'][$i]['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   811
									if (!isset($thisfile_riff_raw['strf'][$strhfccType][$streamindex])) {
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   812
										$thisfile_riff_raw['strf'][$strhfccType][$streamindex] = null;
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   813
									}
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
									// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
									$thisfile_riff_raw_strf_strhfccType_streamindex = &$thisfile_riff_raw['strf'][$strhfccType][$streamindex];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
									switch ($strhfccType) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
										case 'auds':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
											$thisfile_audio['bitrate_mode'] = 'cbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
											$thisfile_audio_dataformat      = 'wav';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
											if (isset($thisfile_riff_audio) && is_array($thisfile_riff_audio)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
												$streamindex = count($thisfile_riff_audio);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
											$thisfile_riff_audio[$streamindex] = self::parseWAVEFORMATex($strfData);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
											$thisfile_audio['wformattag'] = $thisfile_riff_audio[$streamindex]['raw']['wFormatTag'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
											// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
											$thisfile_audio['streams'][$streamindex] = $thisfile_riff_audio[$streamindex];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
											$thisfile_audio_streams_currentstream = &$thisfile_audio['streams'][$streamindex];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
											if ($thisfile_audio_streams_currentstream['bits_per_sample'] == 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
												unset($thisfile_audio_streams_currentstream['bits_per_sample']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
											$thisfile_audio_streams_currentstream['wformattag'] = $thisfile_audio_streams_currentstream['raw']['wFormatTag'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
											unset($thisfile_audio_streams_currentstream['raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
											// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
											$thisfile_riff_raw['strf'][$strhfccType][$streamindex] = $thisfile_riff_audio[$streamindex]['raw'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
											unset($thisfile_riff_audio[$streamindex]['raw']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
											$thisfile_audio = getid3_lib::array_merge_noclobber($thisfile_audio, $thisfile_riff_audio[$streamindex]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
											$thisfile_audio['lossless'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
											switch ($thisfile_riff_raw_strf_strhfccType_streamindex['wFormatTag']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
												case 0x0001:  // PCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
													$thisfile_audio_dataformat  = 'wav';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
													$thisfile_audio['lossless'] = true;
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 0x0050: // MPEG Layer 2 or Layer 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
													$thisfile_audio_dataformat = 'mp2'; // Assume Layer-2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
												case 0x0055: // MPEG Layer 3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
													$thisfile_audio_dataformat = 'mp3';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
												case 0x00FF: // AAC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
													$thisfile_audio_dataformat = 'aac';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
												case 0x0161: // Windows Media v7 / v8 / v9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
												case 0x0162: // Windows Media Professional v9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
												case 0x0163: // Windows Media Lossess v9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
													$thisfile_audio_dataformat = 'wma';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
												case 0x2000: // AC-3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
													$thisfile_audio_dataformat = 'ac3';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
												case 0x2001: // DTS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
													$thisfile_audio_dataformat = 'dts';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
												default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
													$thisfile_audio_dataformat = 'wav';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
											$thisfile_audio_streams_currentstream['dataformat']   = $thisfile_audio_dataformat;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
											$thisfile_audio_streams_currentstream['lossless']     = $thisfile_audio['lossless'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
											$thisfile_audio_streams_currentstream['bitrate_mode'] = $thisfile_audio['bitrate_mode'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
										case 'iavs':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
										case 'vids':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
											// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
											$thisfile_riff_raw['strh'][$i]                  = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
											$thisfile_riff_raw_strh_current                 = &$thisfile_riff_raw['strh'][$i];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
											$thisfile_riff_raw_strh_current['fccType']               =                         substr($strhData,  0, 4);  // same as $strhfccType;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
											$thisfile_riff_raw_strh_current['fccHandler']            =                         substr($strhData,  4, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
											$thisfile_riff_raw_strh_current['dwFlags']               = $this->EitherEndian2Int(substr($strhData,  8, 4)); // Contains AVITF_* flags
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
											$thisfile_riff_raw_strh_current['wPriority']             = $this->EitherEndian2Int(substr($strhData, 12, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
											$thisfile_riff_raw_strh_current['wLanguage']             = $this->EitherEndian2Int(substr($strhData, 14, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
											$thisfile_riff_raw_strh_current['dwInitialFrames']       = $this->EitherEndian2Int(substr($strhData, 16, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
											$thisfile_riff_raw_strh_current['dwScale']               = $this->EitherEndian2Int(substr($strhData, 20, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
											$thisfile_riff_raw_strh_current['dwRate']                = $this->EitherEndian2Int(substr($strhData, 24, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
											$thisfile_riff_raw_strh_current['dwStart']               = $this->EitherEndian2Int(substr($strhData, 28, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
											$thisfile_riff_raw_strh_current['dwLength']              = $this->EitherEndian2Int(substr($strhData, 32, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
											$thisfile_riff_raw_strh_current['dwSuggestedBufferSize'] = $this->EitherEndian2Int(substr($strhData, 36, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
											$thisfile_riff_raw_strh_current['dwQuality']             = $this->EitherEndian2Int(substr($strhData, 40, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
											$thisfile_riff_raw_strh_current['dwSampleSize']          = $this->EitherEndian2Int(substr($strhData, 44, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
											$thisfile_riff_raw_strh_current['rcFrame']               = $this->EitherEndian2Int(substr($strhData, 48, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
											$thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_riff_raw_strh_current['fccHandler']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
											$thisfile_video['fourcc']             = $thisfile_riff_raw_strh_current['fccHandler'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
											if (!$thisfile_riff_video_current['codec'] && isset($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']) && self::fourccLookup($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
												$thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
												$thisfile_video['fourcc']             = $thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
											$thisfile_video['codec']              = $thisfile_riff_video_current['codec'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
											$thisfile_video['pixel_aspect_ratio'] = (float) 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
											switch ($thisfile_riff_raw_strh_current['fccHandler']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
												case 'HFYU': // Huffman Lossless Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
												case 'IRAW': // Intel YUV Uncompressed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
												case 'YUY2': // Uncompressed YUV 4:2:2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
													$thisfile_video['lossless'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
												default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
													$thisfile_video['lossless'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
											switch ($strhfccType) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
												case 'vids':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   930
													$thisfile_riff_raw_strf_strhfccType_streamindex = self::ParseBITMAPINFOHEADER(substr($strfData, 0, 40), ($this->container == 'riff'));
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
													$thisfile_video['bits_per_sample'] = $thisfile_riff_raw_strf_strhfccType_streamindex['biBitCount'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
													if ($thisfile_riff_video_current['codec'] == 'DV') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
														$thisfile_riff_video_current['dv_type'] = 2;
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 'iavs':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
													$thisfile_riff_video_current['dv_type'] = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
													break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
										default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   945
											$this->warning('Unhandled fccType for stream ('.$i.'): "'.$strhfccType.'"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
											break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   952
							if (isset($thisfile_riff_raw_strf_strhfccType_streamindex) && isset($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'])) {
0
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_video['fourcc'] = $thisfile_riff_raw_strf_strhfccType_streamindex['fourcc'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
								if (self::fourccLookup($thisfile_video['fourcc'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
									$thisfile_riff_video_current['codec'] = self::fourccLookup($thisfile_video['fourcc']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
									$thisfile_video['codec']              = $thisfile_riff_video_current['codec'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
								switch ($thisfile_riff_raw_strf_strhfccType_streamindex['fourcc']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
									case 'HFYU': // Huffman Lossless Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
									case 'IRAW': // Intel YUV Uncompressed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
									case 'YUY2': // Uncompressed YUV 4:2:2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
										$thisfile_video['lossless']        = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
										//$thisfile_video['bits_per_sample'] = 24;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
									default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
										$thisfile_video['lossless']        = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
										//$thisfile_video['bits_per_sample'] = 24;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   980
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   981
			case 'AMV ':
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   982
				$info['fileformat'] = 'amv';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   983
				$info['mime_type']  = 'video/amv';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   984
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   985
				$thisfile_video['bitrate_mode']    = 'vbr'; // it's MJPEG, presumably contant-quality encoding, thereby VBR
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   986
				$thisfile_video['dataformat']      = 'mjpeg';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   987
				$thisfile_video['codec']           = 'mjpeg';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   988
				$thisfile_video['lossless']        = false;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   989
				$thisfile_video['bits_per_sample'] = 24;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   990
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   991
				$thisfile_audio['dataformat']   = 'adpcm';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   992
				$thisfile_audio['lossless']     = false;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   993
				break;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   994
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   995
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   996
			// http://en.wikipedia.org/wiki/CD-DA
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
			case 'CDDA':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   998
				$info['fileformat'] = 'cda';
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   999
				unset($info['mime_type']);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1000
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1001
				$thisfile_audio_dataformat      = 'cda';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
				$info['avdataoffset'] = 44;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
				if (isset($thisfile_riff['CDDA']['fmt '][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
					$thisfile_riff_CDDA_fmt_0 = &$thisfile_riff['CDDA']['fmt '][0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
					$thisfile_riff_CDDA_fmt_0['unknown1']           = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'],  0, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
					$thisfile_riff_CDDA_fmt_0['track_num']          = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'],  2, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
					$thisfile_riff_CDDA_fmt_0['disc_id']            = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'],  4, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
					$thisfile_riff_CDDA_fmt_0['start_offset_frame'] = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'],  8, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
					$thisfile_riff_CDDA_fmt_0['playtime_frames']    = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 12, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
					$thisfile_riff_CDDA_fmt_0['unknown6']           = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 16, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
					$thisfile_riff_CDDA_fmt_0['unknown7']           = $this->EitherEndian2Int(substr($thisfile_riff_CDDA_fmt_0['data'], 20, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
					$thisfile_riff_CDDA_fmt_0['start_offset_seconds'] = (float) $thisfile_riff_CDDA_fmt_0['start_offset_frame'] / 75;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
					$thisfile_riff_CDDA_fmt_0['playtime_seconds']     = (float) $thisfile_riff_CDDA_fmt_0['playtime_frames'] / 75;
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1019
					$info['comments']['track_number']         = $thisfile_riff_CDDA_fmt_0['track_num'];
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
					$info['playtime_seconds']                 = $thisfile_riff_CDDA_fmt_0['playtime_seconds'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
					// hardcoded data for CD-audio
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1023
					$thisfile_audio['lossless']        = true;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
					$thisfile_audio['sample_rate']     = 44100;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
					$thisfile_audio['channels']        = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1026
					$thisfile_audio['bits_per_sample'] = 16;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1027
					$thisfile_audio['bitrate']         = $thisfile_audio['sample_rate'] * $thisfile_audio['channels'] * $thisfile_audio['bits_per_sample'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1028
					$thisfile_audio['bitrate_mode']    = 'cbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1032
			// http://en.wikipedia.org/wiki/AIFF
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1033
			case 'AIFF':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
			case 'AIFC':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1035
				$info['fileformat'] = 'aiff';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1036
				$info['mime_type']  = 'audio/x-aiff';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1037
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
				$thisfile_audio['bitrate_mode'] = 'cbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
				$thisfile_audio_dataformat      = 'aiff';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
				$thisfile_audio['lossless']     = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
				if (isset($thisfile_riff[$RIFFsubtype]['SSND'][0]['offset'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
					$info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['SSND'][0]['offset'] + 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
					$info['avdataend']    = $info['avdataoffset'] + $thisfile_riff[$RIFFsubtype]['SSND'][0]['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
					if ($info['avdataend'] > $info['filesize']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
						if (($info['avdataend'] == ($info['filesize'] + 1)) && (($info['filesize'] % 2) == 1)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
							// structures rounded to 2-byte boundary, but dumb encoders
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
							// forget to pad end of file to make this actually work
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
						} else {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1050
							$this->warning('Probable truncated AIFF file: expecting '.$thisfile_riff[$RIFFsubtype]['SSND'][0]['size'].' bytes of audio data, only '.($info['filesize'] - $info['avdataoffset']).' bytes found');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
						$info['avdataend'] = $info['filesize'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
				if (isset($thisfile_riff[$RIFFsubtype]['COMM'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
					$thisfile_riff_RIFFsubtype_COMM_0_data = &$thisfile_riff[$RIFFsubtype]['COMM'][0]['data'];
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_riff_audio['channels']         =         getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data,  0,  2), true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
					$thisfile_riff_audio['total_samples']    =         getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data,  2,  4), false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
					$thisfile_riff_audio['bits_per_sample']  =         getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data,  6,  2), true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
					$thisfile_riff_audio['sample_rate']      = (int) getid3_lib::BigEndian2Float(substr($thisfile_riff_RIFFsubtype_COMM_0_data,  8, 10));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
					if ($thisfile_riff[$RIFFsubtype]['COMM'][0]['size'] > 18) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
						$thisfile_riff_audio['codec_fourcc'] =                                   substr($thisfile_riff_RIFFsubtype_COMM_0_data, 18,  4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
						$CodecNameSize                       =         getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_COMM_0_data, 22,  1), false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
						$thisfile_riff_audio['codec_name']   =                                   substr($thisfile_riff_RIFFsubtype_COMM_0_data, 23,  $CodecNameSize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
						switch ($thisfile_riff_audio['codec_name']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
							case 'NONE':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
								$thisfile_audio['codec']    = 'Pulse Code Modulation (PCM)';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
								$thisfile_audio['lossless'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
							case '':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
								switch ($thisfile_riff_audio['codec_fourcc']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
									// http://developer.apple.com/qa/snd/snd07.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
									case 'sowt':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
										$thisfile_riff_audio['codec_name'] = 'Two\'s Compliment Little-Endian PCM';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1081
										$thisfile_audio['lossless'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1082
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1083
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1084
									case 'twos':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1085
										$thisfile_riff_audio['codec_name'] = 'Two\'s Compliment Big-Endian PCM';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1086
										$thisfile_audio['lossless'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1087
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1088
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1089
									default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1090
										break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1091
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1092
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1093
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1094
							default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1095
								$thisfile_audio['codec']    = $thisfile_riff_audio['codec_name'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1096
								$thisfile_audio['lossless'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1097
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
					$thisfile_audio['channels']        = $thisfile_riff_audio['channels'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
					if ($thisfile_riff_audio['bits_per_sample'] > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
						$thisfile_audio['bits_per_sample'] = $thisfile_riff_audio['bits_per_sample'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
					$thisfile_audio['sample_rate']     = $thisfile_riff_audio['sample_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
					if ($thisfile_audio['sample_rate'] == 0) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1107
						$this->error('Corrupted AIFF file: sample_rate == zero');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
						return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
					$info['playtime_seconds'] = $thisfile_riff_audio['total_samples'] / $thisfile_audio['sample_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
				if (isset($thisfile_riff[$RIFFsubtype]['COMT'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
					$offset = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
					$CommentCount                                   = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
					$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
					for ($i = 0; $i < $CommentCount; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
						$info['comments_raw'][$i]['timestamp']      = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 4), false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
						$offset += 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
						$info['comments_raw'][$i]['marker_id']      = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
						$CommentLength                              = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, 2), false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
						$offset += 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
						$info['comments_raw'][$i]['comment']        =                           substr($thisfile_riff[$RIFFsubtype]['COMT'][0]['data'], $offset, $CommentLength);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
						$offset += $CommentLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
						$info['comments_raw'][$i]['timestamp_unix'] = getid3_lib::DateMac2Unix($info['comments_raw'][$i]['timestamp']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
						$thisfile_riff['comments']['comment'][] = $info['comments_raw'][$i]['comment'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
				$CommentsChunkNames = array('NAME'=>'title', 'author'=>'artist', '(c) '=>'copyright', 'ANNO'=>'comment');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
				foreach ($CommentsChunkNames as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
					if (isset($thisfile_riff[$RIFFsubtype][$key][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
						$thisfile_riff['comments'][$value][] = $thisfile_riff[$RIFFsubtype][$key][0]['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
/*
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
				if (isset($thisfile_riff[$RIFFsubtype]['ID3 '])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
					$getid3_temp = new getID3();
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1142
					$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
					$getid3_id3v2 = new getid3_id3v2($getid3_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
					$getid3_id3v2->StartingOffset = $thisfile_riff[$RIFFsubtype]['ID3 '][0]['offset'] + 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
					if ($thisfile_riff[$RIFFsubtype]['ID3 '][0]['valid'] = $getid3_id3v2->Analyze()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
						$info['id3v2'] = $getid3_temp->info['id3v2'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
					unset($getid3_temp, $getid3_id3v2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1153
			// http://en.wikipedia.org/wiki/8SVX
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
			case '8SVX':
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1155
				$info['fileformat'] = '8svx';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1156
				$info['mime_type']  = 'audio/8svx';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1157
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
				$thisfile_audio['bitrate_mode']    = 'cbr';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
				$thisfile_audio_dataformat         = '8svx';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
				$thisfile_audio['bits_per_sample'] = 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
				$thisfile_audio['channels']        = 1; // overridden below, if need be
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1162
				$ActualBitsPerSample               = 0;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
				if (isset($thisfile_riff[$RIFFsubtype]['BODY'][0]['offset'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
					$info['avdataoffset'] = $thisfile_riff[$RIFFsubtype]['BODY'][0]['offset'] + 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
					$info['avdataend']    = $info['avdataoffset'] + $thisfile_riff[$RIFFsubtype]['BODY'][0]['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
					if ($info['avdataend'] > $info['filesize']) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1168
						$this->warning('Probable truncated AIFF file: expecting '.$thisfile_riff[$RIFFsubtype]['BODY'][0]['size'].' bytes of audio data, only '.($info['filesize'] - $info['avdataoffset']).' bytes found');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
				if (isset($thisfile_riff[$RIFFsubtype]['VHDR'][0]['offset'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
					// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
					$thisfile_riff_RIFFsubtype_VHDR_0 = &$thisfile_riff[$RIFFsubtype]['VHDR'][0];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
					$thisfile_riff_RIFFsubtype_VHDR_0['oneShotHiSamples']  =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'],  0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
					$thisfile_riff_RIFFsubtype_VHDR_0['repeatHiSamples']   =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'],  4, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
					$thisfile_riff_RIFFsubtype_VHDR_0['samplesPerHiCycle'] =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'],  8, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
					$thisfile_riff_RIFFsubtype_VHDR_0['samplesPerSec']     =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 12, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
					$thisfile_riff_RIFFsubtype_VHDR_0['ctOctave']          =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 14, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
					$thisfile_riff_RIFFsubtype_VHDR_0['sCompression']      =   getid3_lib::BigEndian2Int(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 15, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
					$thisfile_riff_RIFFsubtype_VHDR_0['Volume']            = getid3_lib::FixedPoint16_16(substr($thisfile_riff_RIFFsubtype_VHDR_0['data'], 16, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
					$thisfile_audio['sample_rate'] = $thisfile_riff_RIFFsubtype_VHDR_0['samplesPerSec'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
					switch ($thisfile_riff_RIFFsubtype_VHDR_0['sCompression']) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
						case 0:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
							$thisfile_audio['codec']    = 'Pulse Code Modulation (PCM)';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
							$thisfile_audio['lossless'] = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
							$ActualBitsPerSample        = 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
						case 1:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
							$thisfile_audio['codec']    = 'Fibonacci-delta encoding';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
							$thisfile_audio['lossless'] = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
							$ActualBitsPerSample        = 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
						default:
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1200
							$this->warning('Unexpected sCompression value in 8SVX.VHDR chunk - expecting 0 or 1, found "'.$thisfile_riff_RIFFsubtype_VHDR_0['sCompression'].'"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
				if (isset($thisfile_riff[$RIFFsubtype]['CHAN'][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
					$ChannelsIndex = getid3_lib::BigEndian2Int(substr($thisfile_riff[$RIFFsubtype]['CHAN'][0]['data'], 0, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
					switch ($ChannelsIndex) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
						case 6: // Stereo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
							$thisfile_audio['channels'] = 2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
						case 2: // Left channel only
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
						case 4: // Right channel only
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
							$thisfile_audio['channels'] = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
						default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1218
							$this->warning('Unexpected value in 8SVX.CHAN chunk - expecting 2 or 4 or 6, found "'.$ChannelsIndex.'"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
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
				$CommentsChunkNames = array('NAME'=>'title', 'author'=>'artist', '(c) '=>'copyright', 'ANNO'=>'comment');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
				foreach ($CommentsChunkNames as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
					if (isset($thisfile_riff[$RIFFsubtype][$key][0]['data'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
						$thisfile_riff['comments'][$value][] = $thisfile_riff[$RIFFsubtype][$key][0]['data'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
				$thisfile_audio['bitrate'] = $thisfile_audio['sample_rate'] * $ActualBitsPerSample * $thisfile_audio['channels'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
				if (!empty($thisfile_audio['bitrate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
					$info['playtime_seconds'] = ($info['avdataend'] - $info['avdataoffset']) / ($thisfile_audio['bitrate'] / 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
				}
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
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1237
			case 'CDXA':
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1238
				$info['fileformat'] = 'vcd'; // Asume Video CD
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1239
				$info['mime_type']  = 'video/mpeg';
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
				if (!empty($thisfile_riff['CDXA']['data'][0]['size'])) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1242
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.audio-video.mpeg.php', __FILE__, true);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1243
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1244
					$getid3_temp = new getID3();
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1245
					$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1246
					$getid3_mpeg = new getid3_mpeg($getid3_temp);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1247
					$getid3_mpeg->Analyze();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1248
					if (empty($getid3_temp->info['error'])) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1249
						$info['audio']   = $getid3_temp->info['audio'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1250
						$info['video']   = $getid3_temp->info['video'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1251
						$info['mpeg']    = $getid3_temp->info['mpeg'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1252
						$info['warning'] = $getid3_temp->info['warning'];
0
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
					unset($getid3_temp, $getid3_mpeg);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1258
			case 'WEBP':
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1259
				// https://developers.google.com/speed/webp/docs/riff_container
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1260
				// https://tools.ietf.org/html/rfc6386
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1261
				// https://chromium.googlesource.com/webm/libwebp/+/master/doc/webp-lossless-bitstream-spec.txt
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1262
				$info['fileformat'] = 'webp';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1263
				$info['mime_type']  = 'image/webp';
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1264
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1265
				if (!empty($thisfile_riff['WEBP']['VP8 '][0]['size'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1266
					$old_offset = $this->ftell();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1267
					$this->fseek($thisfile_riff['WEBP']['VP8 '][0]['offset'] + 8); // 4 bytes "VP8 " + 4 bytes chunk size
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1268
					$WEBP_VP8_header = $this->fread(10);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1269
					$this->fseek($old_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1270
					if (substr($WEBP_VP8_header, 3, 3) == "\x9D\x01\x2A") {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1271
						$thisfile_riff['WEBP']['VP8 '][0]['keyframe']   = !(getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 0, 3)) & 0x800000);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1272
						$thisfile_riff['WEBP']['VP8 '][0]['version']    =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 0, 3)) & 0x700000) >> 20;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1273
						$thisfile_riff['WEBP']['VP8 '][0]['show_frame'] =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 0, 3)) & 0x080000);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1274
						$thisfile_riff['WEBP']['VP8 '][0]['data_bytes'] =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 0, 3)) & 0x07FFFF) >>  0;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1275
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1276
						$thisfile_riff['WEBP']['VP8 '][0]['scale_x']    =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 6, 2)) & 0xC000) >> 14;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1277
						$thisfile_riff['WEBP']['VP8 '][0]['width']      =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 6, 2)) & 0x3FFF);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1278
						$thisfile_riff['WEBP']['VP8 '][0]['scale_y']    =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 8, 2)) & 0xC000) >> 14;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1279
						$thisfile_riff['WEBP']['VP8 '][0]['height']     =  (getid3_lib::LittleEndian2Int(substr($WEBP_VP8_header, 8, 2)) & 0x3FFF);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1280
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1281
						$info['video']['resolution_x'] = $thisfile_riff['WEBP']['VP8 '][0]['width'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1282
						$info['video']['resolution_y'] = $thisfile_riff['WEBP']['VP8 '][0]['height'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1283
					} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1284
						$this->error('Expecting 9D 01 2A at offset '.($thisfile_riff['WEBP']['VP8 '][0]['offset'] + 8 + 3).', found "'.getid3_lib::PrintHexBytes(substr($WEBP_VP8_header, 3, 3)).'"');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1285
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1286
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1287
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1288
				if (!empty($thisfile_riff['WEBP']['VP8L'][0]['size'])) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1289
					$old_offset = $this->ftell();
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1290
					$this->fseek($thisfile_riff['WEBP']['VP8L'][0]['offset'] + 8); // 4 bytes "VP8L" + 4 bytes chunk size
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1291
					$WEBP_VP8L_header = $this->fread(10);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1292
					$this->fseek($old_offset);
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1293
					if (substr($WEBP_VP8L_header, 0, 1) == "\x2F") {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1294
						$width_height_flags = getid3_lib::LittleEndian2Bin(substr($WEBP_VP8L_header, 1, 4));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1295
						$thisfile_riff['WEBP']['VP8L'][0]['width']         =        bindec(substr($width_height_flags, 18, 14)) + 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1296
						$thisfile_riff['WEBP']['VP8L'][0]['height']        =        bindec(substr($width_height_flags,  4, 14)) + 1;
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1297
						$thisfile_riff['WEBP']['VP8L'][0]['alpha_is_used'] = (bool) bindec(substr($width_height_flags,  3,  1));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1298
						$thisfile_riff['WEBP']['VP8L'][0]['version']       =        bindec(substr($width_height_flags,  0,  3));
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1299
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1300
						$info['video']['resolution_x'] = $thisfile_riff['WEBP']['VP8L'][0]['width'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1301
						$info['video']['resolution_y'] = $thisfile_riff['WEBP']['VP8L'][0]['height'];
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1302
					} else {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1303
						$this->error('Expecting 2F at offset '.($thisfile_riff['WEBP']['VP8L'][0]['offset'] + 8).', found "'.getid3_lib::PrintHexBytes(substr($WEBP_VP8L_header, 0, 1)).'"');
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1304
					}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1305
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1306
				}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1307
				break;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
			default:
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1310
				$this->error('Unknown RIFF type: expecting one of (WAVE|RMP3|AVI |CDDA|AIFF|AIFC|8SVX|CDXA|WEBP), found "'.$RIFFsubtype.'" instead');
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1311
				//unset($info['fileformat']);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1312
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1313
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1314
		switch ($RIFFsubtype) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1315
			case 'WAVE':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1316
			case 'AIFF':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
			case 'AIFC':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
				$ID3v2_key_good = 'id3 ';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1319
				$ID3v2_keys_bad = array('ID3 ', 'tag ');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
				foreach ($ID3v2_keys_bad as $ID3v2_key_bad) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
					if (isset($thisfile_riff[$RIFFsubtype][$ID3v2_key_bad]) && !array_key_exists($ID3v2_key_good, $thisfile_riff[$RIFFsubtype])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
						$thisfile_riff[$RIFFsubtype][$ID3v2_key_good] = $thisfile_riff[$RIFFsubtype][$ID3v2_key_bad];
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1323
						$this->warning('mapping "'.$ID3v2_key_bad.'" chunk to "'.$ID3v2_key_good.'"');
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
				if (isset($thisfile_riff[$RIFFsubtype]['id3 '])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
					getid3_lib::IncludeDependency(GETID3_INCLUDEPATH.'module.tag.id3v2.php', __FILE__, true);
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1329
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
					$getid3_temp = new getID3();
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1331
					$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
					$getid3_id3v2 = new getid3_id3v2($getid3_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
					$getid3_id3v2->StartingOffset = $thisfile_riff[$RIFFsubtype]['id3 '][0]['offset'] + 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
					if ($thisfile_riff[$RIFFsubtype]['id3 '][0]['valid'] = $getid3_id3v2->Analyze()) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
						$info['id3v2'] = $getid3_temp->info['id3v2'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
					unset($getid3_temp, $getid3_id3v2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
				break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
		if (isset($thisfile_riff_WAVE['DISP']) && is_array($thisfile_riff_WAVE['DISP'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
			$thisfile_riff['comments']['title'][] = trim(substr($thisfile_riff_WAVE['DISP'][count($thisfile_riff_WAVE['DISP']) - 1]['data'], 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
		if (isset($thisfile_riff_WAVE['INFO']) && is_array($thisfile_riff_WAVE['INFO'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
			self::parseComments($thisfile_riff_WAVE['INFO'], $thisfile_riff['comments']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
		if (isset($thisfile_riff['AVI ']['INFO']) && is_array($thisfile_riff['AVI ']['INFO'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
			self::parseComments($thisfile_riff['AVI ']['INFO'], $thisfile_riff['comments']);
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
		if (empty($thisfile_audio['encoder']) && !empty($info['mpeg']['audio']['LAME']['short_version'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
			$thisfile_audio['encoder'] = $info['mpeg']['audio']['LAME']['short_version'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
		if (!isset($info['playtime_seconds'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
			$info['playtime_seconds'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
		}
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  1359
		if (isset($thisfile_riff_raw['strh'][0]['dwLength']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) { // @phpstan-ignore-line
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
			// needed for >2GB AVIs where 'avih' chunk only lists number of frames in that chunk, not entire movie
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
			$info['playtime_seconds'] = $thisfile_riff_raw['strh'][0]['dwLength'] * ($thisfile_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000);
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  1362
		} elseif (isset($thisfile_riff_raw['avih']['dwTotalFrames']) && isset($thisfile_riff_raw['avih']['dwMicroSecPerFrame'])) { // @phpstan-ignore-line
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
			$info['playtime_seconds'] = $thisfile_riff_raw['avih']['dwTotalFrames'] * ($thisfile_riff_raw['avih']['dwMicroSecPerFrame'] / 1000000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
		if ($info['playtime_seconds'] > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
			if (isset($thisfile_riff_audio) && isset($thisfile_riff_video)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
				if (!isset($info['bitrate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
					$info['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
			} elseif (isset($thisfile_riff_audio) && !isset($thisfile_riff_video)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
				if (!isset($thisfile_audio['bitrate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
					$thisfile_audio['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
			} elseif (!isset($thisfile_riff_audio) && isset($thisfile_riff_video)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
				if (!isset($thisfile_video['bitrate'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
					$thisfile_video['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
		if (isset($thisfile_riff_video) && isset($thisfile_audio['bitrate']) && ($thisfile_audio['bitrate'] > 0) && ($info['playtime_seconds'] > 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
			$info['bitrate'] = ((($info['avdataend'] - $info['avdataoffset']) / $info['playtime_seconds']) * 8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
			$thisfile_audio['bitrate'] = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
			$thisfile_video['bitrate'] = $info['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
			foreach ($thisfile_riff_audio as $channelnumber => $audioinfoarray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
				$thisfile_video['bitrate'] -= $audioinfoarray['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
				$thisfile_audio['bitrate'] += $audioinfoarray['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
			if ($thisfile_video['bitrate'] <= 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
				unset($thisfile_video['bitrate']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
			if ($thisfile_audio['bitrate'] <= 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
				unset($thisfile_audio['bitrate']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
			}
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
		if (isset($info['mpeg']['audio'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
			$thisfile_audio_dataformat      = 'mp'.$info['mpeg']['audio']['layer'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
			$thisfile_audio['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
			$thisfile_audio['channels']     = $info['mpeg']['audio']['channels'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
			$thisfile_audio['bitrate']      = $info['mpeg']['audio']['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
			$thisfile_audio['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
			if (!empty($info['mpeg']['audio']['codec'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
				$thisfile_audio['codec'] = $info['mpeg']['audio']['codec'].' '.$thisfile_audio['codec'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
			if (!empty($thisfile_audio['streams'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
				foreach ($thisfile_audio['streams'] as $streamnumber => $streamdata) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
					if ($streamdata['dataformat'] == $thisfile_audio_dataformat) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
						$thisfile_audio['streams'][$streamnumber]['sample_rate']  = $thisfile_audio['sample_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
						$thisfile_audio['streams'][$streamnumber]['channels']     = $thisfile_audio['channels'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
						$thisfile_audio['streams'][$streamnumber]['bitrate']      = $thisfile_audio['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
						$thisfile_audio['streams'][$streamnumber]['bitrate_mode'] = $thisfile_audio['bitrate_mode'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
						$thisfile_audio['streams'][$streamnumber]['codec']        = $thisfile_audio['codec'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
			$getid3_mp3 = new getid3_mp3($this->getid3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
			$thisfile_audio['encoder_options'] = $getid3_mp3->GuessEncoderOptions();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
			unset($getid3_mp3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
		if (!empty($thisfile_riff_raw['fmt ']['wBitsPerSample']) && ($thisfile_riff_raw['fmt ']['wBitsPerSample'] > 0)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
			switch ($thisfile_audio_dataformat) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
				case 'ac3':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
					// ignore bits_per_sample
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
				default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
					$thisfile_audio['bits_per_sample'] = $thisfile_riff_raw['fmt ']['wBitsPerSample'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
		if (empty($thisfile_riff_raw)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
			unset($thisfile_riff['raw']);
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 (empty($thisfile_riff_audio)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
			unset($thisfile_riff['audio']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
		if (empty($thisfile_riff_video)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
			unset($thisfile_riff['video']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1458
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1459
	 * @param int $startoffset
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1460
	 * @param int $maxoffset
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1461
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1462
	 * @return array|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1463
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1464
	 * @throws Exception
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1465
	 * @throws getid3_exception
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1466
	 */
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1467
	public function ParseRIFFAMV($startoffset, $maxoffset) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1468
		// AMV files are RIFF-AVI files with parts of the spec deliberately broken, such as chunk size fields hardcoded to zero (because players known in hardware that these fields are always a certain size
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1469
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1470
		// https://code.google.com/p/amv-codec-tools/wiki/AmvDocumentation
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1471
		//typedef struct _amvmainheader {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1472
		//FOURCC fcc; // 'amvh'
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1473
		//DWORD cb;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1474
		//DWORD dwMicroSecPerFrame;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1475
		//BYTE reserve[28];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1476
		//DWORD dwWidth;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1477
		//DWORD dwHeight;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1478
		//DWORD dwSpeed;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1479
		//DWORD reserve0;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1480
		//DWORD reserve1;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1481
		//BYTE bTimeSec;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1482
		//BYTE bTimeMin;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1483
		//WORD wTimeHour;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1484
		//} AMVMAINHEADER;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1485
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1486
		$info = &$this->getid3->info;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1487
		$RIFFchunk = false;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1488
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1489
		try {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1490
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1491
			$this->fseek($startoffset);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1492
			$maxoffset = min($maxoffset, $info['avdataend']);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1493
			$AMVheader = $this->fread(284);
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1494
			if (substr($AMVheader,   0,  8) != 'hdrlamvh') {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1495
				throw new Exception('expecting "hdrlamv" at offset '.($startoffset +   0).', found "'.substr($AMVheader,   0, 8).'"');
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1496
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1497
			if (substr($AMVheader,   8,  4) != "\x38\x00\x00\x00") { // "amvh" chunk size, hardcoded to 0x38 = 56 bytes
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1498
				throw new Exception('expecting "0x38000000" at offset '.($startoffset +   8).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader,   8, 4)).'"');
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1499
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1500
			$RIFFchunk = array();
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1501
			$RIFFchunk['amvh']['us_per_frame']   = getid3_lib::LittleEndian2Int(substr($AMVheader,  12,  4));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1502
			$RIFFchunk['amvh']['reserved28']     =                              substr($AMVheader,  16, 28);  // null? reserved?
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1503
			$RIFFchunk['amvh']['resolution_x']   = getid3_lib::LittleEndian2Int(substr($AMVheader,  44,  4));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1504
			$RIFFchunk['amvh']['resolution_y']   = getid3_lib::LittleEndian2Int(substr($AMVheader,  48,  4));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1505
			$RIFFchunk['amvh']['frame_rate_int'] = getid3_lib::LittleEndian2Int(substr($AMVheader,  52,  4));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1506
			$RIFFchunk['amvh']['reserved0']      = getid3_lib::LittleEndian2Int(substr($AMVheader,  56,  4)); // 1? reserved?
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1507
			$RIFFchunk['amvh']['reserved1']      = getid3_lib::LittleEndian2Int(substr($AMVheader,  60,  4)); // 0? reserved?
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1508
			$RIFFchunk['amvh']['runtime_sec']    = getid3_lib::LittleEndian2Int(substr($AMVheader,  64,  1));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1509
			$RIFFchunk['amvh']['runtime_min']    = getid3_lib::LittleEndian2Int(substr($AMVheader,  65,  1));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1510
			$RIFFchunk['amvh']['runtime_hrs']    = getid3_lib::LittleEndian2Int(substr($AMVheader,  66,  2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1511
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1512
			$info['video']['frame_rate']   = 1000000 / $RIFFchunk['amvh']['us_per_frame'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1513
			$info['video']['resolution_x'] = $RIFFchunk['amvh']['resolution_x'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1514
			$info['video']['resolution_y'] = $RIFFchunk['amvh']['resolution_y'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1515
			$info['playtime_seconds']      = ($RIFFchunk['amvh']['runtime_hrs'] * 3600) + ($RIFFchunk['amvh']['runtime_min'] * 60) + $RIFFchunk['amvh']['runtime_sec'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1516
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1517
			// the rest is all hardcoded(?) and does not appear to be useful until you get to audio info at offset 256, even then everything is probably hardcoded
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1518
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1519
			if (substr($AMVheader,  68, 20) != 'LIST'."\x00\x00\x00\x00".'strlstrh'."\x38\x00\x00\x00") {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1520
				throw new Exception('expecting "LIST<0x00000000>strlstrh<0x38000000>" at offset '.($startoffset +  68).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader,  68, 20)).'"');
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1521
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1522
			// followed by 56 bytes of null: substr($AMVheader,  88, 56) -> 144
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1523
			if (substr($AMVheader, 144,  8) != 'strf'."\x24\x00\x00\x00") {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1524
				throw new Exception('expecting "strf<0x24000000>" at offset '.($startoffset + 144).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader, 144,  8)).'"');
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1525
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1526
			// followed by 36 bytes of null: substr($AMVheader, 144, 36) -> 180
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1527
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1528
			if (substr($AMVheader, 188, 20) != 'LIST'."\x00\x00\x00\x00".'strlstrh'."\x30\x00\x00\x00") {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1529
				throw new Exception('expecting "LIST<0x00000000>strlstrh<0x30000000>" at offset '.($startoffset + 188).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader, 188, 20)).'"');
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1530
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1531
			// followed by 48 bytes of null: substr($AMVheader, 208, 48) -> 256
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1532
			if (substr($AMVheader, 256,  8) != 'strf'."\x14\x00\x00\x00") {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1533
				throw new Exception('expecting "strf<0x14000000>" at offset '.($startoffset + 256).', found "'.getid3_lib::PrintHexBytes(substr($AMVheader, 256,  8)).'"');
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1534
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1535
			// followed by 20 bytes of a modified WAVEFORMATEX:
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1536
			// typedef struct {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1537
			// WORD wFormatTag;       //(Fixme: this is equal to PCM's 0x01 format code)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1538
			// WORD nChannels;        //(Fixme: this is always 1)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1539
			// DWORD nSamplesPerSec;  //(Fixme: for all known sample files this is equal to 22050)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1540
			// DWORD nAvgBytesPerSec; //(Fixme: for all known sample files this is equal to 44100)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1541
			// WORD nBlockAlign;      //(Fixme: this seems to be 2 in AMV files, is this correct ?)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1542
			// WORD wBitsPerSample;   //(Fixme: this seems to be 16 in AMV files instead of the expected 4)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1543
			// WORD cbSize;           //(Fixme: this seems to be 0 in AMV files)
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1544
			// WORD reserved;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1545
			// } WAVEFORMATEX;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1546
			$RIFFchunk['strf']['wformattag']      = getid3_lib::LittleEndian2Int(substr($AMVheader,  264,  2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1547
			$RIFFchunk['strf']['nchannels']       = getid3_lib::LittleEndian2Int(substr($AMVheader,  266,  2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1548
			$RIFFchunk['strf']['nsamplespersec']  = getid3_lib::LittleEndian2Int(substr($AMVheader,  268,  4));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1549
			$RIFFchunk['strf']['navgbytespersec'] = getid3_lib::LittleEndian2Int(substr($AMVheader,  272,  4));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1550
			$RIFFchunk['strf']['nblockalign']     = getid3_lib::LittleEndian2Int(substr($AMVheader,  276,  2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1551
			$RIFFchunk['strf']['wbitspersample']  = getid3_lib::LittleEndian2Int(substr($AMVheader,  278,  2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1552
			$RIFFchunk['strf']['cbsize']          = getid3_lib::LittleEndian2Int(substr($AMVheader,  280,  2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1553
			$RIFFchunk['strf']['reserved']        = getid3_lib::LittleEndian2Int(substr($AMVheader,  282,  2));
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1554
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1555
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1556
			$info['audio']['lossless']        = false;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1557
			$info['audio']['sample_rate']     = $RIFFchunk['strf']['nsamplespersec'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1558
			$info['audio']['channels']        = $RIFFchunk['strf']['nchannels'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1559
			$info['audio']['bits_per_sample'] = $RIFFchunk['strf']['wbitspersample'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1560
			$info['audio']['bitrate']         = $info['audio']['sample_rate'] * $info['audio']['channels'] * $info['audio']['bits_per_sample'];
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1561
			$info['audio']['bitrate_mode']    = 'cbr';
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1562
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1563
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1564
		} catch (getid3_exception $e) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1565
			if ($e->getCode() == 10) {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1566
				$this->warning('RIFFAMV parser: '.$e->getMessage());
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1567
			} else {
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1568
				throw $e;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1569
			}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1570
		}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1571
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1572
		return $RIFFchunk;
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1573
	}
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1574
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1575
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1576
	 * @param int $startoffset
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1577
	 * @param int $maxoffset
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1578
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1579
	 * @return array|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1580
	 * @throws getid3_exception
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1581
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
	public function ParseRIFF($startoffset, $maxoffset) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  1585
		$RIFFchunk = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
		$FoundAllChunksWeNeed = false;
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1587
		$LISTchunkParent = null;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1588
		$LISTchunkMaxOffset = null;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1589
		$AC3syncwordBytes = pack('n', getid3_ac3::syncword); // 0x0B77 -> "\x0B\x77"
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
		try {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
			$this->fseek($startoffset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
			$maxoffset = min($maxoffset, $info['avdataend']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
			while ($this->ftell() < $maxoffset) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
				$chunknamesize = $this->fread(8);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
				//$chunkname =                          substr($chunknamesize, 0, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
				$chunkname = str_replace("\x00", '_', substr($chunknamesize, 0, 4));  // note: chunk names of 4 null bytes do appear to be legal (has been observed inside INFO and PRMI chunks, for example), but makes traversing array keys more difficult
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
				$chunksize =  $this->EitherEndian2Int(substr($chunknamesize, 4, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
				//if (strlen(trim($chunkname, "\x00")) < 4) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
				if (strlen($chunkname) < 4) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
					$this->error('Expecting chunk name at offset '.($this->ftell() - 8).' but found nothing. Aborting RIFF parsing.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
				if (($chunksize == 0) && ($chunkname != 'JUNK')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
					$this->warning('Chunk ('.$chunkname.') size at offset '.($this->ftell() - 4).' is zero. Aborting RIFF parsing.');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
					break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
				if (($chunksize % 2) != 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
					// all structures are packed on word boundaries
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
					$chunksize++;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
				switch ($chunkname) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
					case 'LIST':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
						$listname = $this->fread(4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
						if (preg_match('#^(movi|rec )$#i', $listname)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
							$RIFFchunk[$listname]['offset'] = $this->ftell() - 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
							$RIFFchunk[$listname]['size']   = $chunksize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
							if (!$FoundAllChunksWeNeed) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
								$WhereWeWere      = $this->ftell();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
								$AudioChunkHeader = $this->fread(12);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
								$AudioChunkStreamNum  =                              substr($AudioChunkHeader, 0, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
								$AudioChunkStreamType =                              substr($AudioChunkHeader, 2, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
								$AudioChunkSize       = getid3_lib::LittleEndian2Int(substr($AudioChunkHeader, 4, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
								if ($AudioChunkStreamType == 'wb') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
									$FirstFourBytes = substr($AudioChunkHeader, 8, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
									if (preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', $FirstFourBytes)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
										// MP3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
										if (getid3_mp3::MPEGaudioHeaderBytesValid($FirstFourBytes)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
											$getid3_temp = new getID3();
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1633
											$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
											$getid3_temp->info['avdataoffset'] = $this->ftell() - 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
											$getid3_temp->info['avdataend']    = $this->ftell() + $AudioChunkSize;
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1636
											$getid3_mp3 = new getid3_mp3($getid3_temp, __CLASS__);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
											$getid3_mp3->getOnlyMPEGaudioInfo($getid3_temp->info['avdataoffset'], false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
											if (isset($getid3_temp->info['mpeg']['audio'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
												$info['mpeg']['audio']         = $getid3_temp->info['mpeg']['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
												$info['audio']                 = $getid3_temp->info['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
												$info['audio']['dataformat']   = 'mp'.$info['mpeg']['audio']['layer'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
												$info['audio']['sample_rate']  = $info['mpeg']['audio']['sample_rate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
												$info['audio']['channels']     = $info['mpeg']['audio']['channels'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
												$info['audio']['bitrate']      = $info['mpeg']['audio']['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
												$info['audio']['bitrate_mode'] = strtolower($info['mpeg']['audio']['bitrate_mode']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
												//$info['bitrate']               = $info['audio']['bitrate'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
											unset($getid3_temp, $getid3_mp3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1651
									} elseif (strpos($FirstFourBytes, $AC3syncwordBytes) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
										// AC3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
										$getid3_temp = new getID3();
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1654
										$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
										$getid3_temp->info['avdataoffset'] = $this->ftell() - 4;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
										$getid3_temp->info['avdataend']    = $this->ftell() + $AudioChunkSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
										$getid3_ac3 = new getid3_ac3($getid3_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
										$getid3_ac3->Analyze();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
										if (empty($getid3_temp->info['error'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
											$info['audio']   = $getid3_temp->info['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
											$info['ac3']     = $getid3_temp->info['ac3'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
											if (!empty($getid3_temp->info['warning'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
												foreach ($getid3_temp->info['warning'] as $key => $value) {
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  1664
													$this->warning($value);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
												}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
										unset($getid3_temp, $getid3_ac3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
								$FoundAllChunksWeNeed = true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
								$this->fseek($WhereWeWere);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
							$this->fseek($chunksize - 4, SEEK_CUR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
							if (!isset($RIFFchunk[$listname])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
								$RIFFchunk[$listname] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
							$LISTchunkParent    = $listname;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
							$LISTchunkMaxOffset = $this->ftell() - 4 + $chunksize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
							if ($parsedChunk = $this->ParseRIFF($this->ftell(), $LISTchunkMaxOffset)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
								$RIFFchunk[$listname] = array_merge_recursive($RIFFchunk[$listname], $parsedChunk);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
							}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
					default:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
						if (preg_match('#^[0-9]{2}(wb|pc|dc|db)$#', $chunkname)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
							$this->fseek($chunksize, SEEK_CUR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
							break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
						$thisindex = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
						if (isset($RIFFchunk[$chunkname]) && is_array($RIFFchunk[$chunkname])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
							$thisindex = count($RIFFchunk[$chunkname]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
						$RIFFchunk[$chunkname][$thisindex]['offset'] = $this->ftell() - 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
						$RIFFchunk[$chunkname][$thisindex]['size']   = $chunksize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
						switch ($chunkname) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
							case 'data':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
								$info['avdataoffset'] = $this->ftell();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
								$info['avdataend']    = $info['avdataoffset'] + $chunksize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
								$testData = $this->fread(36);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
								if ($testData === '') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
									break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
								if (preg_match('/^\xFF[\xE2-\xE7\xF2-\xF7\xFA-\xFF][\x00-\xEB]/s', substr($testData, 0, 4))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
									// Probably is MP3 data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
									if (getid3_mp3::MPEGaudioHeaderBytesValid(substr($testData, 0, 4))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
										$getid3_temp = new getID3();
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1715
										$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
										$getid3_temp->info['avdataoffset'] = $info['avdataoffset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
										$getid3_temp->info['avdataend']    = $info['avdataend'];
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  1718
										$getid3_mp3 = new getid3_mp3($getid3_temp, __CLASS__);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
										$getid3_mp3->getOnlyMPEGaudioInfo($info['avdataoffset'], false);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
										if (empty($getid3_temp->info['error'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
											$info['audio'] = $getid3_temp->info['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
											$info['mpeg']  = $getid3_temp->info['mpeg'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
										unset($getid3_temp, $getid3_mp3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1727
								} elseif (($isRegularAC3 = (substr($testData, 0, 2) == $AC3syncwordBytes)) || substr($testData, 8, 2) == strrev($AC3syncwordBytes)) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
									// This is probably AC-3 data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
									$getid3_temp = new getID3();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
									if ($isRegularAC3) {
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1732
										$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
										$getid3_temp->info['avdataoffset'] = $info['avdataoffset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
										$getid3_temp->info['avdataend']    = $info['avdataend'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
									$getid3_ac3 = new getid3_ac3($getid3_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
									if ($isRegularAC3) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
										$getid3_ac3->Analyze();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
									} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
										// Dolby Digital WAV
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
										// AC-3 content, but not encoded in same format as normal AC-3 file
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
										// For one thing, byte order is swapped
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
										$ac3_data = '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
										for ($i = 0; $i < 28; $i += 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
											$ac3_data .= substr($testData, 8 + $i + 1, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
											$ac3_data .= substr($testData, 8 + $i + 0, 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
										}
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1748
										$getid3_ac3->getid3->info['avdataoffset'] = 0;
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1749
										$getid3_ac3->getid3->info['avdataend']    = strlen($ac3_data);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
										$getid3_ac3->AnalyzeString($ac3_data);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
									if (empty($getid3_temp->info['error'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
										$info['audio'] = $getid3_temp->info['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
										$info['ac3']   = $getid3_temp->info['ac3'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
										if (!empty($getid3_temp->info['warning'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
											foreach ($getid3_temp->info['warning'] as $newerror) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
												$this->warning('getid3_ac3() says: ['.$newerror.']');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
									unset($getid3_temp, $getid3_ac3);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
								} elseif (preg_match('/^('.implode('|', array_map('preg_quote', getid3_dts::$syncwords)).')/', $testData)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
									// This is probably DTS data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
									$getid3_temp = new getID3();
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1768
									$getid3_temp->openfile($this->getid3->filename, $this->getid3->info['filesize'], $this->getid3->fp);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
									$getid3_temp->info['avdataoffset'] = $info['avdataoffset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
									$getid3_dts = new getid3_dts($getid3_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
									$getid3_dts->Analyze();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
									if (empty($getid3_temp->info['error'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
										$info['audio']            = $getid3_temp->info['audio'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
										$info['dts']              = $getid3_temp->info['dts'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
										$info['playtime_seconds'] = $getid3_temp->info['playtime_seconds']; // may not match RIFF calculations since DTS-WAV often used 14/16 bit-word packing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
										if (!empty($getid3_temp->info['warning'])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
											foreach ($getid3_temp->info['warning'] as $newerror) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
												$this->warning('getid3_dts() says: ['.$newerror.']');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
									unset($getid3_temp, $getid3_dts);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
								} elseif (substr($testData, 0, 4) == 'wvpk') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
									// This is WavPack data
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
									$info['wavpack']['offset'] = $info['avdataoffset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
									$info['wavpack']['size']   = getid3_lib::LittleEndian2Int(substr($testData, 4, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
									$this->parseWavPackHeader(substr($testData, 8, 28));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
								} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
									// This is some other kind of data (quite possibly just PCM)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
									// do nothing special, just skip it
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
								$nextoffset = $info['avdataend'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
								$this->fseek($nextoffset);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
							case 'iXML':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
							case 'bext':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
							case 'cart':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
							case 'fmt ':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
							case 'strh':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
							case 'strf':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
							case 'indx':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
							case 'MEXT':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
							case 'DISP':
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1809
							case 'wamd':
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  1810
							case 'guan':
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
								// always read data in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
							case 'JUNK':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
								// should be: never read data in
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
								// but some programs write their version strings in a JUNK chunk (e.g. VirtualDub, AVIdemux, etc)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
								if ($chunksize < 1048576) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
									if ($chunksize > 0) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
										$RIFFchunk[$chunkname][$thisindex]['data'] = $this->fread($chunksize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
										if ($chunkname == 'JUNK') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
											if (preg_match('#^([\\x20-\\x7F]+)#', $RIFFchunk[$chunkname][$thisindex]['data'], $matches)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
												// only keep text characters [chr(32)-chr(127)]
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
												$info['riff']['comments']['junk'][] = trim($matches[1]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
											}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
											// but if nothing there, ignore
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
											// remove the key in either case
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
											unset($RIFFchunk[$chunkname][$thisindex]['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
										}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
								} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
									$this->warning('Chunk "'.$chunkname.'" at offset '.$this->ftell().' is unexpectedly larger than 1MB (claims to be '.number_format($chunksize).' bytes), skipping data');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
									$this->fseek($chunksize, SEEK_CUR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
							//case 'IDVX':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
							//	$info['divxtag']['comments'] = self::ParseDIVXTAG($this->fread($chunksize));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
							//	break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1838
							case 'scot':
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1839
								// https://cmsdk.com/node-js/adding-scot-chunk-to-wav-file.html
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1840
								$RIFFchunk[$chunkname][$thisindex]['data'] = $this->fread($chunksize);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1841
								$RIFFchunk[$chunkname][$thisindex]['parsed']['alter']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],   0,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1842
								$RIFFchunk[$chunkname][$thisindex]['parsed']['attrib']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],   1,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1843
								$RIFFchunk[$chunkname][$thisindex]['parsed']['artnum']          = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],   2,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1844
								$RIFFchunk[$chunkname][$thisindex]['parsed']['title']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],   4,  43);  // "name" in other documentation
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1845
								$RIFFchunk[$chunkname][$thisindex]['parsed']['copy']            =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  47,   4);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1846
								$RIFFchunk[$chunkname][$thisindex]['parsed']['padd']            =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  51,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1847
								$RIFFchunk[$chunkname][$thisindex]['parsed']['asclen']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  52,   5);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1848
								$RIFFchunk[$chunkname][$thisindex]['parsed']['startseconds']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  57,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1849
								$RIFFchunk[$chunkname][$thisindex]['parsed']['starthundredths'] = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  59,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1850
								$RIFFchunk[$chunkname][$thisindex]['parsed']['endseconds']      = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  61,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1851
								$RIFFchunk[$chunkname][$thisindex]['parsed']['endhundreths']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  63,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1852
								$RIFFchunk[$chunkname][$thisindex]['parsed']['sdate']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  65,   6);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1853
								$RIFFchunk[$chunkname][$thisindex]['parsed']['kdate']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  71,   6);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1854
								$RIFFchunk[$chunkname][$thisindex]['parsed']['start_hr']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  77,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1855
								$RIFFchunk[$chunkname][$thisindex]['parsed']['kill_hr']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  78,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1856
								$RIFFchunk[$chunkname][$thisindex]['parsed']['digital']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  79,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1857
								$RIFFchunk[$chunkname][$thisindex]['parsed']['sample_rate']     = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  80,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1858
								$RIFFchunk[$chunkname][$thisindex]['parsed']['stereo']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  82,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1859
								$RIFFchunk[$chunkname][$thisindex]['parsed']['compress']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  83,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1860
								$RIFFchunk[$chunkname][$thisindex]['parsed']['eomstrt']         = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  84,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1861
								$RIFFchunk[$chunkname][$thisindex]['parsed']['eomlen']          = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  88,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1862
								$RIFFchunk[$chunkname][$thisindex]['parsed']['attrib2']         = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'],  90,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1863
								$RIFFchunk[$chunkname][$thisindex]['parsed']['future1']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'],  94,  12);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1864
								$RIFFchunk[$chunkname][$thisindex]['parsed']['catfontcolor']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 106,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1865
								$RIFFchunk[$chunkname][$thisindex]['parsed']['catcolor']        = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 110,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1866
								$RIFFchunk[$chunkname][$thisindex]['parsed']['segeompos']       = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 114,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1867
								$RIFFchunk[$chunkname][$thisindex]['parsed']['vt_startsecs']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 118,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1868
								$RIFFchunk[$chunkname][$thisindex]['parsed']['vt_starthunds']   = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 120,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1869
								$RIFFchunk[$chunkname][$thisindex]['parsed']['priorcat']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 122,   3);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1870
								$RIFFchunk[$chunkname][$thisindex]['parsed']['priorcopy']       =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 125,   4);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1871
								$RIFFchunk[$chunkname][$thisindex]['parsed']['priorpadd']       =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 129,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1872
								$RIFFchunk[$chunkname][$thisindex]['parsed']['postcat']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 130,   3);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1873
								$RIFFchunk[$chunkname][$thisindex]['parsed']['postcopy']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 133,   4);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1874
								$RIFFchunk[$chunkname][$thisindex]['parsed']['postpadd']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 137,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1875
								$RIFFchunk[$chunkname][$thisindex]['parsed']['hrcanplay']       =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 138,  21);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1876
								$RIFFchunk[$chunkname][$thisindex]['parsed']['future2']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 159, 108);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1877
								$RIFFchunk[$chunkname][$thisindex]['parsed']['artist']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 267,  34);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1878
								$RIFFchunk[$chunkname][$thisindex]['parsed']['comment']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 301,  34); // "trivia" in other documentation
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1879
								$RIFFchunk[$chunkname][$thisindex]['parsed']['intro']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 335,   2);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1880
								$RIFFchunk[$chunkname][$thisindex]['parsed']['end']             =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 337,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1881
								$RIFFchunk[$chunkname][$thisindex]['parsed']['year']            =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 338,   4);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1882
								$RIFFchunk[$chunkname][$thisindex]['parsed']['obsolete2']       =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 342,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1883
								$RIFFchunk[$chunkname][$thisindex]['parsed']['rec_hr']          =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 343,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1884
								$RIFFchunk[$chunkname][$thisindex]['parsed']['rdate']           =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 344,   6);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1885
								$RIFFchunk[$chunkname][$thisindex]['parsed']['mpeg_bitrate']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 350,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1886
								$RIFFchunk[$chunkname][$thisindex]['parsed']['pitch']           = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 352,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1887
								$RIFFchunk[$chunkname][$thisindex]['parsed']['playlevel']       = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 354,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1888
								$RIFFchunk[$chunkname][$thisindex]['parsed']['lenvalid']        =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 356,   1);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1889
								$RIFFchunk[$chunkname][$thisindex]['parsed']['filelength']      = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 357,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1890
								$RIFFchunk[$chunkname][$thisindex]['parsed']['newplaylevel']    = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 361,   2));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1891
								$RIFFchunk[$chunkname][$thisindex]['parsed']['chopsize']        = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 363,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1892
								$RIFFchunk[$chunkname][$thisindex]['parsed']['vteomovr']        = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 367,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1893
								$RIFFchunk[$chunkname][$thisindex]['parsed']['desiredlen']      = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 371,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1894
								$RIFFchunk[$chunkname][$thisindex]['parsed']['triggers']        = getid3_lib::LittleEndian2Int(substr($RIFFchunk[$chunkname][$thisindex]['data'], 375,   4));
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1895
								$RIFFchunk[$chunkname][$thisindex]['parsed']['fillout']         =                              substr($RIFFchunk[$chunkname][$thisindex]['data'], 379,   33);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1896
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1897
								foreach (array('title', 'artist', 'comment') as $key) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1898
									if (trim($RIFFchunk[$chunkname][$thisindex]['parsed'][$key])) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1899
										$info['riff']['comments'][$key] = array($RIFFchunk[$chunkname][$thisindex]['parsed'][$key]);
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1900
									}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1901
								}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1902
								if ($RIFFchunk[$chunkname][$thisindex]['parsed']['filelength'] && !empty($info['filesize']) && ($RIFFchunk[$chunkname][$thisindex]['parsed']['filelength'] != $info['filesize'])) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1903
									$this->warning('RIFF.WAVE.scot.filelength ('.$RIFFchunk[$chunkname][$thisindex]['parsed']['filelength'].') different from actual filesize ('.$info['filesize'].')');
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1904
								}
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1905
								break;
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1906
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
							default:
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1908
								if (!empty($LISTchunkParent) && isset($LISTchunkMaxOffset) && (($RIFFchunk[$chunkname][$thisindex]['offset'] + $RIFFchunk[$chunkname][$thisindex]['size']) <= $LISTchunkMaxOffset)) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
									$RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['offset'] = $RIFFchunk[$chunkname][$thisindex]['offset'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
									$RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['size']   = $RIFFchunk[$chunkname][$thisindex]['size'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
									unset($RIFFchunk[$chunkname][$thisindex]['offset']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
									unset($RIFFchunk[$chunkname][$thisindex]['size']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
									if (isset($RIFFchunk[$chunkname][$thisindex]) && empty($RIFFchunk[$chunkname][$thisindex])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
										unset($RIFFchunk[$chunkname][$thisindex]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
									}
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  1916
									if (count($RIFFchunk[$chunkname]) === 0) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
										unset($RIFFchunk[$chunkname]);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
									}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
									$RIFFchunk[$LISTchunkParent][$chunkname][$thisindex]['data'] = $this->fread($chunksize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
								} elseif ($chunksize < 2048) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
									// only read data in if smaller than 2kB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1922
									$RIFFchunk[$chunkname][$thisindex]['data'] = $this->fread($chunksize);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
								} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
									$this->fseek($chunksize, SEEK_CUR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
								}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
								break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
						break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
		} catch (getid3_exception $e) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
			if ($e->getCode() == 10) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1934
				$this->warning('RIFF parser: '.$e->getMessage());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1935
			} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1936
				throw $e;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  1940
		return !empty($RIFFchunk) ? $RIFFchunk : false;
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1943
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1944
	 * @param string $RIFFdata
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1945
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1946
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1947
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
	public function ParseRIFFdata(&$RIFFdata) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
		if ($RIFFdata) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
			$tempfile = tempnam(GETID3_TEMP_DIR, 'getID3');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
			$fp_temp  = fopen($tempfile, 'wb');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
			$RIFFdataLength = strlen($RIFFdata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
			$NewLengthString = getid3_lib::LittleEndian2String($RIFFdataLength, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
			for ($i = 0; $i < 4; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
				$RIFFdata[($i + 4)] = $NewLengthString[$i];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
			fwrite($fp_temp, $RIFFdata);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
			fclose($fp_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1961
			$getid3_temp = new getID3();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
			$getid3_temp->openfile($tempfile);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
			$getid3_temp->info['filesize']     = $RIFFdataLength;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
			$getid3_temp->info['filenamepath'] = $info['filenamepath'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
			$getid3_temp->info['tags']         = $info['tags'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
			$getid3_temp->info['warning']      = $info['warning'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
			$getid3_temp->info['error']        = $info['error'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
			$getid3_temp->info['comments']     = $info['comments'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
			$getid3_temp->info['audio']        = (isset($info['audio']) ? $info['audio'] : array());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
			$getid3_temp->info['video']        = (isset($info['video']) ? $info['video'] : array());
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
			$getid3_riff = new getid3_riff($getid3_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1972
			$getid3_riff->Analyze();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
			$info['riff']     = $getid3_temp->info['riff'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
			$info['warning']  = $getid3_temp->info['warning'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
			$info['error']    = $getid3_temp->info['error'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
			$info['tags']     = $getid3_temp->info['tags'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
			$info['comments'] = $getid3_temp->info['comments'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
			unset($getid3_riff, $getid3_temp);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
			unlink($tempfile);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
		return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1985
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1986
	 * @param array $RIFFinfoArray
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1987
	 * @param array $CommentsTargetArray
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1988
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1989
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  1990
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1991
	public static function parseComments(&$RIFFinfoArray, &$CommentsTargetArray) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1992
		$RIFFinfoKeyLookup = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1993
			'IARL'=>'archivallocation',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1994
			'IART'=>'artist',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1995
			'ICDS'=>'costumedesigner',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1996
			'ICMS'=>'commissionedby',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1997
			'ICMT'=>'comment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1998
			'ICNT'=>'country',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1999
			'ICOP'=>'copyright',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2000
			'ICRD'=>'creationdate',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2001
			'IDIM'=>'dimensions',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2002
			'IDIT'=>'digitizationdate',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
			'IDPI'=>'resolution',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
			'IDST'=>'distributor',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2005
			'IEDT'=>'editor',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2006
			'IENG'=>'engineers',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2007
			'IFRM'=>'accountofparts',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2008
			'IGNR'=>'genre',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2009
			'IKEY'=>'keywords',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2010
			'ILGT'=>'lightness',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2011
			'ILNG'=>'language',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2012
			'IMED'=>'orignalmedium',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2013
			'IMUS'=>'composer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2014
			'INAM'=>'title',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2015
			'IPDS'=>'productiondesigner',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2016
			'IPLT'=>'palette',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2017
			'IPRD'=>'product',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2018
			'IPRO'=>'producer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2019
			'IPRT'=>'part',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2020
			'IRTD'=>'rating',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2021
			'ISBJ'=>'subject',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2022
			'ISFT'=>'software',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2023
			'ISGN'=>'secondarygenre',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2024
			'ISHP'=>'sharpness',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2025
			'ISRC'=>'sourcesupplier',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2026
			'ISRF'=>'digitizationsource',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2027
			'ISTD'=>'productionstudio',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2028
			'ISTR'=>'starring',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2029
			'ITCH'=>'encoded_by',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2030
			'IWEB'=>'url',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2031
			'IWRI'=>'writer',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2032
			'____'=>'comment',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2033
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2034
		foreach ($RIFFinfoKeyLookup as $key => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2035
			if (isset($RIFFinfoArray[$key])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2036
				foreach ($RIFFinfoArray[$key] as $commentid => $commentdata) {
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
  2037
					if (!empty($commentdata['data']) && trim($commentdata['data']) != '') {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2038
						if (isset($CommentsTargetArray[$value])) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2039
							$CommentsTargetArray[$value][] =     trim($commentdata['data']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2040
						} else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2041
							$CommentsTargetArray[$value] = array(trim($commentdata['data']));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2042
						}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2043
					}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2044
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2045
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2046
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2047
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2048
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2049
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2050
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2051
	 * @param string $WaveFormatExData
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2052
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2053
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2054
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2055
	public static function parseWAVEFORMATex($WaveFormatExData) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2056
		// shortcut
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2057
		$WaveFormatEx        = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2058
		$WaveFormatEx['raw'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2059
		$WaveFormatEx_raw    = &$WaveFormatEx['raw'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2060
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2061
		$WaveFormatEx_raw['wFormatTag']      = substr($WaveFormatExData,  0, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2062
		$WaveFormatEx_raw['nChannels']       = substr($WaveFormatExData,  2, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2063
		$WaveFormatEx_raw['nSamplesPerSec']  = substr($WaveFormatExData,  4, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2064
		$WaveFormatEx_raw['nAvgBytesPerSec'] = substr($WaveFormatExData,  8, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2065
		$WaveFormatEx_raw['nBlockAlign']     = substr($WaveFormatExData, 12, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2066
		$WaveFormatEx_raw['wBitsPerSample']  = substr($WaveFormatExData, 14, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2067
		if (strlen($WaveFormatExData) > 16) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2068
			$WaveFormatEx_raw['cbSize']      = substr($WaveFormatExData, 16, 2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2069
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2070
		$WaveFormatEx_raw = array_map('getid3_lib::LittleEndian2Int', $WaveFormatEx_raw);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2071
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2072
		$WaveFormatEx['codec']           = self::wFormatTagLookup($WaveFormatEx_raw['wFormatTag']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2073
		$WaveFormatEx['channels']        = $WaveFormatEx_raw['nChannels'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2074
		$WaveFormatEx['sample_rate']     = $WaveFormatEx_raw['nSamplesPerSec'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2075
		$WaveFormatEx['bitrate']         = $WaveFormatEx_raw['nAvgBytesPerSec'] * 8;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2076
		$WaveFormatEx['bits_per_sample'] = $WaveFormatEx_raw['wBitsPerSample'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2077
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2078
		return $WaveFormatEx;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2079
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2080
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2081
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2082
	 * @param string $WavPackChunkData
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2083
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2084
	 * @return bool
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2085
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2086
	public function parseWavPackHeader($WavPackChunkData) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2087
		// typedef struct {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2088
		//     char ckID [4];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2089
		//     long ckSize;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2090
		//     short version;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2091
		//     short bits;                // added for version 2.00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2092
		//     short flags, shift;        // added for version 3.00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2093
		//     long total_samples, crc, crc2;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2094
		//     char extension [4], extra_bc, extras [3];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2095
		// } WavpackHeader;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2096
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2097
		// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2098
		$info = &$this->getid3->info;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2099
		$info['wavpack']  = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2100
		$thisfile_wavpack = &$info['wavpack'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2101
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2102
		$thisfile_wavpack['version']           = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  0, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2103
		if ($thisfile_wavpack['version'] >= 2) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2104
			$thisfile_wavpack['bits']          = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  2, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2105
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2106
		if ($thisfile_wavpack['version'] >= 3) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2107
			$thisfile_wavpack['flags_raw']     = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  4, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2108
			$thisfile_wavpack['shift']         = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  6, 2));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2109
			$thisfile_wavpack['total_samples'] = getid3_lib::LittleEndian2Int(substr($WavPackChunkData,  8, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2110
			$thisfile_wavpack['crc1']          = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 12, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2111
			$thisfile_wavpack['crc2']          = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 16, 4));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2112
			$thisfile_wavpack['extension']     =                              substr($WavPackChunkData, 20, 4);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2113
			$thisfile_wavpack['extra_bc']      = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 24, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2114
			for ($i = 0; $i <= 2; $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2115
				$thisfile_wavpack['extras'][]  = getid3_lib::LittleEndian2Int(substr($WavPackChunkData, 25 + $i, 1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2116
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2117
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2118
			// shortcut
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2119
			$thisfile_wavpack['flags'] = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2120
			$thisfile_wavpack_flags = &$thisfile_wavpack['flags'];
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2121
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2122
			$thisfile_wavpack_flags['mono']                 = (bool) ($thisfile_wavpack['flags_raw'] & 0x000001);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2123
			$thisfile_wavpack_flags['fast_mode']            = (bool) ($thisfile_wavpack['flags_raw'] & 0x000002);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2124
			$thisfile_wavpack_flags['raw_mode']             = (bool) ($thisfile_wavpack['flags_raw'] & 0x000004);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2125
			$thisfile_wavpack_flags['calc_noise']           = (bool) ($thisfile_wavpack['flags_raw'] & 0x000008);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2126
			$thisfile_wavpack_flags['high_quality']         = (bool) ($thisfile_wavpack['flags_raw'] & 0x000010);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2127
			$thisfile_wavpack_flags['3_byte_samples']       = (bool) ($thisfile_wavpack['flags_raw'] & 0x000020);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2128
			$thisfile_wavpack_flags['over_20_bits']         = (bool) ($thisfile_wavpack['flags_raw'] & 0x000040);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2129
			$thisfile_wavpack_flags['use_wvc']              = (bool) ($thisfile_wavpack['flags_raw'] & 0x000080);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2130
			$thisfile_wavpack_flags['noiseshaping']         = (bool) ($thisfile_wavpack['flags_raw'] & 0x000100);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2131
			$thisfile_wavpack_flags['very_fast_mode']       = (bool) ($thisfile_wavpack['flags_raw'] & 0x000200);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2132
			$thisfile_wavpack_flags['new_high_quality']     = (bool) ($thisfile_wavpack['flags_raw'] & 0x000400);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2133
			$thisfile_wavpack_flags['cancel_extreme']       = (bool) ($thisfile_wavpack['flags_raw'] & 0x000800);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2134
			$thisfile_wavpack_flags['cross_decorrelation']  = (bool) ($thisfile_wavpack['flags_raw'] & 0x001000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2135
			$thisfile_wavpack_flags['new_decorrelation']    = (bool) ($thisfile_wavpack['flags_raw'] & 0x002000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2136
			$thisfile_wavpack_flags['joint_stereo']         = (bool) ($thisfile_wavpack['flags_raw'] & 0x004000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2137
			$thisfile_wavpack_flags['extra_decorrelation']  = (bool) ($thisfile_wavpack['flags_raw'] & 0x008000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2138
			$thisfile_wavpack_flags['override_noiseshape']  = (bool) ($thisfile_wavpack['flags_raw'] & 0x010000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2139
			$thisfile_wavpack_flags['override_jointstereo'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x020000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2140
			$thisfile_wavpack_flags['copy_source_filetime'] = (bool) ($thisfile_wavpack['flags_raw'] & 0x040000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2141
			$thisfile_wavpack_flags['create_exe']           = (bool) ($thisfile_wavpack['flags_raw'] & 0x080000);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2142
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2143
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2144
		return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2145
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2146
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2147
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2148
	 * @param string $BITMAPINFOHEADER
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2149
	 * @param bool   $littleEndian
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2150
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2151
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2152
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2153
	public static function ParseBITMAPINFOHEADER($BITMAPINFOHEADER, $littleEndian=true) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2154
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
  2155
		$parsed                    = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2156
		$parsed['biSize']          = substr($BITMAPINFOHEADER,  0, 4); // number of bytes required by the BITMAPINFOHEADER structure
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2157
		$parsed['biWidth']         = substr($BITMAPINFOHEADER,  4, 4); // width of the bitmap in pixels
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2158
		$parsed['biHeight']        = substr($BITMAPINFOHEADER,  8, 4); // height of the bitmap in pixels. If biHeight is positive, the bitmap is a 'bottom-up' DIB and its origin is the lower left corner. If biHeight is negative, the bitmap is a 'top-down' DIB and its origin is the upper left corner
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2159
		$parsed['biPlanes']        = substr($BITMAPINFOHEADER, 12, 2); // number of color planes on the target device. In most cases this value must be set to 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2160
		$parsed['biBitCount']      = substr($BITMAPINFOHEADER, 14, 2); // Specifies the number of bits per pixels
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2161
		$parsed['biSizeImage']     = substr($BITMAPINFOHEADER, 20, 4); // size of the bitmap data section of the image (the actual pixel data, excluding BITMAPINFOHEADER and RGBQUAD structures)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2162
		$parsed['biXPelsPerMeter'] = substr($BITMAPINFOHEADER, 24, 4); // horizontal resolution, in pixels per metre, of the target device
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2163
		$parsed['biYPelsPerMeter'] = substr($BITMAPINFOHEADER, 28, 4); // vertical resolution, in pixels per metre, of the target device
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2164
		$parsed['biClrUsed']       = substr($BITMAPINFOHEADER, 32, 4); // actual number of color indices in the color table used by the bitmap. If this value is zero, the bitmap uses the maximum number of colors corresponding to the value of the biBitCount member for the compression mode specified by biCompression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2165
		$parsed['biClrImportant']  = substr($BITMAPINFOHEADER, 36, 4); // number of color indices that are considered important for displaying the bitmap. If this value is zero, all colors are important
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2166
		$parsed = array_map('getid3_lib::'.($littleEndian ? 'Little' : 'Big').'Endian2Int', $parsed);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2167
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2168
		$parsed['fourcc']          = substr($BITMAPINFOHEADER, 16, 4);  // compression identifier
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2169
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2170
		return $parsed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2171
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2172
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2173
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2174
	 * @param string $DIVXTAG
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2175
	 * @param bool   $raw
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2176
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2177
	 * @return array
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2178
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2179
	public static function ParseDIVXTAG($DIVXTAG, $raw=false) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2180
		// structure from "IDivX" source, Form1.frm, by "Greg Frazier of Daemonic Software Group", email: gfrazier@icestorm.net, web: http://dsg.cjb.net/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2181
		// source available at http://files.divx-digest.com/download/c663efe7ef8ad2e90bf4af4d3ea6188a/on0SWN2r/edit/IDivX.zip
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2182
		// 'Byte Layout:                   '1111111111111111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2183
		// '32 for Movie - 1               '1111111111111111
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2184
		// '28 for Author - 6              '6666666666666666
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2185
		// '4  for year - 2                '6666666666662222
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2186
		// '3  for genre - 3               '7777777777777777
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2187
		// '48 for Comments - 7            '7777777777777777
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2188
		// '1  for Rating - 4              '7777777777777777
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2189
		// '5  for Future Additions - 0    '333400000DIVXTAG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2190
		// '128 bytes total
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2191
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2192
		static $DIVXTAGgenre  = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2193
			 0 => 'Action',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2194
			 1 => 'Action/Adventure',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2195
			 2 => 'Adventure',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2196
			 3 => 'Adult',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
			 4 => 'Anime',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
			 5 => 'Cartoon',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
			 6 => 'Claymation',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
			 7 => 'Comedy',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
			 8 => 'Commercial',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2202
			 9 => 'Documentary',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2203
			10 => 'Drama',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2204
			11 => 'Home Video',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2205
			12 => 'Horror',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2206
			13 => 'Infomercial',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2207
			14 => 'Interactive',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
			15 => 'Mystery',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
			16 => 'Music Video',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
			17 => 'Other',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2211
			18 => 'Religion',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2212
			19 => 'Sci Fi',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2213
			20 => 'Thriller',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2214
			21 => 'Western',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2215
		),
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
		$DIVXTAGrating = array(
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
			 0 => 'Unrated',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
			 1 => 'G',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
			 2 => 'PG',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
			 3 => 'PG-13',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2221
			 4 => 'R',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2222
			 5 => 'NC-17',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2223
		);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2224
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2225
		$parsed              = array();
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2226
		$parsed['title']     =        trim(substr($DIVXTAG,   0, 32));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2227
		$parsed['artist']    =        trim(substr($DIVXTAG,  32, 28));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2228
		$parsed['year']      = intval(trim(substr($DIVXTAG,  60,  4)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2229
		$parsed['comment']   =        trim(substr($DIVXTAG,  64, 48));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2230
		$parsed['genre_id']  = intval(trim(substr($DIVXTAG, 112,  3)));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
		$parsed['rating_id'] =         ord(substr($DIVXTAG, 115,  1));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
		//$parsed['padding'] =             substr($DIVXTAG, 116,  5);  // 5-byte null
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
		//$parsed['magic']   =             substr($DIVXTAG, 121,  7);  // "DIVXTAG"
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
		$parsed['genre']  = (isset($DIVXTAGgenre[$parsed['genre_id']])   ? $DIVXTAGgenre[$parsed['genre_id']]   : $parsed['genre_id']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
		$parsed['rating'] = (isset($DIVXTAGrating[$parsed['rating_id']]) ? $DIVXTAGrating[$parsed['rating_id']] : $parsed['rating_id']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2238
		if (!$raw) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2239
			unset($parsed['genre_id'], $parsed['rating_id']);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2240
			foreach ($parsed as $key => $value) {
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2241
				if (empty($value)) {
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2242
					unset($parsed[$key]);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2243
				}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2244
			}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2245
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2246
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2247
		foreach ($parsed as $tag => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2248
			$parsed[$tag] = array($value);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2249
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2250
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
		return $parsed;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2252
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2254
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2255
	 * @param string $tagshortname
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2256
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2257
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2258
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
	public static function waveSNDMtagLookup($tagshortname) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
		$begin = __LINE__;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
		/** This is not a comment!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
			©kwd	keywords
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
			©BPM	bpm
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2266
			©trt	tracktitle
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2267
			©des	description
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2268
			©gen	category
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2269
			©fin	featuredinstrument
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2270
			©LID	longid
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2271
			©bex	bwdescription
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
			©pub	publisher
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2273
			©cdt	cdtitle
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2274
			©alb	library
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2275
			©com	composer
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2276
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2277
		*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2278
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
		return getid3_lib::EmbeddedLookup($tagshortname, $begin, __LINE__, __FILE__, 'riff-sndm');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2282
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2283
	 * @param int $wFormatTag
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2284
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2285
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2286
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
	public static function wFormatTagLookup($wFormatTag) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2289
		$begin = __LINE__;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2291
		/** This is not a comment!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2293
			0x0000	Microsoft Unknown Wave Format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2294
			0x0001	Pulse Code Modulation (PCM)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2295
			0x0002	Microsoft ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2296
			0x0003	IEEE Float
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
			0x0004	Compaq Computer VSELP
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
			0x0005	IBM CVSD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2299
			0x0006	Microsoft A-Law
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2300
			0x0007	Microsoft mu-Law
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2301
			0x0008	Microsoft DTS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2302
			0x0010	OKI ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2303
			0x0011	Intel DVI/IMA ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2304
			0x0012	Videologic MediaSpace ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2305
			0x0013	Sierra Semiconductor ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2306
			0x0014	Antex Electronics G.723 ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2307
			0x0015	DSP Solutions DigiSTD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2308
			0x0016	DSP Solutions DigiFIX
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
			0x0017	Dialogic OKI ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
			0x0018	MediaVision ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
			0x0019	Hewlett-Packard CU
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
			0x0020	Yamaha ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
			0x0021	Speech Compression Sonarc
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
			0x0022	DSP Group TrueSpeech
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
			0x0023	Echo Speech EchoSC1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
			0x0024	Audiofile AF36
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
			0x0025	Audio Processing Technology APTX
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2318
			0x0026	AudioFile AF10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2319
			0x0027	Prosody 1612
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2320
			0x0028	LRC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2321
			0x0030	Dolby AC2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2322
			0x0031	Microsoft GSM 6.10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2323
			0x0032	MSNAudio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2324
			0x0033	Antex Electronics ADPCME
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2325
			0x0034	Control Resources VQLPC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2326
			0x0035	DSP Solutions DigiREAL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2327
			0x0036	DSP Solutions DigiADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2328
			0x0037	Control Resources CR10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2329
			0x0038	Natural MicroSystems VBXADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2330
			0x0039	Crystal Semiconductor IMA ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2331
			0x003A	EchoSC3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2332
			0x003B	Rockwell ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2333
			0x003C	Rockwell Digit LK
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2334
			0x003D	Xebec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2335
			0x0040	Antex Electronics G.721 ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2336
			0x0041	G.728 CELP
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2337
			0x0042	MSG723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2338
			0x0050	MPEG Layer-2 or Layer-1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2339
			0x0052	RT24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2340
			0x0053	PAC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2341
			0x0055	MPEG Layer-3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2342
			0x0059	Lucent G.723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2343
			0x0060	Cirrus
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2344
			0x0061	ESPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2345
			0x0062	Voxware
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2346
			0x0063	Canopus Atrac
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2347
			0x0064	G.726 ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2348
			0x0065	G.722 ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2349
			0x0066	DSAT
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2350
			0x0067	DSAT Display
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2351
			0x0069	Voxware Byte Aligned
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2352
			0x0070	Voxware AC8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2353
			0x0071	Voxware AC10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2354
			0x0072	Voxware AC16
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
			0x0073	Voxware AC20
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2356
			0x0074	Voxware MetaVoice
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
			0x0075	Voxware MetaSound
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2358
			0x0076	Voxware RT29HW
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2359
			0x0077	Voxware VR12
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2360
			0x0078	Voxware VR18
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2361
			0x0079	Voxware TQ40
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2362
			0x0080	Softsound
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2363
			0x0081	Voxware TQ60
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2364
			0x0082	MSRT24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2365
			0x0083	G.729A
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2366
			0x0084	MVI MV12
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2367
			0x0085	DF G.726
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2368
			0x0086	DF GSM610
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2369
			0x0088	ISIAudio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2370
			0x0089	Onlive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2371
			0x0091	SBC24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2372
			0x0092	Dolby AC3 SPDIF
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2373
			0x0093	MediaSonic G.723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2374
			0x0094	Aculab PLC    Prosody 8kbps
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2375
			0x0097	ZyXEL ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2376
			0x0098	Philips LPCBB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2377
			0x0099	Packed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2378
			0x00FF	AAC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2379
			0x0100	Rhetorex ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2380
			0x0101	IBM mu-law
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2381
			0x0102	IBM A-law
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2382
			0x0103	IBM AVC Adaptive Differential Pulse Code Modulation (ADPCM)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2383
			0x0111	Vivo G.723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2384
			0x0112	Vivo Siren
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2385
			0x0123	Digital G.723
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2386
			0x0125	Sanyo LD ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2387
			0x0130	Sipro Lab Telecom ACELP NET
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2388
			0x0131	Sipro Lab Telecom ACELP 4800
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2389
			0x0132	Sipro Lab Telecom ACELP 8V3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2390
			0x0133	Sipro Lab Telecom G.729
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2391
			0x0134	Sipro Lab Telecom G.729A
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2392
			0x0135	Sipro Lab Telecom Kelvin
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2393
			0x0140	Windows Media Video V8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2394
			0x0150	Qualcomm PureVoice
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2395
			0x0151	Qualcomm HalfRate
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2396
			0x0155	Ring Zero Systems TUB GSM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2397
			0x0160	Microsoft Audio 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2398
			0x0161	Windows Media Audio V7 / V8 / V9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2399
			0x0162	Windows Media Audio Professional V9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2400
			0x0163	Windows Media Audio Lossless V9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2401
			0x0200	Creative Labs ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2402
			0x0202	Creative Labs Fastspeech8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2403
			0x0203	Creative Labs Fastspeech10
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2404
			0x0210	UHER Informatic GmbH ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2405
			0x0220	Quarterdeck
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2406
			0x0230	I-link Worldwide VC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2407
			0x0240	Aureal RAW Sport
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2408
			0x0250	Interactive Products HSX
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2409
			0x0251	Interactive Products RPELP
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2410
			0x0260	Consistent Software CS2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2411
			0x0270	Sony SCX
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2412
			0x0300	Fujitsu FM Towns Snd
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2413
			0x0400	BTV Digital
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2414
			0x0401	Intel Music Coder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2415
			0x0450	QDesign Music
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2416
			0x0680	VME VMPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2417
			0x0681	AT&T Labs TPC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2418
			0x08AE	ClearJump LiteWave
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2419
			0x1000	Olivetti GSM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2420
			0x1001	Olivetti ADPCM
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2421
			0x1002	Olivetti CELP
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2422
			0x1003	Olivetti SBC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2423
			0x1004	Olivetti OPR
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2424
			0x1100	Lernout & Hauspie Codec (0x1100)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2425
			0x1101	Lernout & Hauspie CELP Codec (0x1101)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2426
			0x1102	Lernout & Hauspie SBC Codec (0x1102)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2427
			0x1103	Lernout & Hauspie SBC Codec (0x1103)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2428
			0x1104	Lernout & Hauspie SBC Codec (0x1104)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2429
			0x1400	Norris
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2430
			0x1401	AT&T ISIAudio
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2431
			0x1500	Soundspace Music Compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2432
			0x181C	VoxWare RT24 Speech
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2433
			0x1FC4	NCT Soft ALF2CD (www.nctsoft.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2434
			0x2000	Dolby AC3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2435
			0x2001	Dolby DTS
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2436
			0x2002	WAVE_FORMAT_14_4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2437
			0x2003	WAVE_FORMAT_28_8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2438
			0x2004	WAVE_FORMAT_COOK
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2439
			0x2005	WAVE_FORMAT_DNET
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2440
			0x674F	Ogg Vorbis 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2441
			0x6750	Ogg Vorbis 2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2442
			0x6751	Ogg Vorbis 3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2443
			0x676F	Ogg Vorbis 1+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2444
			0x6770	Ogg Vorbis 2+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2445
			0x6771	Ogg Vorbis 3+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2446
			0x7A21	GSM-AMR (CBR, no SID)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2447
			0x7A22	GSM-AMR (VBR, including SID)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2448
			0xFFFE	WAVE_FORMAT_EXTENSIBLE
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2449
			0xFFFF	WAVE_FORMAT_DEVELOPMENT
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2450
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2451
		*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2452
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2453
		return getid3_lib::EmbeddedLookup('0x'.str_pad(strtoupper(dechex($wFormatTag)), 4, '0', STR_PAD_LEFT), $begin, __LINE__, __FILE__, 'riff-wFormatTag');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2454
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2455
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2456
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2457
	 * @param string $fourcc
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2458
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2459
	 * @return string
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2460
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2461
	public static function fourccLookup($fourcc) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2462
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2463
		$begin = __LINE__;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2464
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2465
		/** This is not a comment!
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2466
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2467
			swot	http://developer.apple.com/qa/snd/snd07.html
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2468
			____	No Codec (____)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2469
			_BIT	BI_BITFIELDS (Raw RGB)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2470
			_JPG	JPEG compressed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2471
			_PNG	PNG compressed W3C/ISO/IEC (RFC-2083)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2472
			_RAW	Full Frames (Uncompressed)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2473
			_RGB	Raw RGB Bitmap
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2474
			_RL4	RLE 4bpp RGB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2475
			_RL8	RLE 8bpp RGB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2476
			3IV1	3ivx MPEG-4 v1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2477
			3IV2	3ivx MPEG-4 v2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2478
			3IVX	3ivx MPEG-4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2479
			AASC	Autodesk Animator
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2480
			ABYR	Kensington ?ABYR?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2481
			AEMI	Array Microsystems VideoONE MPEG1-I Capture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2482
			AFLC	Autodesk Animator FLC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2483
			AFLI	Autodesk Animator FLI
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2484
			AMPG	Array Microsystems VideoONE MPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2485
			ANIM	Intel RDX (ANIM)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2486
			AP41	AngelPotion Definitive
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2487
			ASV1	Asus Video v1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2488
			ASV2	Asus Video v2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2489
			ASVX	Asus Video 2.0 (audio)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2490
			AUR2	AuraVision Aura 2 Codec - YUV 4:2:2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2491
			AURA	AuraVision Aura 1 Codec - YUV 4:1:1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2492
			AVDJ	Independent JPEG Group\'s codec (AVDJ)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2493
			AVRN	Independent JPEG Group\'s codec (AVRN)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2494
			AYUV	4:4:4 YUV (AYUV)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2495
			AZPR	Quicktime Apple Video (AZPR)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2496
			BGR 	Raw RGB32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2497
			BLZ0	Blizzard DivX MPEG-4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2498
			BTVC	Conexant Composite Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2499
			BINK	RAD Game Tools Bink Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2500
			BT20	Conexant Prosumer Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2501
			BTCV	Conexant Composite Video Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2502
			BW10	Data Translation Broadway MPEG Capture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2503
			CC12	Intel YUV12
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2504
			CDVC	Canopus DV
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2505
			CFCC	Digital Processing Systems DPS Perception
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2506
			CGDI	Microsoft Office 97 Camcorder Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2507
			CHAM	Winnov Caviara Champagne
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2508
			CJPG	Creative WebCam JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2509
			CLJR	Cirrus Logic YUV 4:1:1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2510
			CMYK	Common Data Format in Printing (Colorgraph)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2511
			CPLA	Weitek 4:2:0 YUV Planar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2512
			CRAM	Microsoft Video 1 (CRAM)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2513
			cvid	Radius Cinepak
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2514
			CVID	Radius Cinepak
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2515
			CWLT	Microsoft Color WLT DIB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2516
			CYUV	Creative Labs YUV
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2517
			CYUY	ATI YUV
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2518
			D261	H.261
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2519
			D263	H.263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2520
			DIB 	Device Independent Bitmap
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2521
			DIV1	FFmpeg OpenDivX
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2522
			DIV2	Microsoft MPEG-4 v1/v2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2523
			DIV3	DivX ;-) MPEG-4 v3.x Low-Motion
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2524
			DIV4	DivX ;-) MPEG-4 v3.x Fast-Motion
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2525
			DIV5	DivX MPEG-4 v5.x
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2526
			DIV6	DivX ;-) (MS MPEG-4 v3.x)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2527
			DIVX	DivX MPEG-4 v4 (OpenDivX / Project Mayo)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2528
			divx	DivX MPEG-4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2529
			DMB1	Matrox Rainbow Runner hardware MJPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2530
			DMB2	Paradigm MJPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2531
			DSVD	?DSVD?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2532
			DUCK	Duck TrueMotion 1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2533
			DPS0	DPS/Leitch Reality Motion JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2534
			DPSC	DPS/Leitch PAR Motion JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2535
			DV25	Matrox DVCPRO codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2536
			DV50	Matrox DVCPRO50 codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2537
			DVC 	IEC 61834 and SMPTE 314M (DVC/DV Video)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2538
			DVCP	IEC 61834 and SMPTE 314M (DVC/DV Video)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2539
			DVHD	IEC Standard DV 1125 lines @ 30fps / 1250 lines @ 25fps
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2540
			DVMA	Darim Vision DVMPEG (dummy for MPEG compressor) (www.darvision.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2541
			DVSL	IEC Standard DV compressed in SD (SDL)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2542
			DVAN	?DVAN?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2543
			DVE2	InSoft DVE-2 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2544
			dvsd	IEC 61834 and SMPTE 314M DVC/DV Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2545
			DVSD	IEC 61834 and SMPTE 314M DVC/DV Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2546
			DVX1	Lucent DVX1000SP Video Decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2547
			DVX2	Lucent DVX2000S Video Decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2548
			DVX3	Lucent DVX3000S Video Decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2549
			DX50	DivX v5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2550
			DXT1	Microsoft DirectX Compressed Texture (DXT1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2551
			DXT2	Microsoft DirectX Compressed Texture (DXT2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2552
			DXT3	Microsoft DirectX Compressed Texture (DXT3)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2553
			DXT4	Microsoft DirectX Compressed Texture (DXT4)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2554
			DXT5	Microsoft DirectX Compressed Texture (DXT5)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2555
			DXTC	Microsoft DirectX Compressed Texture (DXTC)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2556
			DXTn	Microsoft DirectX Compressed Texture (DXTn)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2557
			EM2V	Etymonix MPEG-2 I-frame (www.etymonix.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2558
			EKQ0	Elsa ?EKQ0?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2559
			ELK0	Elsa ?ELK0?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2560
			ESCP	Eidos Escape
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2561
			ETV1	eTreppid Video ETV1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2562
			ETV2	eTreppid Video ETV2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2563
			ETVC	eTreppid Video ETVC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2564
			FLIC	Autodesk FLI/FLC Animation
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2565
			FLV1	Sorenson Spark
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2566
			FLV4	On2 TrueMotion VP6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2567
			FRWT	Darim Vision Forward Motion JPEG (www.darvision.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2568
			FRWU	Darim Vision Forward Uncompressed (www.darvision.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2569
			FLJP	D-Vision Field Encoded Motion JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2570
			FPS1	FRAPS v1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2571
			FRWA	SoftLab-Nsk Forward Motion JPEG w/ alpha channel
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2572
			FRWD	SoftLab-Nsk Forward Motion JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2573
			FVF1	Iterated Systems Fractal Video Frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2574
			GLZW	Motion LZW (gabest@freemail.hu)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2575
			GPEG	Motion JPEG (gabest@freemail.hu)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2576
			GWLT	Microsoft Greyscale WLT DIB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2577
			H260	Intel ITU H.260 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2578
			H261	Intel ITU H.261 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2579
			H262	Intel ITU H.262 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2580
			H263	Intel ITU H.263 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2581
			H264	Intel ITU H.264 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2582
			H265	Intel ITU H.265 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2583
			H266	Intel ITU H.266 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2584
			H267	Intel ITU H.267 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2585
			H268	Intel ITU H.268 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2586
			H269	Intel ITU H.269 Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2587
			HFYU	Huffman Lossless Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2588
			HMCR	Rendition Motion Compensation Format (HMCR)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2589
			HMRR	Rendition Motion Compensation Format (HMRR)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2590
			I263	FFmpeg I263 decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2591
			IF09	Indeo YVU9 ("YVU9 with additional delta-frame info after the U plane")
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2592
			IUYV	Interlaced version of UYVY (www.leadtools.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2593
			IY41	Interlaced version of Y41P (www.leadtools.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2594
			IYU1	12 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec    IEEE standard
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2595
			IYU2	24 bit format used in mode 2 of the IEEE 1394 Digital Camera 1.04 spec    IEEE standard
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2596
			IYUV	Planar YUV format (8-bpp Y plane, followed by 8-bpp 2×2 U and V planes)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2597
			i263	Intel ITU H.263 Videoconferencing (i263)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2598
			I420	Intel Indeo 4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2599
			IAN 	Intel Indeo 4 (RDX)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2600
			ICLB	InSoft CellB Videoconferencing
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2601
			IGOR	Power DVD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2602
			IJPG	Intergraph JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2603
			ILVC	Intel Layered Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2604
			ILVR	ITU-T H.263+
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2605
			IPDV	I-O Data Device Giga AVI DV Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2606
			IR21	Intel Indeo 2.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2607
			IRAW	Intel YUV Uncompressed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2608
			IV30	Intel Indeo 3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2609
			IV31	Intel Indeo 3.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2610
			IV32	Ligos Indeo 3.2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2611
			IV33	Ligos Indeo 3.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2612
			IV34	Ligos Indeo 3.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2613
			IV35	Ligos Indeo 3.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2614
			IV36	Ligos Indeo 3.6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2615
			IV37	Ligos Indeo 3.7
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2616
			IV38	Ligos Indeo 3.8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2617
			IV39	Ligos Indeo 3.9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2618
			IV40	Ligos Indeo Interactive 4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2619
			IV41	Ligos Indeo Interactive 4.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2620
			IV42	Ligos Indeo Interactive 4.2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2621
			IV43	Ligos Indeo Interactive 4.3
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2622
			IV44	Ligos Indeo Interactive 4.4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2623
			IV45	Ligos Indeo Interactive 4.5
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2624
			IV46	Ligos Indeo Interactive 4.6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2625
			IV47	Ligos Indeo Interactive 4.7
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2626
			IV48	Ligos Indeo Interactive 4.8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2627
			IV49	Ligos Indeo Interactive 4.9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2628
			IV50	Ligos Indeo Interactive 5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2629
			JBYR	Kensington ?JBYR?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2630
			JPEG	Still Image JPEG DIB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2631
			JPGL	Pegasus Lossless Motion JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2632
			KMVC	Team17 Software Karl Morton\'s Video Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2633
			LSVM	Vianet Lighting Strike Vmail (Streaming) (www.vianet.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2634
			LEAD	LEAD Video Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2635
			Ljpg	LEAD MJPEG Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2636
			MDVD	Alex MicroDVD Video (hacked MS MPEG-4) (www.tiasoft.de)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2637
			MJPA	Morgan Motion JPEG (MJPA) (www.morgan-multimedia.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2638
			MJPB	Morgan Motion JPEG (MJPB) (www.morgan-multimedia.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2639
			MMES	Matrox MPEG-2 I-frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2640
			MP2v	Microsoft S-Mpeg 4 version 1 (MP2v)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2641
			MP42	Microsoft S-Mpeg 4 version 2 (MP42)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2642
			MP43	Microsoft S-Mpeg 4 version 3 (MP43)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2643
			MP4S	Microsoft S-Mpeg 4 version 3 (MP4S)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2644
			MP4V	FFmpeg MPEG-4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2645
			MPG1	FFmpeg MPEG 1/2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2646
			MPG2	FFmpeg MPEG 1/2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2647
			MPG3	FFmpeg DivX ;-) (MS MPEG-4 v3)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2648
			MPG4	Microsoft MPEG-4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2649
			MPGI	Sigma Designs MPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2650
			MPNG	PNG images decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2651
			MSS1	Microsoft Windows Screen Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2652
			MSZH	LCL (Lossless Codec Library) (www.geocities.co.jp/Playtown-Denei/2837/LRC.htm)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2653
			M261	Microsoft H.261
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2654
			M263	Microsoft H.263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2655
			M4S2	Microsoft Fully Compliant MPEG-4 v2 simple profile (M4S2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2656
			m4s2	Microsoft Fully Compliant MPEG-4 v2 simple profile (m4s2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2657
			MC12	ATI Motion Compensation Format (MC12)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2658
			MCAM	ATI Motion Compensation Format (MCAM)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2659
			MJ2C	Morgan Multimedia Motion JPEG2000
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2660
			mJPG	IBM Motion JPEG w/ Huffman Tables
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2661
			MJPG	Microsoft Motion JPEG DIB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2662
			MP42	Microsoft MPEG-4 (low-motion)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2663
			MP43	Microsoft MPEG-4 (fast-motion)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2664
			MP4S	Microsoft MPEG-4 (MP4S)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2665
			mp4s	Microsoft MPEG-4 (mp4s)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2666
			MPEG	Chromatic Research MPEG-1 Video I-Frame
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2667
			MPG4	Microsoft MPEG-4 Video High Speed Compressor
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2668
			MPGI	Sigma Designs MPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2669
			MRCA	FAST Multimedia Martin Regen Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2670
			MRLE	Microsoft Run Length Encoding
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2671
			MSVC	Microsoft Video 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2672
			MTX1	Matrox ?MTX1?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2673
			MTX2	Matrox ?MTX2?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2674
			MTX3	Matrox ?MTX3?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2675
			MTX4	Matrox ?MTX4?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2676
			MTX5	Matrox ?MTX5?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2677
			MTX6	Matrox ?MTX6?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2678
			MTX7	Matrox ?MTX7?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2679
			MTX8	Matrox ?MTX8?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2680
			MTX9	Matrox ?MTX9?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2681
			MV12	Motion Pixels Codec (old)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2682
			MWV1	Aware Motion Wavelets
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2683
			nAVI	SMR Codec (hack of Microsoft MPEG-4) (IRC #shadowrealm)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2684
			NT00	NewTek LightWave HDTV YUV w/ Alpha (www.newtek.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2685
			NUV1	NuppelVideo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2686
			NTN1	Nogatech Video Compression 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2687
			NVS0	nVidia GeForce Texture (NVS0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2688
			NVS1	nVidia GeForce Texture (NVS1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2689
			NVS2	nVidia GeForce Texture (NVS2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2690
			NVS3	nVidia GeForce Texture (NVS3)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2691
			NVS4	nVidia GeForce Texture (NVS4)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2692
			NVS5	nVidia GeForce Texture (NVS5)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2693
			NVT0	nVidia GeForce Texture (NVT0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2694
			NVT1	nVidia GeForce Texture (NVT1)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2695
			NVT2	nVidia GeForce Texture (NVT2)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2696
			NVT3	nVidia GeForce Texture (NVT3)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2697
			NVT4	nVidia GeForce Texture (NVT4)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2698
			NVT5	nVidia GeForce Texture (NVT5)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2699
			PIXL	MiroXL, Pinnacle PCTV
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2700
			PDVC	I-O Data Device Digital Video Capture DV codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2701
			PGVV	Radius Video Vision
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2702
			PHMO	IBM Photomotion
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2703
			PIM1	MPEG Realtime (Pinnacle Cards)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2704
			PIM2	Pegasus Imaging ?PIM2?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2705
			PIMJ	Pegasus Imaging Lossless JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2706
			PVEZ	Horizons Technology PowerEZ
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2707
			PVMM	PacketVideo Corporation MPEG-4
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2708
			PVW2	Pegasus Imaging Wavelet Compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2709
			Q1.0	Q-Team\'s QPEG 1.0 (www.q-team.de)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2710
			Q1.1	Q-Team\'s QPEG 1.1 (www.q-team.de)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2711
			QPEG	Q-Team QPEG 1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2712
			qpeq	Q-Team QPEG 1.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2713
			RGB 	Raw BGR32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2714
			RGBA	Raw RGB w/ Alpha
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2715
			RMP4	REALmagic MPEG-4 (unauthorized XVID copy) (www.sigmadesigns.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2716
			ROQV	Id RoQ File Video Decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2717
			RPZA	Quicktime Apple Video (RPZA)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2718
			RUD0	Rududu video codec (http://rududu.ifrance.com/rududu/)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2719
			RV10	RealVideo 1.0 (aka RealVideo 5.0)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2720
			RV13	RealVideo 1.0 (RV13)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2721
			RV20	RealVideo G2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2722
			RV30	RealVideo 8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2723
			RV40	RealVideo 9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2724
			RGBT	Raw RGB w/ Transparency
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2725
			RLE 	Microsoft Run Length Encoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2726
			RLE4	Run Length Encoded (4bpp, 16-color)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2727
			RLE8	Run Length Encoded (8bpp, 256-color)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2728
			RT21	Intel Indeo RealTime Video 2.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2729
			rv20	RealVideo G2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2730
			rv30	RealVideo 8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2731
			RVX 	Intel RDX (RVX )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2732
			SMC 	Apple Graphics (SMC )
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2733
			SP54	Logitech Sunplus Sp54 Codec for Mustek GSmart Mini 2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2734
			SPIG	Radius Spigot
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2735
			SVQ3	Sorenson Video 3 (Apple Quicktime 5)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2736
			s422	Tekram VideoCap C210 YUV 4:2:2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2737
			SDCC	Sun Communication Digital Camera Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2738
			SFMC	CrystalNet Surface Fitting Method
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2739
			SMSC	Radius SMSC
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2740
			SMSD	Radius SMSD
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2741
			smsv	WorldConnect Wavelet Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2742
			SPIG	Radius Spigot
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2743
			SPLC	Splash Studios ACM Audio Codec (www.splashstudios.net)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2744
			SQZ2	Microsoft VXTreme Video Codec V2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2745
			STVA	ST Microelectronics CMOS Imager Data (Bayer)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2746
			STVB	ST Microelectronics CMOS Imager Data (Nudged Bayer)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2747
			STVC	ST Microelectronics CMOS Imager Data (Bunched)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2748
			STVX	ST Microelectronics CMOS Imager Data (Extended CODEC Data Format)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2749
			STVY	ST Microelectronics CMOS Imager Data (Extended CODEC Data Format with Correction Data)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2750
			SV10	Sorenson Video R1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2751
			SVQ1	Sorenson Video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2752
			T420	Toshiba YUV 4:2:0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2753
			TM2A	Duck TrueMotion Archiver 2.0 (www.duck.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2754
			TVJP	Pinnacle/Truevision Targa 2000 board (TVJP)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2755
			TVMJ	Pinnacle/Truevision Targa 2000 board (TVMJ)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2756
			TY0N	Tecomac Low-Bit Rate Codec (www.tecomac.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2757
			TY2C	Trident Decompression Driver
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2758
			TLMS	TeraLogic Motion Intraframe Codec (TLMS)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2759
			TLST	TeraLogic Motion Intraframe Codec (TLST)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2760
			TM20	Duck TrueMotion 2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2761
			TM2X	Duck TrueMotion 2X
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2762
			TMIC	TeraLogic Motion Intraframe Codec (TMIC)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2763
			TMOT	Horizons Technology TrueMotion S
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2764
			tmot	Horizons TrueMotion Video Compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2765
			TR20	Duck TrueMotion RealTime 2.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2766
			TSCC	TechSmith Screen Capture Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2767
			TV10	Tecomac Low-Bit Rate Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2768
			TY2N	Trident ?TY2N?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2769
			U263	UB Video H.263/H.263+/H.263++ Decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2770
			UMP4	UB Video MPEG 4 (www.ubvideo.com)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2771
			UYNV	Nvidia UYVY packed 4:2:2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2772
			UYVP	Evans & Sutherland YCbCr 4:2:2 extended precision
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2773
			UCOD	eMajix.com ClearVideo
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2774
			ULTI	IBM Ultimotion
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2775
			UYVY	UYVY packed 4:2:2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2776
			V261	Lucent VX2000S
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2777
			VIFP	VFAPI Reader Codec (www.yks.ne.jp/~hori/)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2778
			VIV1	FFmpeg H263+ decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2779
			VIV2	Vivo H.263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2780
			VQC2	Vector-quantised codec 2 (research) http://eprints.ecs.soton.ac.uk/archive/00001310/01/VTC97-js.pdf)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2781
			VTLP	Alaris VideoGramPiX
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2782
			VYU9	ATI YUV (VYU9)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2783
			VYUY	ATI YUV (VYUY)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2784
			V261	Lucent VX2000S
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2785
			V422	Vitec Multimedia 24-bit YUV 4:2:2 Format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2786
			V655	Vitec Multimedia 16-bit YUV 4:2:2 Format
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2787
			VCR1	ATI Video Codec 1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2788
			VCR2	ATI Video Codec 2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2789
			VCR3	ATI VCR 3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2790
			VCR4	ATI VCR 4.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2791
			VCR5	ATI VCR 5.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2792
			VCR6	ATI VCR 6.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2793
			VCR7	ATI VCR 7.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2794
			VCR8	ATI VCR 8.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2795
			VCR9	ATI VCR 9.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2796
			VDCT	Vitec Multimedia Video Maker Pro DIB
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2797
			VDOM	VDOnet VDOWave
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2798
			VDOW	VDOnet VDOLive (H.263)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2799
			VDTZ	Darim Vison VideoTizer YUV
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2800
			VGPX	Alaris VideoGramPiX
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2801
			VIDS	Vitec Multimedia YUV 4:2:2 CCIR 601 for V422
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2802
			VIVO	Vivo H.263 v2.00
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2803
			vivo	Vivo H.263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2804
			VIXL	Miro/Pinnacle Video XL
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2805
			VLV1	VideoLogic/PURE Digital Videologic Capture
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2806
			VP30	On2 VP3.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2807
			VP31	On2 VP3.1
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2808
			VP6F	On2 TrueMotion VP6
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2809
			VX1K	Lucent VX1000S Video Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2810
			VX2K	Lucent VX2000S Video Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2811
			VXSP	Lucent VX1000SP Video Codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2812
			WBVC	Winbond W9960
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2813
			WHAM	Microsoft Video 1 (WHAM)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2814
			WINX	Winnov Software Compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2815
			WJPG	AverMedia Winbond JPEG
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2816
			WMV1	Windows Media Video V7
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2817
			WMV2	Windows Media Video V8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2818
			WMV3	Windows Media Video V9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2819
			WNV1	Winnov Hardware Compression
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2820
			XYZP	Extended PAL format XYZ palette (www.riff.org)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2821
			x263	Xirlink H.263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2822
			XLV0	NetXL Video Decoder
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2823
			XMPG	Xing MPEG (I-Frame only)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2824
			XVID	XviD MPEG-4 (www.xvid.org)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2825
			XXAN	?XXAN?
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2826
			YU92	Intel YUV (YU92)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2827
			YUNV	Nvidia Uncompressed YUV 4:2:2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2828
			YUVP	Extended PAL format YUV palette (www.riff.org)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2829
			Y211	YUV 2:1:1 Packed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2830
			Y411	YUV 4:1:1 Packed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2831
			Y41B	Weitek YUV 4:1:1 Planar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2832
			Y41P	Brooktree PC1 YUV 4:1:1 Packed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2833
			Y41T	Brooktree PC1 YUV 4:1:1 with transparency
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2834
			Y42B	Weitek YUV 4:2:2 Planar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2835
			Y42T	Brooktree UYUV 4:2:2 with transparency
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2836
			Y422	ADS Technologies Copy of UYVY used in Pyro WebCam firewire camera
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2837
			Y800	Simple, single Y plane for monochrome images
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2838
			Y8  	Grayscale video
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2839
			YC12	Intel YUV 12 codec
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2840
			YUV8	Winnov Caviar YUV8
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2841
			YUV9	Intel YUV9
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2842
			YUY2	Uncompressed YUV 4:2:2
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2843
			YUYV	Canopus YUV
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2844
			YV12	YVU12 Planar
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2845
			YVU9	Intel YVU9 Planar (8-bpp Y plane, followed by 8-bpp 4x4 U and V planes)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2846
			YVYU	YVYU 4:2:2 Packed
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2847
			ZLIB	Lossless Codec Library zlib compression (www.geocities.co.jp/Playtown-Denei/2837/LRC.htm)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2848
			ZPEG	Metheus Video Zipper
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2849
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2850
		*/
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2851
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2852
		return getid3_lib::EmbeddedLookup($fourcc, $begin, __LINE__, __FILE__, 'riff-fourcc');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2853
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2854
16
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2855
	/**
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2856
	 * @param string $byteword
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2857
	 * @param bool   $signed
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2858
	 *
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2859
	 * @return int|float|false
a86126ab1dd4 update enmi-conf
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
  2860
	 */
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2861
	private function EitherEndian2Int($byteword, $signed=false) {
5
5e2f62d02dcd upgrade wordpress + plugins
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
  2862
		if ($this->container == 'riff') {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2863
			return getid3_lib::LittleEndian2Int($byteword, $signed);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2864
		}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2865
		return getid3_lib::BigEndian2Int($byteword, false, $signed);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2866
	}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2867
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
  2868
}