Track Fragment Header Box to * each track; and a track fragment can add zero or more contiguous runs of * samples. The track fragment header sets up information and defaults used for * those runs of samples. * * @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_TFHD extends ISO14496_Box_Full { /** @var integer */ private $_trackId; /** @var integer */ private $_defaultSampleDescriptionIndex; /** @var integer */ private $_defaultSampleDuration; /** @var integer */ private $_defaultSampleSize; /** @var integer */ private $_defaultSampleFlags; /** * Indicates indicates the presence of the baseDataOffset field. This provides * an explicit anchor for the data offsets in each track run (see below). If * not provided, the base-dataoffset for the first track in the movie fragment * is the position of the first byte of the enclosing Movie Fragment Box, and * for second and subsequent track fragments, the default is the end of the * data defined by the preceding fragment. Fragments inheriting their offset * in this way must all use the same data-reference (i.e., the data for these * tracks must be in the same file). */ const BASE_DATA_OFFSET = 0x1; /** * Indicates the presence of the sampleDescriptionIndex field, which * over-rides, in this fragment, the default set up in the * {@link ISO14496_Box_TREX Track Extends Box}. */ const SAMPLE_DESCRIPTION_INDEX = 0x2; /** Indicates the precense of the defaultSampleDuration field. */ const DEFAULT_SAMPLE_DURATION = 0x8; /** Indicates the precense of the defaultSampleSize field. */ const DEFAULT_SAMPLE_SIZE = 0x10; /** Indicates the precense of the defaultSampleFlags field. */ const DEFAULT_SAMPLE_DURATION = 0x20; /** * Indicates that the duration provided in either defaultSampleDuration, or by * the defaultDuration in the {@link ISO14496_Box_TREX Track Extends Box}, is * empty, i.e. that there are no samples for this time interval. */ const DURATION_IS_EMPTY = 0x10000; /** * Constructs the class with given parameters and reads box related data from * the ISO Base Media file. * * @param Reader $reader The reader object. * @todo The sample flags could be parsed further */ public function __construct($reader, &$options = array()) { parent::__construct($reader, $options); $this->_trackId = $this->_reader->readUInt32BE(); if ($this->hasFlag(self::BASE_DATA_OFFSET)) $this->_baseDataOffset = $this->_reader->readInt64BE(); if ($this->hasFlag(self::SAMPLE_DESCRIPTION_INDEX)) $this->_sampleDescriptionIndex = $this->_reader->readUInt32BE(); if ($this->hasFlag(self::DEFAULT_SAMPLE_DURATION)) $this->_defaultSampleDuration = $this->_reader->readUInt32BE(); if ($this->hasFlag(self::DEFAULT_SAMPLE_SIZE)) $this->_defaultSampleSize = $this->_reader->readUInt32BE(); if ($this->hasFlag(self::DEFAULT_SAMPLE_FLAGS)) $this->_defaultSampleFlags = $this->_reader->readUInt32BE(); } /** * Returns the track identifier. * * @return integer */ public function getTrackId() { return $this->_trackId; } /** * Returns the base offset to use when calculating data offsets. * * @return integer */ public function getBaseDataOffset() { return $this->_baseDataOffset; } /** * Returns the sample description index. * * @return integer */ public function getSampleDescriptionIndex() { return $this->_defaultSampleDescriptionIndex; } /** * Returns the default sample duration. * * @return integer */ public function getDefaultSampleDuration() { return $this->_defaultSampleDuration; } /** * Returns the default sample size. * * @return integer */ public function getDefaultSampleSize() { return $this->_defaultSampleSize; } /** * Returns the default sample flags. * * @return integer */ public function getDefaultSampleFlags() { return $this->_defaultSampleFlags; } }