From 9ea9f8809eda6073b859c49797865de0a4aec98d Mon Sep 17 00:00:00 2001 From: svollbehr Date: Sun, 27 Apr 2008 15:52:45 +0000 Subject: [PATCH] Add support for iTunes/iPod extension to ISO14496 git-svn-id: http://php-reader.googlecode.com/svn/trunk@87 51a70ab9-7547-0410-9469-37e369ee0574 --- src/ISO14496.php | 6 ++ src/ISO14496/Box/ILST.php | 162 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 168 insertions(+) create mode 100644 src/ISO14496/Box/ILST.php diff --git a/src/ISO14496.php b/src/ISO14496.php index ec8e4a9..068f4a0 100644 --- a/src/ISO14496.php +++ b/src/ISO14496.php @@ -67,6 +67,12 @@ require_once("ISO14496/Box.php"); */ class ISO14496 extends ISO14496_Box { + /** + * Constructs the ISO14496 class with given file. + * + * @param string $filename The path to the file or file descriptor of an + * opened file. + */ public function __construct($filename) { $this->_reader = new Reader($filename); diff --git a/src/ISO14496/Box/ILST.php b/src/ISO14496/Box/ILST.php new file mode 100644 index 0000000..2ea62dd --- /dev/null +++ b/src/ISO14496/Box/ILST.php @@ -0,0 +1,162 @@ + + * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup + * @license http://code.google.com/p/php-reader/wiki/License New BSD License + * @version $Rev$ + * @since iTunes/iPod specific + */ +final class ISO14496_Box_ILST extends ISO14496_Box +{ + private $_data = 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) + { + parent::__construct($reader); + $this->setContainer(true); + $this->constructBoxes("ISO14496_Box_ILST_Container"); + } +} + +/** + * Generic iTunes/iPod DATA Box container. + * + * @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$ + * @since iTunes/iPod specific + * @ignore + */ +final class ISO14496_Box_ILST_Container extends ISO14496_Box +{ + public function __construct($reader) + { + parent::__construct($reader); + $this->setContainer(true); + $this->constructBoxes(); + } +} + +/**#@+ @ignore */ +require_once("ISO14496/Box/Full.php"); +/**#@-*/ + +/** + * A box that contains data for iTunes/iPod specific boxes. + * + * @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$ + * @since iTunes/iPod specific + */ +final class ISO14496_Box_DATA extends ISO14496_Box_Full +{ + /** @var mixed */ + private $_value; + + /** A flag to indicate that the data is an unsigned 8-bit integer. */ + const INTEGER = 0x0; + + /** + * A flag to indicate that the data is an unsigned 8-bit integer. Different + * value used in old versions of iTunes. + */ + const INTEGER_OLD_STYLE = 0x15; + + /** A flag to indicate that the data is a string. */ + const STRING = 0x1; + + /** A flag to indicate that the data is the contents of an JPEG image. */ + const JPEG = 0xd; + + /** A flag to indicate that the data is the contents of a PNG image. */ + const PNG = 0xe; + + /** + * 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) + { + parent::__construct($reader); + + $this->_reader->skip(4); + $data = $this->_reader->read + ($this->_offset + $this->_size - $this->_reader->getOffset()); + switch ($this->getFlags()) { + case self::INTEGER: + case self::INTEGER_OLD_STYLE: + for ($i = 0; $i < strlen($data); $i++) + $this->_value .= ord($data[$i]); + break; + case self::STRING: + default: + $this->_value = $data; + } + } + + /** + * Returns the value this box contains. + * + * @return mixed + */ + public function getValue() { return $this->_value; } +}