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