Lines Matching refs:ThisFileInfo

29 	function getid3_mp3(&$fd, &$ThisFileInfo) {  argument
31 if (!$this->getOnlyMPEGaudioInfo($fd, $ThisFileInfo, $ThisFileInfo['avdataoffset'])) {
33 $ThisFileInfo['error'][] = 'Rescanning file in BruteForce mode';
34 $this->getOnlyMPEGaudioInfoBruteForce($fd, $ThisFileInfo);
39 if (isset($ThisFileInfo['mpeg']['audio']['bitrate_mode'])) {
40 …$ThisFileInfo['audio']['bitrate_mode'] = strtolower($ThisFileInfo['mpeg']['audio']['bitrate_mode']…
43ThisFileInfo['id3v2']['headerlength']) && ($ThisFileInfo['avdataoffset'] > $ThisFileInfo['id3v2'][…
46 if (isset($ThisFileInfo['id3v2']['headerlength'])) {
47 ….= '(ID3v2 header ends at '.$ThisFileInfo['id3v2']['headerlength'].', then '.($ThisFileInfo['avdat…
51 $synchoffsetwarning .= 'synch detected at '.$ThisFileInfo['avdataoffset'].')';
52 if ($ThisFileInfo['audio']['bitrate_mode'] == 'cbr') {
54 … (!empty($ThisFileInfo['id3v2']['headerlength']) && (($ThisFileInfo['avdataoffset'] - $ThisFileInf…
57 $ThisFileInfo['audio']['codec'] = 'LAME';
60 …} elseif (empty($ThisFileInfo['id3v2']['headerlength']) && ($ThisFileInfo['avdataoffset'] == $This…
63 $ThisFileInfo['audio']['codec'] = 'LAME';
69 $ThisFileInfo['warning'][] = $synchoffsetwarning;
73 if (isset($ThisFileInfo['mpeg']['audio']['LAME'])) {
74 $ThisFileInfo['audio']['codec'] = 'LAME';
75 if (!empty($ThisFileInfo['mpeg']['audio']['LAME']['long_version'])) {
76 …$ThisFileInfo['audio']['encoder'] = rtrim($ThisFileInfo['mpeg']['audio']['LAME']['long_version'], …
77 } elseif (!empty($ThisFileInfo['mpeg']['audio']['LAME']['short_version'])) {
78 …$ThisFileInfo['audio']['encoder'] = rtrim($ThisFileInfo['mpeg']['audio']['LAME']['short_version'],…
82 …ty($CurrentDataLAMEversionString) ? $CurrentDataLAMEversionString : @$ThisFileInfo['audio']['encod…
92 …$PossibleLAMEversionStringOffset = $ThisFileInfo['avdataend'] - $PossiblyLongerLAMEversion_FrameLe…
106 … if (strlen($PossiblyLongerLAMEversion_NewString) > strlen(@$ThisFileInfo['audio']['encoder'])) {
107 $ThisFileInfo['audio']['encoder'] = $PossiblyLongerLAMEversion_NewString;
112 if (!empty($ThisFileInfo['audio']['encoder'])) {
113 $ThisFileInfo['audio']['encoder'] = rtrim($ThisFileInfo['audio']['encoder'], "\x00 ");
116 switch (@$ThisFileInfo['mpeg']['audio']['layer']) {
119 $ThisFileInfo['audio']['dataformat'] = 'mp'.$ThisFileInfo['mpeg']['audio']['layer'];
122 if ($ThisFileInfo['fileformat'] == 'mp3') {
123 switch ($ThisFileInfo['audio']['dataformat']) {
127 $ThisFileInfo['fileformat'] = $ThisFileInfo['audio']['dataformat'];
131 …$ThisFileInfo['warning'][] = 'Expecting [audio][dataformat] to be mp1/mp2/mp3 when fileformat == m…
136 if (empty($ThisFileInfo['fileformat'])) {
137 unset($ThisFileInfo['fileformat']);
138 unset($ThisFileInfo['audio']['bitrate_mode']);
139 unset($ThisFileInfo['avdataoffset']);
140 unset($ThisFileInfo['avdataend']);
144 $ThisFileInfo['mime_type'] = 'audio/mpeg';
145 $ThisFileInfo['audio']['lossless'] = false;
148 …if (!isset($ThisFileInfo['playtime_seconds']) && isset($ThisFileInfo['audio']['bitrate']) && ($Thi…
149 …$ThisFileInfo['playtime_seconds'] = ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset']) *…
152 $ThisFileInfo['audio']['encoder_options'] = $this->GuessEncoderOptions($ThisFileInfo);
158 function GuessEncoderOptions(&$ThisFileInfo) { argument
160 if (!empty($ThisFileInfo['mpeg']['audio'])) {
161 $thisfile_mpeg_audio = &$ThisFileInfo['mpeg']['audio'];
245 } elseif ($ThisFileInfo['audio']['bitrate_mode'] == 'vbr') {
255 } elseif ($ThisFileInfo['audio']['bitrate_mode'] == 'cbr') {
257 …$encoder_options = strtoupper($ThisFileInfo['audio']['bitrate_mode']).ceil($ThisFileInfo['audio'][…
261 $encoder_options = strtoupper($ThisFileInfo['audio']['bitrate_mode']);
269 } elseif (!empty($ThisFileInfo['audio']['bitrate'])) {
271 if ($ThisFileInfo['audio']['bitrate_mode'] == 'cbr') {
272 …$encoder_options = strtoupper($ThisFileInfo['audio']['bitrate_mode']).ceil($ThisFileInfo['audio'][…
274 $encoder_options = strtoupper($ThisFileInfo['audio']['bitrate_mode']);
392 …if (empty($encoder_options) && !empty($ThisFileInfo['audio']['bitrate']) && !empty($ThisFileInfo['…
394 $encoder_options = strtoupper($ThisFileInfo['audio']['bitrate_mode']);
401 …function decodeMPEGaudioHeader($fd, $offset, &$ThisFileInfo, $recursivesearch=true, $ScanAsCBR=fal… argument
420 if ($offset >= $ThisFileInfo['avdataend']) {
421 $ThisFileInfo['error'][] = 'end of file encounter looking for MPEG synch';
453 if (!isset($ThisFileInfo['mpeg']['audio'])) {
454 $ThisFileInfo['mpeg']['audio'] = array();
456 $thisfile_mpeg_audio = &$ThisFileInfo['mpeg']['audio'];
462 $ThisFileInfo['error'][] = 'Invalid MPEG audio header at offset '.$offset;
481 $ThisFileInfo['audio']['channels'] = $thisfile_mpeg_audio['channels'];
482 $ThisFileInfo['audio']['sample_rate'] = $thisfile_mpeg_audio['sample_rate'];
492 …$ThisFileInfo['warning'][] = 'Invalid bitrate index (15), this is a known bug in free-format MP3s …
498 if (($thisfile_mpeg_audio['bitrate'] == 'free') && ($offset == $ThisFileInfo['avdataoffset'])) {
507 $ThisFileInfo['audio']['dataformat'] = 'mp2';
514 …$ThisFileInfo['error'][] = $thisfile_mpeg_audio['bitrate'].'kbps not allowed in Layer 2, '.$thisfi…
525 …$ThisFileInfo['error'][] = intval(round($thisfile_mpeg_audio['bitrate'] / 1000)).'kbps not allowed…
535 if ($ThisFileInfo['audio']['sample_rate'] > 0) {
536 …thisfile_mpeg_audio['layer'], (int) $thisfile_mpeg_audio['padding'], $ThisFileInfo['audio']['sampl…
542 $ThisFileInfo['audio']['bitrate'] = $thisfile_mpeg_audio['bitrate'];
547 $ThisFileInfo['error'][] = 'Frame at offset('.$offset.') is has an invalid frame length.';
564 $ThisFileInfo['audio']['codec'] = 'Fraunhofer';
657 …$ThisFileInfo['audio']['bitrate'] = ($framelengthfloat / 4) * $thisfile_mpeg_audio['sample_rate'] …
661 …$ThisFileInfo['audio']['bitrate'] = $framelengthfloat * $thisfile_mpeg_audio['sample_rate'] * (2 /…
762 …$ThisFileInfo['replay_gain']['track']['peak'] = $thisfile_mpeg_audio_lame_RGAD['peak_amplitude'];
764 …$ThisFileInfo['replay_gain']['track']['originator'] = $thisfile_mpeg_audio_lame_RGAD_track['origin…
765 …$ThisFileInfo['replay_gain']['track']['adjustment'] = $thisfile_mpeg_audio_lame_RGAD_track['gain_d…
780 …$ThisFileInfo['replay_gain']['album']['peak'] = $thisfile_mpeg_audio_lame_RGAD['peak_amplitude'];
782 …$ThisFileInfo['replay_gain']['album']['originator'] = $thisfile_mpeg_audio_lame_RGAD_album['origin…
783 …$ThisFileInfo['replay_gain']['album']['adjustment'] = $thisfile_mpeg_audio_lame_RGAD_album['gain_d…
839 …$ThisFileInfo['warning'][] = 'Unknown LAME preset used ('.$thisfile_mpeg_audio_lame['preset_used_i…
862 $ThisFileInfo['audio']['bitrate'] = $thisfile_mpeg_audio['bitrate'];
878 … if (getid3_mp3::RecursiveFrameScanning($fd, $ThisFileInfo, $offset, $nextframetestoffset, true)) {
883 …$ThisFileInfo['warning'][] = 'VBR file with no VBR header. Bitrate values calculated from actual f…
891 …rOfAudioBytes > 0) && ($ExpectedNumberOfAudioBytes != ($ThisFileInfo['avdataend'] - $ThisFileInfo[…
892 if ($ExpectedNumberOfAudioBytes > ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset'])) {
893 …if (($ExpectedNumberOfAudioBytes - ($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset'])) =…
894 …$ThisFileInfo['warning'][] = 'Last byte of data truncated (this is a known bug in Meracl ID3 Tag W…
896ThisFileInfo['warning'][] = 'Probable truncated file: expecting '.$ExpectedNumberOfAudioBytes.' by…
899 …if ((($ThisFileInfo['avdataend'] - $ThisFileInfo['avdataoffset']) - $ExpectedNumberOfAudioBytes) =…
905 $ThisFileInfo['avdataend']--;
911ThisFileInfo['warning'][] = 'Too much data in file: expecting '.$ExpectedNumberOfAudioBytes.' byte…
916 if (($thisfile_mpeg_audio['bitrate'] == 'free') && empty($ThisFileInfo['audio']['bitrate'])) {
917 if (($offset == $ThisFileInfo['avdataoffset']) && empty($thisfile_mpeg_audio['VBR_frames'])) {
918 $framebytelength = getid3_mp3::FreeFormatFrameLength($fd, $offset, $ThisFileInfo, true);
923 …$ThisFileInfo['audio']['bitrate'] = ((($framebytelength / 4) - intval($thisfile_mpeg_audio['paddin…
926 …$ThisFileInfo['audio']['bitrate'] = (($framebytelength - intval($thisfile_mpeg_audio['padding'])) …
929 …$ThisFileInfo['error'][] = 'Error calculating frame length of free-format MP3 without Xing/LAME he…
939 …peg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']) * 8) * ($ThisFileInfo['audio']['sampl…
941 …peg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']) * 8) * ($ThisFileInfo['audio']['sampl…
943 …peg_audio['VBR_bytes'] / $thisfile_mpeg_audio['VBR_frames']) * 8) * ($ThisFileInfo['audio']['sampl…
946 $ThisFileInfo['audio']['bitrate'] = $thisfile_mpeg_audio['VBR_bitrate'];
958 …if (!getid3_mp3::RecursiveFrameScanning($fd, $ThisFileInfo, $offset, $nextframetestoffset, $ScanAs…
1070 …function RecursiveFrameScanning(&$fd, &$ThisFileInfo, &$offset, &$nextframetestoffset, $ScanAsCBR)… argument
1073 if (($nextframetestoffset + 4) >= $ThisFileInfo['avdataend']) {
1078 …array('error'=>'', 'warning'=>'', 'avdataend'=>$ThisFileInfo['avdataend'], 'avdataoffset'=>$ThisFi…
1083 …itrate']) || !isset($ThisFileInfo['mpeg']['audio']['bitrate']) || ($nextframetestarray['mpeg']['au…
1093 $ThisFileInfo['error'][] = 'Frame at offset ('.$offset.') is has an invalid frame length.';
1100 …$ThisFileInfo['error'][] = 'Frame at offset ('.$offset.') is valid, but the next one at ('.$nextfr…
1108 function FreeFormatFrameLength($fd, $offset, &$ThisFileInfo, $deepscan=false) { argument
1141 …$ThisFileInfo['error'][] = 'Cannot find next free-format synch pattern ('.getid3_lib::PrintHexByte…
1144 …$ThisFileInfo['warning'][] = 'ModeExtension varies between first frame and other frames (known fre…
1145 $ThisFileInfo['audio']['codec'] = 'LAME';
1146 $ThisFileInfo['audio']['encoder'] = 'LAME3.88';
1156 while ($nextoffset < ($ThisFileInfo['avdataend'] - 6)) {
1171 …$ThisFileInfo['error'][] = 'Did not find expected free-format sync pattern at offset '.$nextoffset;
1183 function getOnlyMPEGaudioInfoBruteForce($fd, &$ThisFileInfo) { argument
1207 fseek($fd, $ThisFileInfo['avdataoffset'], SEEK_SET);
1209 $previousvalidframe = $ThisFileInfo['avdataoffset'];
1210 while (ftell($fd) < $ThisFileInfo['avdataend']) {
1278 $ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = $Distribution['bitrate'];
1279 $ThisFileInfo['mpeg']['audio']['frequency_distribution'] = $Distribution['frequency'];
1280 $ThisFileInfo['mpeg']['audio']['layer_distribution'] = $Distribution['layer'];
1281 $ThisFileInfo['mpeg']['audio']['version_distribution'] = $Distribution['version'];
1282 $ThisFileInfo['mpeg']['audio']['padding_distribution'] = $Distribution['padding'];
1284 $ThisFileInfo['error'][] = 'Corrupt file - more than one MPEG version detected';
1287 $ThisFileInfo['error'][] = 'Corrupt file - more than one MPEG layer detected';
1290 $ThisFileInfo['error'][] = 'Corrupt file - more than one MPEG sample rate detected';
1300 $ThisFileInfo['mpeg']['audio']['frame_count'] = array_sum($Distribution['bitrate']);
1301 if ($ThisFileInfo['mpeg']['audio']['frame_count'] == 0) {
1302 $ThisFileInfo['error'][] = 'no MPEG audio frames found';
1305 …$ThisFileInfo['mpeg']['audio']['bitrate'] = ($bittotal / $ThisFileInfo['mpeg']['audio']['fram…
1306 …$ThisFileInfo['mpeg']['audio']['bitrate_mode'] = ((count($Distribution['bitrate']) > 0) ? 'vbr' : …
1307 …$ThisFileInfo['mpeg']['audio']['sample_rate'] = getid3_lib::array_max($Distribution['frequency'],…
1309 $ThisFileInfo['audio']['bitrate'] = $ThisFileInfo['mpeg']['audio']['bitrate'];
1310 $ThisFileInfo['audio']['bitrate_mode'] = $ThisFileInfo['mpeg']['audio']['bitrate_mode'];
1311 $ThisFileInfo['audio']['sample_rate'] = $ThisFileInfo['mpeg']['audio']['sample_rate'];
1312 $ThisFileInfo['audio']['dataformat'] = 'mp'.getid3_lib::array_max($Distribution['layer'], true);
1313 $ThisFileInfo['fileformat'] = $ThisFileInfo['audio']['dataformat'];
1319 function getOnlyMPEGaudioInfo($fd, &$ThisFileInfo, $avdataoffset, $BitrateHistogram=false) { argument
1334 $sync_seek_buffer_size = min(128 * 1024, $ThisFileInfo['avdataend'] - $avdataoffset);
1340 if ((($avdataoffset + $SynchSeekOffset) < $ThisFileInfo['avdataend']) && !feof($fd)) {
1344 …$ThisFileInfo['error'][] = 'Could not find valid MPEG audio synch within the first '.round($sync_s…
1345 if (isset($ThisFileInfo['audio']['bitrate'])) {
1346 unset($ThisFileInfo['audio']['bitrate']);
1348 if (isset($ThisFileInfo['mpeg']['audio'])) {
1349 unset($ThisFileInfo['mpeg']['audio']);
1351 if (empty($ThisFileInfo['mpeg'])) {
1352 unset($ThisFileInfo['mpeg']);
1358 … $ThisFileInfo['error'][] = 'Could not find valid MPEG audio synch before end of file';
1359 if (isset($ThisFileInfo['audio']['bitrate'])) {
1360 unset($ThisFileInfo['audio']['bitrate']);
1362 if (isset($ThisFileInfo['mpeg']['audio'])) {
1363 unset($ThisFileInfo['mpeg']['audio']);
1365 …if (isset($ThisFileInfo['mpeg']) && (!is_array($ThisFileInfo['mpeg']) || (count($ThisFileInfo['mpe…
1366 unset($ThisFileInfo['mpeg']);
1373 $ThisFileInfo['error'][] = 'Could not find valid MPEG synch before end of file';
1379 if (!isset($FirstFrameThisfileInfo) && !isset($ThisFileInfo['mpeg']['audio'])) {
1380 $FirstFrameThisfileInfo = $ThisFileInfo;
1389 $dummy = $ThisFileInfo; // only overwrite real data if valid header found
1391 $ThisFileInfo = $dummy;
1392 $ThisFileInfo['avdataoffset'] = $avdataoffset + $SynchSeekOffset;
1393 switch ($ThisFileInfo['fileformat']) {
1398 $ThisFileInfo['fileformat'] = 'mp3';
1399 $ThisFileInfo['audio']['dataformat'] = 'mp3';
1403 …if (!(abs($ThisFileInfo['audio']['bitrate'] - $FirstFrameThisfileInfo['audio']['bitrate']) <= 1)) {
1406 $ThisFileInfo = $FirstFrameThisfileInfo;
1407 $ThisFileInfo['avdataoffset'] = $FirstFrameAVDataOffset;
1408 $ThisFileInfo['fileformat'] = 'mp3';
1409 $ThisFileInfo['audio']['dataformat'] = 'mp3';
1410 $dummy = $ThisFileInfo;
1416 $ThisFileInfo = $dummy;
1417 $ThisFileInfo['avdataoffset'] = $GarbageOffsetEnd;
1418 …$ThisFileInfo['warning'][] = 'apparently-valid VBR header not used because could not find '.GETID3…
1422 …$ThisFileInfo['warning'][] = 'using data from VBR header even though could not find '.GETID3_MP3_V…
1427 …if (isset($ThisFileInfo['mpeg']['audio']['bitrate_mode']) && ($ThisFileInfo['mpeg']['audio']['bitr…
1434 …$ThisFileInfo['mpeg']['audio']['stereo_distribution'] = array('stereo'=>0, 'joint stereo'=>0, 'du…
1435 $ThisFileInfo['mpeg']['audio']['version_distribution'] = array('1'=>0, '2'=>0, '2.5'=>0);
1437 if ($ThisFileInfo['mpeg']['audio']['version'] == '1') {
1438 if ($ThisFileInfo['mpeg']['audio']['layer'] == 3) {
1439 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 40000=>0, 4800…
1440 } elseif ($ThisFileInfo['mpeg']['audio']['layer'] == 2) {
1441 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 48000=>0, 5600…
1442 } elseif ($ThisFileInfo['mpeg']['audio']['layer'] == 1) {
1443 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 64000=>0, 9600…
1445 } elseif ($ThisFileInfo['mpeg']['audio']['layer'] == 1) {
1446 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 32000=>0, 48000=>0, 5600…
1448 …$ThisFileInfo['mpeg']['audio']['bitrate_distribution'] = array('free'=>0, 8000=>0, 16000=>0, 24000…
1451 …('error'=>$ThisFileInfo['error'], 'warning'=>$ThisFileInfo['warning'], 'avdataend'=>$ThisFileInfo[…
1452 $synchstartoffset = $ThisFileInfo['avdataoffset'];
1463 @$ThisFileInfo['mpeg']['audio']['bitrate_distribution'][$thisframebitrate]++;
1464 … @$ThisFileInfo['mpeg']['audio']['stereo_distribution'][$dummy['mpeg']['audio']['channelmode']]++;
1465 … @$ThisFileInfo['mpeg']['audio']['version_distribution'][$dummy['mpeg']['audio']['version']]++;
1471 … $ThisFileInfo['warning'][] = 'Found '.$SynchErrorsFound.' synch errors in histogram analysis';
1477 …foreach ($ThisFileInfo['mpeg']['audio']['bitrate_distribution'] as $bitratevalue => $bitratecount)…
1484 $ThisFileInfo['error'][] = 'Corrupt MP3 file: framecounter == zero';
1487 $ThisFileInfo['mpeg']['audio']['frame_count'] = $framecounter;
1488 $ThisFileInfo['mpeg']['audio']['bitrate'] = ($bittotal / $framecounter);
1490 $ThisFileInfo['audio']['bitrate'] = $ThisFileInfo['mpeg']['audio']['bitrate'];
1495 …foreach ($ThisFileInfo['mpeg']['audio']['bitrate_distribution'] as $bitrate_value => $bitrate_coun…
1501 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'vbr';
1503 $ThisFileInfo['mpeg']['audio']['bitrate_mode'] = 'cbr';
1505 $ThisFileInfo['audio']['bitrate_mode'] = $ThisFileInfo['mpeg']['audio']['bitrate_mode'];
1514 if (($avdataoffset + $SynchSeekOffset) >= $ThisFileInfo['avdataend']) {
1517 if (empty($ThisFileInfo['mpeg']['audio'])) {
1519 $ThisFileInfo['error'][] = 'could not find valid MPEG synch before end of file';
1520 if (isset($ThisFileInfo['audio']['bitrate'])) {
1521 unset($ThisFileInfo['audio']['bitrate']);
1523 if (isset($ThisFileInfo['mpeg']['audio'])) {
1524 unset($ThisFileInfo['mpeg']['audio']);
1526 …if (isset($ThisFileInfo['mpeg']) && (!is_array($ThisFileInfo['mpeg']) || empty($ThisFileInfo['mpeg…
1527 unset($ThisFileInfo['mpeg']);
1536 $ThisFileInfo['audio']['channels'] = $ThisFileInfo['mpeg']['audio']['channels'];
1537 $ThisFileInfo['audio']['channelmode'] = $ThisFileInfo['mpeg']['audio']['channelmode'];
1538 $ThisFileInfo['audio']['sample_rate'] = $ThisFileInfo['mpeg']['audio']['sample_rate'];