Chunk Offset Box table gives the index of each chunk into the * containing file. There are two variants, permitting the use of 32-bit or * 64-bit offsets. The latter is useful when managing very large presentations. * At most one of these variants will occur in any single instance of a sample * table. * * Offsets are file offsets, not the offset into any box within the file (e.g. * {@link ISO14496_Box_MDAT Media Data Box}). This permits referring to media * data in files without any box structure. It does also mean that care must be * taken when constructing a self-contained ISO file with its metadata * ({@link ISO14496_Box_MOOV Movie Box}) at the front, as the size of the * {@link ISO14496_Box_MOOV Movie Box} will affect the chunk offsets to the * media data. * * This box variant contains 64-bit offsets. * * @package php-reader * @subpackage ISO 14496 * @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: 92 $ */ final class ISO14496_Box_CO64 extends ISO14496_Box_Full { /** @var Array */ private $_chunkOffsetTable = array(); /** * Constructs the class with given parameters and reads box related data from * the ISO Base Media file. * * @param Reader $reader The reader object. */ public function __construct($reader, &$options = array()) { parent::__construct($reader, $options); $entryCount = $this->_reader->readUInt32BE(); $data = $this->_reader->read ($this->getOffset() + $this->getSize() - $this->_reader->getOffset()); for ($i = 1; $i <= $entryCount; $i++) $this->_chunkOffsetTable[$i] = Transform::fromInt64BE(substr($data, ($i - 1) * 8, 8)); } /** * Returns an array of values. Each entry has the entry number as its index * and a 64 bit integer that gives the offset of the start of a chunk into * its containing media file as its value. * * @return Array */ public function getChunkOffsetTable() { return $this->_chunkOffsetTable; } /** * Sets an array of chunk offsets. Each entry must have the entry number as * its index and a 64 bit integer that gives the offset of the start of a * chunk into its containing media file as its value. * * @param Array $chunkOffsetTable The chunk offset array. */ public function setChunkOffsetTable($chunkOffsetTable) { $this->_chunkOffsetTable = $chunkOffsetTable; } /** * Returns the box raw data. * * @return string */ public function __toString($data = "") { $data = Transform::toUInt32BE(count($this->_chunkOffsetTable)); foreach ($this->_chunkOffsetTable as $chunkOffset) $data .= Transform::toInt64BE($chunkOffset); return parent::__toString($data); } }