Track Header Box specifies the characteristics of a single track. * Exactly one Track Header Box is contained in a track. * * In the absence of an edit list, the presentation of a track starts at the * beginning of the overall presentation. An empty edit is used to offset the * start time of a track. * * @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_TKHD extends ISO14496_Box_Full { /** @var integer */ private $_creationTime; /** @var integer */ private $_modificationTime; /** @var integer */ private $_trackId; /** @var integer */ private $_duration; /** @var integer */ private $_width; /** @var integer */ private $_height; /** * Indicates that the track is enabled. A disabled track is treated as if it * were not present. */ const TRACK_ENABLED = 1; /** Indicates that the track is used in the presentation. */ const TRACK_IN_MOVIE = 2; /** Indicates that the track is used when previewing the presentation. */ const TRACK_IN_PREVIEW = 4; /** * 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); if ($this->getVersion() == 1) { $this->_creationTime = $this->_reader->readInt64BE(); $this->_modificationTime = $this->_reader->readInt64BE(); $this->_trackId = $this->_reader->readUInt32BE(); $this->_reader->skip(4); $this->_duration = $this->_reader->readInt64BE(); } else { $this->_creationTime = $this->_reader->readUInt32BE(); $this->_modificationTime = $this->_reader->readUInt32BE(); $this->_trackId = $this->_reader->readUInt32BE(); $this->_reader->skip(4); $this->_duration = $this->_reader->readUInt32BE(); } $this->_reader->skip(52); $this->_width = ((($tmp = $this->_reader->readUInt32BE()) >> 16) & 0xffff) + ($tmp & 0xffff) / 10; $this->_height = ((($tmp = $this->_reader->readUInt32BE()) >> 16) & 0xffff) + ($tmp & 0xffff) / 10; } /** * Returns the creation time of this track in seconds since midnight, Jan. 1, * 1904, in UTC time. * * @return integer */ public function getCreationTime() { return $this->_creationTime; } /** * Returns the most recent time the track was modified in seconds since * midnight, Jan. 1, 1904, in UTC time. * * @return integer */ public function getModificationTime() { return $this->_modificationTime; } /** * Returns a number that uniquely identifies this track over the entire * life-time of this presentation. Track IDs are never re-used and cannot be * zero. * * @return integer */ public function getTrackId() { return $this->_trackId; } /** * Returns the duration of this track (in the timescale indicated in the * {@link MVHD Movie Header Box}). The value of this field is equal to the sum * of the durations of all of the track's edits. If there is no edit list, * then the duration is the sum of the sample durations, converted into the * timescale in the {@link MVHD Movie Header Box}. If the duration of this * track cannot be determined then duration is set to all 32-bit maxint. * * @return integer */ public function getDuration() { return $this->_duration; } /** * Returns the track's visual presentation width. This needs not be the same * as the pixel width of the images; all images in the sequence are scaled to * this width, before any overall transformation of the track represented by * the matrix. The pixel width of the images is the default value. * * @return integer */ public function getWidth() { return $this->_rate; } /** * Returns the track's visual presentation height. This needs not be the same * as the pixel height of the images; all images in the sequence are scaled to * this height, before any overall transformation of the track represented by * the matrix. The pixel height of the images is the default value. * * @return integer */ public function getHeight() { return $this->_volume; } }