wp/wp-includes/ID3/module.audio.ogg.php
changeset 21 48c4eec2b7e6
parent 19 3d72ae0968f4
equal deleted inserted replaced
20:7b1b88e27a20 21:48c4eec2b7e6
   184 				$info['video']['frame_rate'] = (float) $info['ogg']['pageheader']['theora']['frame_rate_numerator'] / $info['ogg']['pageheader']['theora']['frame_rate_denominator'];
   184 				$info['video']['frame_rate'] = (float) $info['ogg']['pageheader']['theora']['frame_rate_numerator'] / $info['ogg']['pageheader']['theora']['frame_rate_denominator'];
   185 			}
   185 			}
   186 			if ($info['ogg']['pageheader']['theora']['pixel_aspect_denominator'] > 0) {
   186 			if ($info['ogg']['pageheader']['theora']['pixel_aspect_denominator'] > 0) {
   187 				$info['video']['pixel_aspect_ratio'] = (float) $info['ogg']['pageheader']['theora']['pixel_aspect_numerator'] / $info['ogg']['pageheader']['theora']['pixel_aspect_denominator'];
   187 				$info['video']['pixel_aspect_ratio'] = (float) $info['ogg']['pageheader']['theora']['pixel_aspect_numerator'] / $info['ogg']['pageheader']['theora']['pixel_aspect_denominator'];
   188 			}
   188 			}
   189 			$this->warning('Ogg Theora (v3) not fully supported in this version of getID3 ['.$this->getid3->version().'] -- bitrate, playtime and all audio data are currently unavailable');
   189 $this->warning('Ogg Theora (v3) not fully supported in this version of getID3 ['.$this->getid3->version().'] -- bitrate, playtime and all audio data are currently unavailable');
   190 
   190 
   191 
   191 
   192 		} elseif (substr($filedata, 0, 8) == "fishead\x00") {
   192 		} elseif (substr($filedata, 0, 8) == "fishead\x00") {
   193 
   193 
   194 			// Ogg Skeleton version 3.0 Format Specification
   194 			// Ogg Skeleton version 3.0 Format Specification
   208 			$filedataoffset += 8;
   208 			$filedataoffset += 8;
   209 			$info['ogg']['skeleton']['fishead']['raw']['utc']                          = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 20));
   209 			$info['ogg']['skeleton']['fishead']['raw']['utc']                          = getid3_lib::LittleEndian2Int(substr($filedata, $filedataoffset, 20));
   210 			$filedataoffset += 20;
   210 			$filedataoffset += 20;
   211 
   211 
   212 			$info['ogg']['skeleton']['fishead']['version']          = $info['ogg']['skeleton']['fishead']['raw']['version_major'].'.'.$info['ogg']['skeleton']['fishead']['raw']['version_minor'];
   212 			$info['ogg']['skeleton']['fishead']['version']          = $info['ogg']['skeleton']['fishead']['raw']['version_major'].'.'.$info['ogg']['skeleton']['fishead']['raw']['version_minor'];
   213 			$info['ogg']['skeleton']['fishead']['presentationtime'] = $info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator'] / $info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator'];
   213 			$info['ogg']['skeleton']['fishead']['presentationtime'] = getid3_lib::SafeDiv($info['ogg']['skeleton']['fishead']['raw']['presentationtime_numerator'], $info['ogg']['skeleton']['fishead']['raw']['presentationtime_denominator']);
   214 			$info['ogg']['skeleton']['fishead']['basetime']         = $info['ogg']['skeleton']['fishead']['raw']['basetime_numerator']         / $info['ogg']['skeleton']['fishead']['raw']['basetime_denominator'];
   214 			$info['ogg']['skeleton']['fishead']['basetime']         = getid3_lib::SafeDiv($info['ogg']['skeleton']['fishead']['raw']['basetime_numerator'],         $info['ogg']['skeleton']['fishead']['raw']['basetime_denominator']);
   215 			$info['ogg']['skeleton']['fishead']['utc']              = $info['ogg']['skeleton']['fishead']['raw']['utc'];
   215 			$info['ogg']['skeleton']['fishead']['utc']              = $info['ogg']['skeleton']['fishead']['raw']['utc'];
   216 
   216 
   217 
   217 
   218 			$counter = 0;
   218 			$counter = 0;
   219 			do {
   219 			do {
   286 			if (!empty($info['flac']['STREAMINFO']['sample_rate'])) {
   286 			if (!empty($info['flac']['STREAMINFO']['sample_rate'])) {
   287 				$info['audio']['bitrate_mode']    = 'vbr';
   287 				$info['audio']['bitrate_mode']    = 'vbr';
   288 				$info['audio']['sample_rate']     = $info['flac']['STREAMINFO']['sample_rate'];
   288 				$info['audio']['sample_rate']     = $info['flac']['STREAMINFO']['sample_rate'];
   289 				$info['audio']['channels']        = $info['flac']['STREAMINFO']['channels'];
   289 				$info['audio']['channels']        = $info['flac']['STREAMINFO']['channels'];
   290 				$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
   290 				$info['audio']['bits_per_sample'] = $info['flac']['STREAMINFO']['bits_per_sample'];
   291 				$info['playtime_seconds']         = $info['flac']['STREAMINFO']['samples_stream'] / $info['flac']['STREAMINFO']['sample_rate'];
   291 				$info['playtime_seconds']         = getid3_lib::SafeDiv($info['flac']['STREAMINFO']['samples_stream'], $info['flac']['STREAMINFO']['sample_rate']);
   292 			}
   292 			}
   293 
   293 
   294 		} else {
   294 		} else {
   295 
   295 
   296 			$this->error('Expecting one of "vorbis", "Speex", "OpusHead", "vorbis", "fishhead", "theora", "fLaC" identifier strings, found "'.substr($filedata, 0, 8).'"');
   296 			$this->error('Expecting one of "vorbis", "Speex", "OpusHead", "vorbis", "fishhead", "theora", "fLaC" identifier strings, found "'.substr($filedata, 0, 8).'"');
   357 				if ($info['ogg']['samples'] == 0) {
   357 				if ($info['ogg']['samples'] == 0) {
   358 					$this->error('Corrupt Ogg file: eos.number of samples == zero');
   358 					$this->error('Corrupt Ogg file: eos.number of samples == zero');
   359 					return false;
   359 					return false;
   360 				}
   360 				}
   361 				if (!empty($info['audio']['sample_rate'])) {
   361 				if (!empty($info['audio']['sample_rate'])) {
   362 					$info['ogg']['bitrate_average'] = (($info['avdataend'] - $info['avdataoffset']) * 8) / ($info['ogg']['samples'] / $info['audio']['sample_rate']);
   362 					$info['ogg']['bitrate_average'] = (($info['avdataend'] - $info['avdataoffset']) * 8) * $info['audio']['sample_rate'] / $info['ogg']['samples'];
   363 				}
   363 				}
   364 			}
   364 			}
   365 
   365 
   366 		}
   366 		}
   367 
   367 
   532 		$oggheader = array();
   532 		$oggheader = array();
   533 		$oggheader['page_start_offset'] = $this->ftell(); // where we started from in the file
   533 		$oggheader['page_start_offset'] = $this->ftell(); // where we started from in the file
   534 
   534 
   535 		$filedata = $this->fread($this->getid3->fread_buffer_size());
   535 		$filedata = $this->fread($this->getid3->fread_buffer_size());
   536 		$filedataoffset = 0;
   536 		$filedataoffset = 0;
   537 		while ((substr($filedata, $filedataoffset++, 4) != 'OggS')) {
   537 		while (substr($filedata, $filedataoffset++, 4) != 'OggS') {
   538 			if (($this->ftell() - $oggheader['page_start_offset']) >= $this->getid3->fread_buffer_size()) {
   538 			if (($this->ftell() - $oggheader['page_start_offset']) >= $this->getid3->fread_buffer_size()) {
   539 				// should be found before here
   539 				// should be found before here
   540 				return false;
   540 				return false;
   541 			}
   541 			}
   542 			if ((($filedataoffset + 28) > strlen($filedata)) || (strlen($filedata) < 28)) {
   542 			if (($filedataoffset + 28) > strlen($filedata)) {
   543 				if ($this->feof() || (($filedata .= $this->fread($this->getid3->fread_buffer_size())) === '')) {
   543 				if ($this->feof() || (($filedata .= $this->fread($this->getid3->fread_buffer_size())) === '')) {
   544 					// get some more data, unless eof, in which case fail
   544 					// get some more data, unless eof, in which case fail
   545 					return false;
   545 					return false;
   546 				}
   546 				}
   547 			}
   547 			}