* @author Sven Vollbehr * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup * @license http://code.google.com/p/php-reader/wiki/License New BSD License * @version $Rev: 1 $ */ class MPEG_Audio_XINGHeader extends MPEG_Object { /** @var integer */ private $_frames = false; /** @var integer */ private $_bytes = false; /** @var Array */ private $_toc = array(); /** @var integer */ private $_qualityIndicator = false; /** * Constructs the class with given parameters and reads object related data * from the bitstream. * * @param Reader $reader The reader object. * @param Array $options Array of options. */ public function __construct($reader, &$options = array()) { parent::__construct($reader, $options); $flags = $reader->readUInt32BE(); if (Twiddling::testAnyBits($flags, 0x1)) $this->_frames = $this->_reader->readUInt32BE(); if (Twiddling::testAnyBits($flags, 0x2)) $this->_bytes = $this->_reader->readUInt32BE(); if (Twiddling::testAnyBits($flags, 0x4)) $this->_toc = array_merge(unpack("C*", $this->_reader->read(100))); if (Twiddling::testAnyBits($flags, 0x8)) $this->_qualityIndicator = $this->_reader->readUInt32BE(); } /** * Returns the number of frames in the file. * * @return integer */ public function getFrames() { return $this->_frames; } /** * Returns the number of bytes in the file. * * @return integer */ public function getBytes() { return $this->_bytes; } /** * Returns the table of contents array. The returned array has a fixed amount * of 100 seek points to the file. * * @return Array */ public function getToc() { return $this->_toc; } /** * Returns the quality indicator. The indicator is from 0 (best quality) to * 100 (worst quality). * * @return integer */ public function getQualityIndicator() { return $this->_qualityIndicator; } /** * Returns the length of the header in bytes. * * @return integer */ public function getLength() { return 4 + ($this->_frames !== false ? 4 : 0) + ($this->_bytes !== false ? 4 : 0) + (empty($this->_toc) ? 0 : 100) + ($this->_qualityIndicator !== false ? 4 : 0); } }