changeset 21 | 48c4eec2b7e6 |
parent 19 | 3d72ae0968f4 |
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 } |