aboutsummaryrefslogtreecommitdiff
path: root/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF')
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Exception.php51
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object.php226
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/AdvancedContentEncryption.php109
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/AdvancedMutualExclusion.php100
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/BandwidthSharing.php133
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/BitrateMutualExclusion.php100
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/CodecList.php98
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Compatibility.php88
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Container.php195
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentBranding.php135
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentDescription.php141
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentEncryption.php117
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Data.php126
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/DigitalSignature.php91
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ErrorCorrection.php100
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedContentDescription.php122
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedContentEncryption.php80
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedStreamProperties.php418
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/FileProperties.php255
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/GroupMutualExclusion.php108
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Header.php125
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/HeaderExtension.php101
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Index.php185
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/IndexParameters.php121
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/LanguageList.php85
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Marker.php121
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MediaObjectIndex.php176
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MediaObjectIndexParameters.php130
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Metadata.php113
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MetadataLibrary.php137
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Padding.php64
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ScriptCommand.php124
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/SimpleIndex.php143
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamBitrateProperties.php93
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamPrioritization.php99
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamProperties.php288
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/TimecodeIndex.php181
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/TimecodeIndexParameters.php125
38 files changed, 5204 insertions, 0 deletions
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Exception.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Exception.php
new file mode 100644
index 0000000..c0e58be
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Exception.php
@@ -0,0 +1,51 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ISO 14496
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Exception.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**
+ * The ASF_Exception is thrown whenever an error occurs within the {@link ASF}
+ * class.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+class ASF_Exception extends Exception
+{
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object.php
new file mode 100644
index 0000000..8a93a7e
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object.php
@@ -0,0 +1,226 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2006-2008 The PHP Reader Project Workgroup. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Object.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Exception.php");
+/**#@-*/
+
+/**
+ * The base unit of organization for ASF files is called the ASF object. It
+ * consists of a 128-bit GUID for the object, a 64-bit integer object size, and
+ * the variable-length object data.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+class ASF_Object
+{
+ /**
+ * The reader object.
+ *
+ * @var Reader
+ */
+ protected $_reader;
+
+ /**
+ * The options array.
+ *
+ * @var Array
+ */
+ protected $_options;
+
+ /** @var integer */
+ private $_offset = -1;
+
+ /** @var string */
+ private $_id;
+
+ /** @var integer */
+ private $_size = -1;
+
+ /** @var ASF_Object */
+ private $_parent = null;
+
+ /**
+ * Constructs the class with given parameters and options.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ $this->_reader = $reader;
+ $this->_options = $options;
+ $this->_offset = $this->_reader->getOffset();
+ $this->_id = $this->_reader->readGUID();
+ $this->_size = $this->_reader->readInt64LE();
+ }
+
+ /**
+ * Returns the file offset to box start, or -1 if the box was created on heap.
+ *
+ * @return integer
+ */
+ public function getOffset() { return $this->_offset; }
+
+ /**
+ * Sets the file offset where the box starts.
+ *
+ * @param integer $offset The file offset to box start.
+ */
+ public function setOffset($offset) { $this->_offset = $offset; }
+
+ /**
+ * Returns the GUID of the ASF object.
+ *
+ * @return string
+ */
+ public function getIdentifier() { return $this->_id; }
+
+ /**
+ * Set the GUID of the ASF object.
+ *
+ * @param string $id The GUID
+ */
+ public function setIdentifier($id) { $this->_id = $id; }
+
+ /**
+ * Returns the object size in bytes, including the header.
+ *
+ * @return integer
+ */
+ public function getSize() { return $this->_size; }
+
+ /**
+ * Sets the box size. The size must include the header.
+ *
+ * @param integer $size The box size.
+ */
+ public function setSize($size)
+ {
+ if ($this->_parent !== null)
+ $this->_parent->setSize
+ (($this->_parent->getSize() > 0 ? $this->_parent->getSize() : 0) +
+ $size - ($this->_size > 0 ? $this->_size : 0));
+ $this->_size = $size;
+ }
+
+ /**
+ * Returns the options array.
+ *
+ * @return Array
+ */
+ public function getOptions() { return $this->_options; }
+
+ /**
+ * Returns the given option value, or the default value if the option is not
+ * defined.
+ *
+ * @param string $option The name of the option.
+ * @param mixed $defaultValue The default value to be returned.
+ */
+ public function getOption($option, $defaultValue = false)
+ {
+ if (isset($this->_options[$option]))
+ return $this->_options[$option];
+ return $defaultValue;
+ }
+
+ /**
+ * Sets the options array. See {@link ISO14496} class for available options.
+ *
+ * @param Array $options The options array.
+ */
+ public function setOptions(&$options) { $this->_options = $options; }
+
+ /**
+ * Sets the given option the given value.
+ *
+ * @param string $option The name of the option.
+ * @param mixed $value The value to set for the option.
+ */
+ public function setOption($option, $value)
+ {
+ $this->_options[$option] = $value;
+ }
+
+ /**
+ * Returns the parent object containing this box.
+ *
+ * @return ASF_Object
+ */
+ public function getParent() { return $this->_parent; }
+
+ /**
+ * Sets the parent containing object.
+ *
+ * @param ASF_Object $parent The parent object.
+ */
+ public function setParent(&$parent) { $this->_parent = $parent; }
+
+ /**
+ * Magic function so that $obj->value will work.
+ *
+ * @param string $name The field name.
+ * @return mixed
+ */
+ public function __get($name)
+ {
+ if (method_exists($this, "get" . ucfirst($name)))
+ return call_user_func(array($this, "get" . ucfirst($name)));
+ throw new ASF_Exception("Unknown field: " . $name);
+ }
+
+ /**
+ * Magic function so that assignments with $obj->value will work.
+ *
+ * @param string $name The field name.
+ * @param string $value The field value.
+ * @return mixed
+ */
+ public function __set($name, $value)
+ {
+ if (method_exists($this, "set" . ucfirst($name)))
+ call_user_func(array($this, "set" . ucfirst($name)), $value);
+ else throw new ASF_Exception("Unknown field: " . $name);
+ }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/AdvancedContentEncryption.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/AdvancedContentEncryption.php
new file mode 100644
index 0000000..c29561a
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/AdvancedContentEncryption.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: AdvancedContentEncryption.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Advanced Content Encryption Object</i> lets authors protect content by
+ * using Next Generation Windows Media Digital Rights Management for Network
+ * Devices.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_AdvancedContentEncryption extends ASF_Object
+{
+ const WINDOWS_MEDIA_DRM_NETWORK_DEVICES =
+ "7a079bb6-daa4-4e12-a5ca-91d3 8dc11a8d";
+
+ /** @var Array */
+ private $_contentEncryptionRecords = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+ $contentEncryptionRecordsCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $contentEncryptionRecordsCount; $i++) {
+ $entry = array("systemId" => $this->_reader->readGUID(),
+ "systemVersion" => $this->_reader->readUInt32LE(),
+ "streamNumbers" => array());
+ $encryptedObjectRecordCount = $this->_reader->readUInt16LE();
+ for ($j = 0; $j < $encryptedObjectRecordCount; $j++) {
+ $this->_reader->skip(4);
+ $entry["streamNumbers"][] = $this->_reader->readUInt16LE();
+ }
+ $dataCount = $this->_reader->readUInt32LE();
+ $entry["data"] = $this->_reader->read($dataCount);
+ $this->_contentEncryptionRecords[] = $entry;
+ }
+ }
+
+ /**
+ * Returns an array of content encryption records. Each record consists of the
+ * following keys.
+ *
+ * o systemId -- Specifies the unique identifier for the content encryption
+ * system.
+ *
+ * o systemVersion -- Specifies the version of the content encryption
+ * system.
+ *
+ * o streamNumbers -- An array of stream numbers a particular Content
+ * Encryption Record is associated with.
+ *
+ * o data -- The content protection data for this Content Encryption Record.
+ *
+ * @return Array
+ */
+ public function getContentEncryptionRecords()
+ {
+ return $this->_contentEncryptionRecords;
+ }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/AdvancedMutualExclusion.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/AdvancedMutualExclusion.php
new file mode 100644
index 0000000..b883dce
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/AdvancedMutualExclusion.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: AdvancedMutualExclusion.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Advanced Mutual Exclusion Object</i> identifies streams that have a
+ * mutual exclusion relationship to each other (in other words, only one of the
+ * streams within such a relationship can be streamed—the rest are ignored).
+ * There should be one instance of this object for each set of objects that
+ * contain a mutual exclusion relationship. The exclusion type is used so that
+ * implementations can allow user selection of common choices, such as language.
+ * This object must be used if any of the streams in the mutual exclusion
+ * relationship are hidden.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_AdvancedMutualExclusion extends ASF_Object
+{
+ const MUTEX_LANGUAGE = "d6e22a00-35da-11d1-9034-00a0c90349be";
+ const MUTEX_BITRATE = "d6e22a01-35da-11d1-9034-00a0c90349be";
+ const MUTEX_UNKNOWN = "d6e22a02-35da-11d1-9034-00a0c90349be";
+
+ /** @var string */
+ private $_exclusionType;
+
+ /** @var Array */
+ private $_streamNumbers = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+ $this->_exclusionType = $this->_reader->readGUID();
+ $streamNumbersCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $streamNumbersCount; $i++)
+ $this->_streamNumbers[] = $this->_reader->readUInt16LE();
+ }
+
+ /**
+ * Returns the nature of the mutual exclusion relationship.
+ *
+ * @return string
+ */
+ public function getExclusionType() { return $this->_exclusionType; }
+
+ /**
+ * Returns an array of stream numbers.
+ *
+ * @return Array
+ */
+ public function getStreamNumbers() { return $this->_streamNumbers; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/BandwidthSharing.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/BandwidthSharing.php
new file mode 100644
index 0000000..532ae58
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/BandwidthSharing.php
@@ -0,0 +1,133 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: BandwidthSharing.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Bandwidth Sharing Object</i> indicates streams that share bandwidth in
+ * such a way that the maximum bandwidth of the set of streams is less than the
+ * sum of the maximum bandwidths of the individual streams. There should be one
+ * instance of this object for each set of objects that share bandwidth. Whether
+ * or not this object can be used meaningfully is content-dependent.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_BandwidthSharing extends ASF_Object
+{
+ const SHARING_EXCLUSIVE = "af6060aa-5197-11d2-b6af-00c04fd908e9";
+ const SHARING_PARTIAL = "af6060ab-5197-11d2-b6af-00c04fd908e9";
+
+ /** @var string */
+ private $_sharingType;
+
+ /** @var integer */
+ private $_dataBitrate;
+
+ /** @var integer */
+ private $_bufferSize;
+
+ /** @var Array */
+ private $_streamNumbers = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_sharingType = $this->_reader->readGUID();
+ $this->_dataBitrate = $this->_reader->readUInt32LE();
+ $this->_bufferSize = $this->_reader->readUInt32LE();
+ $streamNumbersCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $streamNumbersCount; $i++)
+ $this->_streamNumbers[] = $this->_reader->readUInt16LE();
+ }
+
+ /**
+ * Returns the type of sharing relationship for this object. Two types are
+ * predefined: SHARING_PARTIAL, in which any number of the streams in the
+ * relationship may be streaming data at any given time; and
+ * SHARING_EXCLUSIVE, in which only one of the streams in the relationship
+ * may be streaming data at any given time.
+ *
+ * @return string
+ */
+ public function getSharingType() { return $this->_sharingType; }
+
+ /**
+ * Returns the leak rate R, in bits per second, of a leaky bucket that
+ * contains the data portion of all of the streams, excluding all ASF Data
+ * Packet overhead, without overflowing. The size of the leaky bucket is
+ * specified by the value of the Buffer Size field. This value can be less
+ * than the sum of all of the data bit rates in the
+ * {@link ASF_Object_ExtendedStreamProperties Extended Stream Properties}
+ * Objects for the streams contained in this bandwidth-sharing relationship.
+ *
+ * @return integer
+ */
+ public function getDataBitrate() { return $this->_dataBitrate; }
+
+ /**
+ * Specifies the size B, in bits, of the leaky bucket used in the Data Bitrate
+ * definition. This value can be less than the sum of all of the buffer sizes
+ * in the {@link ASF_Object_ExtendedStreamProperties Extended Stream
+ * Properties} Objects for the streams contained in this bandwidth-sharing
+ * relationship.
+ *
+ * @return integer
+ */
+ public function getBufferSize() { return $this->_bufferSize; }
+
+ /**
+ * Returns an array of stream numbers.
+ *
+ * @return Array
+ */
+ public function getStreamNumbers() { return $this->_streamNumbers; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/BitrateMutualExclusion.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/BitrateMutualExclusion.php
new file mode 100644
index 0000000..22ca8c9
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/BitrateMutualExclusion.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: BitrateMutualExclusion.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Bitrate Mutual Exclusion Object</i> identifies video streams that have
+ * a mutual exclusion relationship to each other (in other words, only one of
+ * the streams within such a relationship can be streamed at any given time and
+ * the rest are ignored). One instance of this object must be present for each
+ * set of objects that contains a mutual exclusion relationship. All video
+ * streams in this relationship must have the same frame size. The exclusion
+ * type is used so that implementations can allow user selection of common
+ * choices, such as bit rate.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_BitrateMutualExclusion extends ASF_Object
+{
+ const MUTEX_LANGUAGE = "d6e22a00-35da-11d1-9034-00a0c90349be";
+ const MUTEX_BITRATE = "d6e22a01-35da-11d1-9034-00a0c90349be";
+ const MUTEX_UNKNOWN = "d6e22a02-35da-11d1-9034-00a0c90349be";
+
+ /** @var string */
+ private $_exclusionType;
+
+ /** @var Array */
+ private $_streamNumbers = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+ $this->_exclusionType = $this->_reader->readGUID();
+ $streamNumbersCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $streamNumbersCount; $i++)
+ $this->_streamNumbers[] = $this->_reader->readUInt16LE();
+ }
+
+ /**
+ * Returns the nature of the mutual exclusion relationship.
+ *
+ * @return string
+ */
+ public function getExclusionType() { return $this->_exclusionType; }
+
+ /**
+ * Returns an array of stream numbers.
+ *
+ * @return Array
+ */
+ public function getStreamNumbers() { return $this->_streamNumbers; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/CodecList.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/CodecList.php
new file mode 100644
index 0000000..5a220a7
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/CodecList.php
@@ -0,0 +1,98 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: CodecList.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Codec List Object</i> provides user-friendly information about the
+ * codecs and formats used to encode the content found in the ASF file.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+final class ASF_Object_CodecList extends ASF_Object
+{
+ const VIDEO_CODEC = 0x1;
+ const AUDIO_CODEC = 0x2;
+ const UNKNOWN_CODEC = 0xffff;
+
+ /** @var Array */
+ private $_entries = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_reader->skip(16);
+ $codecEntriesCount = $this->_reader->readUInt32LE();
+ for ($i = 0; $i < $codecEntriesCount; $i++) {
+ $entry = array("type" => $this->_reader->readUInt16LE());
+ $codecNameLength = $this->_reader->readUInt16LE() * 2;
+ $entry["codecName"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($codecNameLength));
+ $codecDescriptionLength = $this->_reader->readUInt16LE() * 2;
+ $entry["codecDescription"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($codecDescriptionLength));
+ $codecInformationLength = $this->_reader->readUInt16LE();
+ $entry["codecInformation"] =
+ $this->_reader->read($codecInformationLength);
+ $this->_entries[] = $entry;
+ }
+ }
+
+ /**
+ * Returns the array of codec entries.
+ *
+ * @return Array
+ */
+ public function getEntries() { return $this->_entries; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Compatibility.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Compatibility.php
new file mode 100644
index 0000000..e051b45
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Compatibility.php
@@ -0,0 +1,88 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Compatibility.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Compatibility Object</i> is reserved for future use.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_Compatibility extends ASF_Object
+{
+ /** @var integer */
+ private $_profile;
+
+ /** @var integer */
+ private $_mode;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_profile = $this->_reader->readUInt8();
+ $this->_mode = $this->_reader->readUInt8();
+ }
+
+ /**
+ * Returns the profile field. This field is reserved and is set to 2.
+ *
+ * @return integer
+ */
+ public function getProfile() { return $this->_profile; }
+
+ /**
+ * Returns the mode field. This field is reserved and is set to 1.
+ *
+ * @return integer
+ */
+ public function getMode() { return $this->_mode; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Container.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Container.php
new file mode 100644
index 0000000..a214a3b
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Container.php
@@ -0,0 +1,195 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Container.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * An abstract base container class that contains other ASF objects.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+abstract class ASF_Object_Container extends ASF_Object
+{
+ /** @var Array */
+ private $_objects = array();
+
+ /**
+ * Reads and constructs the objects found within this object.
+ */
+ protected function constructObjects($defaultclassnames = array())
+ {
+ while (true) {
+ $offset = $this->_reader->getOffset();
+ if ($offset >= $this->getOffset() + $this->getSize())
+ break;
+ $guid = $this->_reader->readGUID();
+ $size = $this->_reader->readInt64LE();
+
+ $this->_reader->setOffset($offset);
+ if (isset($defaultclassnames[$guid])) {
+ if (@fopen($filename = "ASF/Object/" . $defaultclassnames[$guid] .
+ ".php", "r", true) !== false)
+ require_once($filename);
+ if (class_exists
+ ($classname = "ASF_Object_" . $defaultclassnames[$guid]))
+ $object = new $classname($this->_reader, $this->_options);
+ else
+ $object = new ASF_Object($this->_reader, $this->_options);
+ } else
+ $object = new ASF_Object($this->_reader, $this->_options);
+ $object->setParent($this);
+ if (!$this->hasObject($object->getIdentifier()))
+ $this->_objects[$object->getIdentifier()] = array();
+ $this->_objects[$object->getIdentifier()][] = $object;
+ $this->_reader->setOffset($offset + $size);
+ }
+ }
+
+ /**
+ * Checks whether the object with given GUID is present in the file. Returns
+ * <var>true</var> if one or more objects are present, <var>false</var>
+ * otherwise.
+ *
+ * @return boolean
+ */
+ public function hasObject($identifier)
+ {
+ return isset($this->_objects[$identifier]);
+ }
+
+ /**
+ * Returns all the objects the file contains as an associate array. The object
+ * identifiers work as keys having an array of ASF objects as associated
+ * value.
+ *
+ * @return Array
+ */
+ public function getObjects()
+ {
+ return $this->_objects;
+ }
+
+ /**
+ * Returns an array of objects matching the given object GUID or an empty
+ * array if no object matched the identifier.
+ *
+ * The identifier may contain wildcard characters "*" and "?". The asterisk
+ * matches against zero or more characters, and the question mark matches any
+ * single character.
+ *
+ * Please note that one may also use the shorthand $obj->identifier to access
+ * the first box with the identifier given. Wildcards cannot be used with
+ * the shorthand and they will not work with user defined uuid types.
+ *
+ * @return Array
+ */
+ public function getObjectsByIdentifier($identifier)
+ {
+ $matches = array();
+ $searchPattern = "/^" .
+ str_replace(array("*", "?"), array(".*", "."), $identifier) . "$/i";
+ foreach ($this->_objects as $identifier => $objects)
+ if (preg_match($searchPattern, $identifier))
+ foreach ($objects as $object)
+ $matches[] = $object;
+ return $matches;
+ }
+
+ /**
+ * Adds a new object into the current object and returns it.
+ *
+ * @param ASF_Object The object to add
+ * @return ASF_Object
+ */
+ public function addObject($object)
+ {
+ $object->setParent($this);
+ $object->setOptions($this->_options);
+ if (!$this->hasObject($object->getIdentifier()))
+ $this->_objects[$object->getIdentifier()] = array();
+ return $this->_objects[$object->getIdentifier()][] = $object;
+ }
+
+ /**
+ * Override magic function so that $obj->value will work as expected.
+ *
+ * The method first attempts to call the appropriate getter method. If no
+ * field with given name is found, the method attempts to return the right
+ * object instead. In other words, calling $obj->value will attempt to return
+ * the first object returned by $this->getObjectsByIdentifier(self::value).
+ *
+ * @param string $name The field or object name.
+ * @return mixed
+ */
+ public function __get($name)
+ {
+ if (method_exists($this, "get" . ucfirst($name)))
+ return call_user_func(array($this, "get" . ucfirst($name)));
+ if (defined($constname = get_class($this) . "::" . strtoupper
+ (preg_replace("/[A-Z]/", "_$0", $name)))) {
+ $objects = $this->getObjectsByIdentifier(constant($constname));
+ if (isset($objects[0]))
+ return $objects[0];
+ }
+ throw new ASF_Exception("Unknown field/object: " . $name);
+ }
+
+ /**
+ * Magic function so that isset($obj->value) will work. This method checks
+ * whether the object by given identifier is contained by this container.
+ *
+ * @param string $name The object name.
+ * @return boolean
+ */
+ public function __isset($name)
+ {
+ if (defined($constname = get_class($this) . "::" . strtoupper
+ (preg_replace("/[A-Z]/", "_$0", $name)))) {
+ $objects = $this->getObjectsByIdentifier(constant($constname));
+ return isset($objects[0]);
+ }
+ else
+ return isset($this->_objects[$name]);
+ }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentBranding.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentBranding.php
new file mode 100644
index 0000000..c5859a5
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentBranding.php
@@ -0,0 +1,135 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: ContentBranding.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Content Branding Object</i> stores branding data for an ASF file,
+ * including information about a banner image and copyright associated with the
+ * file.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_ContentBranding extends ASF_Object
+{
+ /** Indicates that there is no banner */
+ const TYPE_NONE = 0;
+
+ /** Indicates that the data represents a bitmap */
+ const TYPE_BMP = 1;
+
+ /** Indicates that the data represents a JPEG */
+ const TYPE_JPEG = 2;
+
+ /** Indicates that the data represents a GIF */
+ const TYPE_GIF = 3;
+
+
+ /** @var integer */
+ private $_bannerImageType;
+
+ /** @var string */
+ private $_bannerImageData;
+
+ /** @var string */
+ private $_bannerImageUrl;
+
+ /** @var string */
+ private $_copyrightUrl;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_bannerImageType = $this->_reader->readUInt32LE();
+ $bannerImageDataSize = $this->_reader->readUInt32LE();
+ $this->_bannerImageData = $this->_reader->read($bannerImageDataSize);
+ $bannerImageUrlLength = $this->_reader->readUInt32LE();
+ $this->_bannerImageUrl = $this->_reader->read($bannerImageUrlLength);
+ $copyrightUrlLength = $this->_reader->readUInt32LE();
+ $this->_copyrightUrl = $this->_reader->read($copyrightUrlLength);
+ }
+
+ /**
+ * Returns the type of data contained in the <i>Banner Image Data</i>. Valid
+ * values are 0 to indicate that there is no banner image data; 1 to indicate
+ * that the data represent a bitmap; 2 to indicate that the data represents a
+ * JPEG; and 3 to indicate that the data represents a GIF. If this value is
+ * set to 0, then the <i>Banner Image Data Size field is set to 0, and the
+ * <i>Banner Image Data</i> field is empty.
+ *
+ * @return integer
+ */
+ public function getBannerImageType() { return $this->_bannerImageType; }
+
+ /**
+ * Returns the entire banner image, including the header for the appropriate
+ * image format.
+ *
+ * @return string
+ */
+ public function getBannerImageData() { return $this->_bannerImageData; }
+
+ /**
+ * Returns, if present, a link to more information about the banner image.
+ *
+ * @return string
+ */
+ public function getBannerImageUrl() { return $this->_bannerImageUrl; }
+
+ /**
+ * Returns, if present, a link to more information about the copyright for the
+ * content.
+ *
+ * @return string
+ */
+ public function getCopyrightUrl() { return $this->_copyrightUrl; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentDescription.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentDescription.php
new file mode 100644
index 0000000..bab422c
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentDescription.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2006-2008 The PHP Reader Project Workgroup. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: ContentDescription.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Content Description Object</i> lets authors record well-known data
+ * describing the file and its contents. This object is used to store standard
+ * bibliographic information such as title, author, copyright, description, and
+ * rating information. This information is pertinent to the entire file.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+final class ASF_Object_ContentDescription extends ASF_Object
+{
+ /** @var string */
+ private $_title;
+
+ /** @var string */
+ private $_author;
+
+ /** @var string */
+ private $_copyright;
+
+ /** @var string */
+ private $_description;
+
+ /** @var string */
+ private $_rating;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $titleLen = $this->_reader->readUInt16LE();
+ $authorLen = $this->_reader->readUInt16LE();
+ $copyrightLen = $this->_reader->readUInt16LE();
+ $descriptionLen = $this->_reader->readUInt16LE();
+ $ratingLen = $this->_reader->readUInt16LE();
+
+ $this->_title = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($titleLen));
+ $this->_author = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($authorLen));
+ $this->_copyright = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($copyrightLen));
+ $this->_description = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($descriptionLen));
+ $this->_rating = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($ratingLen));
+ }
+
+ /**
+ * Returns the title information.
+ *
+ * @return string
+ */
+ public function getTitle() { return $this->_title; }
+
+ /**
+ * Returns the author information.
+ *
+ * @return string
+ */
+ public function getAuthor() { return $this->_author; }
+
+ /**
+ * Returns the copyright information.
+ *
+ * @return string
+ */
+ public function getCopyright() { return $this->_copyright; }
+
+ /**
+ * Returns the description information.
+ *
+ * @return string
+ */
+ public function getDescription() { return $this->_description; }
+
+ /**
+ * Returns the rating information.
+ *
+ * @return string
+ */
+ public function getRating() { return $this->_rating; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentEncryption.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentEncryption.php
new file mode 100644
index 0000000..29fe766
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ContentEncryption.php
@@ -0,0 +1,117 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: ContentEncryption.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Content Encryption Object</i> lets authors protect content by using
+ * Microsoft® Digital Rights Manager version 1.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_ContentEncryption extends ASF_Object
+{
+ /** @var string */
+ private $_secretData;
+
+ /** @var string */
+ private $_protectionType;
+
+ /** @var string */
+ private $_keyId;
+
+ /** @var string */
+ private $_licenseUrl;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $secretDataLength = $this->_reader->readUInt32LE();
+ $this->_secretData = $this->_reader->read($secretDataLength);
+ $protectionTypeLength = $this->_reader->readUInt32LE();
+ $this->_protectionType = $this->_reader->readString8($protectionTypeLength);
+ $keyIdLength = $this->_reader->readUInt32LE();
+ $this->_keyId = $this->_reader->readString8($keyIdLength);
+ $licenseUrlLength = $this->_reader->readUInt32LE();
+ $this->_licenseUrl = $this->_reader->readString8($licenseUrlLength);
+ }
+
+ /**
+ * Returns the secret data.
+ *
+ * @return string
+ */
+ public function getSecretData() { return $this->_secretData; }
+
+ /**
+ * Returns the type of protection mechanism used. The value of this field
+ * is set to "DRM".
+ *
+ * @return string
+ */
+ public function getProtectionType() { return $this->_protectionType; }
+
+ /**
+ * Returns the key ID used.
+ *
+ * @return string
+ */
+ public function getKeyId() { return $this->_keyId; }
+
+ /**
+ * Returns the URL from which a license to manipulate the content can be
+ * acquired.
+ *
+ * @return string
+ */
+ public function getLicenseUrl() { return $this->_licenseUrl; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Data.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Data.php
new file mode 100644
index 0000000..2904693
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Data.php
@@ -0,0 +1,126 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Data.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+require_once("ASF/Object/Data/Packet.php");
+/**#@-*/
+
+/**
+ * The <i>Data Object</i> contains all of the <i>Data Packet</i>s for a file.
+ * These Data Packets are organized in terms of increasing send times. A <i>Data
+ * Packet</i> can contain interleaved data from several digital media streams.
+ * This data can consist of entire objects from one or more streams.
+ * Alternatively, it can consist of partial objects (fragmentation).
+ *
+ * Capabilities provided within the interleave packet definition include:
+ * o Single or multiple payload types per Data Packet
+ * o Fixed-size Data Packets
+ * o Error correction information (optional)
+ * o Clock information (optional)
+ * o Redundant sample information, such as presentation time stamp (optional)
+ *
+ * @todo Implement optional support for ASF Data Packet parsing
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_Data extends ASF_Object
+{
+ /** @var string */
+ private $_fileId;
+
+ /** @var integer */
+ private $_totalDataPackets;
+
+ /** @var Array */
+ private $_dataPackets;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_fileId = $this->_reader->readGUID();
+ $this->_totalDataPackets = $this->_reader->readInt64LE();
+ $this->_reader->skip(2);
+ /* Data packets are not supported
+ * for ($i = 0; $i < $this->_totalDataPackets; $i++) {
+ * $this->_dataPackets[] = new ASF_Object_Data_Packet($reader);
+ * }
+ */
+ }
+
+ /**
+ * Returns the unique identifier for this ASF file. The value of this field
+ * is changed every time the file is modified in any way. The value of this
+ * field is identical to the value of the <i>File ID</i> field of the
+ * <i>Header Object</i>.
+ *
+ * @return string
+ */
+ public function getFileId() { return $this->_fileId; }
+
+ /**
+ * Returns the number of ASF Data Packet entries that exist within the <i>Data
+ * Object</i>. It must be equal to the <i>Data Packet Count</i> field in the
+ * <i>File Properties Object</i>. The value of this field is invalid if the
+ * broadcast flag field of the <i>File Properties Object</i> is set to 1.
+ *
+ * @return integer
+ */
+ public function getTotalDataPackets() { return $this->_endTime; }
+
+ /**
+ * Returns an array of Data Packets.
+ *
+ * @return Array
+ */
+ public function getDataPackets()
+ {
+ throw new ASF_Exception("Data packets are not parsed due to optimization.");
+ }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/DigitalSignature.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/DigitalSignature.php
new file mode 100644
index 0000000..64a7690
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/DigitalSignature.php
@@ -0,0 +1,91 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: DigitalSignature.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Digital Signature Object</i> lets authors sign the portion of their
+ * header that lies between the end of the <i>File Properties Object</i> and the
+ * beginning of the <i>Digital Signature Object</i>.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_DigitalSignature extends ASF_Object
+{
+ /** @var integer */
+ private $_signatureType;
+
+ /** @var string */
+ private $_signatureData;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_signatureType = $this->_reader->readUInt32LE();
+ $signatureDataLength = $this->_reader->readUInt32LE();
+ $this->_signatureData = $this->_reader->read($signatureDataLength);
+ }
+
+ /**
+ * Returns the type of digital signature used. This field is set to 2.
+ *
+ * @return integer
+ */
+ public function getSignatureType() { return $this->_signatureType; }
+
+ /**
+ * Returns the digital signature data.
+ *
+ * @return string
+ */
+ public function getSignatureData() { return $this->_signatureData; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ErrorCorrection.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ErrorCorrection.php
new file mode 100644
index 0000000..c5cb522
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ErrorCorrection.php
@@ -0,0 +1,100 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: ErrorCorrection.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Error Correction Object</i> defines the error correction method. This
+ * enables different error correction schemes to be used during content
+ * creation. The <i>Error Correction Object</i> contains provisions for opaque
+ * information needed by the error correction engine for recovery. For example,
+ * if the error correction scheme were a simple N+1 parity scheme, then the
+ * value of N would have to be available in this object.
+ *
+ * Note that this does not refer to the same thing as the <i>Error Correction
+ * Type</i> field in the <i>{@link ASF_Object_StreamProperties Stream Properties
+ * Object}</i>.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_ErrorCorrection extends ASF_Object
+{
+ /** @var string */
+ private $_type;
+
+ /** @var string */
+ private $_data;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_type = $this->_reader->readGUID();
+ $dataLength = $this->_reader->readUInt32LE();
+ $this->_data = $this->_reader->read($dataLength);
+ }
+
+ /**
+ * Returns the type of error correction.
+ *
+ * @return string
+ */
+ public function getType() { return $this->_type; }
+
+ /**
+ * Returns the data specific to the error correction scheme. The structure for
+ * the <i>Error Correction Data</i> field is determined by the value stored in
+ * the <i>Error Correction Type</i> field.
+ *
+ * @return Array
+ */
+ public function getData() { return $this->_data; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedContentDescription.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedContentDescription.php
new file mode 100644
index 0000000..259bbb2
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedContentDescription.php
@@ -0,0 +1,122 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2006-2008 The PHP Reader Project Workgroup. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: ExtendedContentDescription.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>ASF_Extended_Content_Description_Object</i> object implementation.
+ * This object contains unlimited number of attribute fields giving more
+ * information about the file.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_ExtendedContentDescription extends ASF_Object
+{
+ /** @var Array */
+ private $_contentDescriptors = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $contentDescriptorsCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $contentDescriptorsCount; $i++) {
+ $nameLen = $this->_reader->readUInt16LE();
+ $name = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($nameLen));
+ $valueDataType = $this->_reader->readUInt16LE();
+ $valueLen = $this->_reader->readUInt16LE();
+ switch ($valueDataType) {
+ case 0:
+ case 1: // string
+ $this->_contentDescriptors[$name] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($valueLen));
+ break;
+ case 2: // bool
+ case 3: // 32-bit integer
+ $this->_contentDescriptors[$name] = $this->_reader->readUInt32LE();
+ break;
+ case 4: // 64-bit integer
+ $this->_contentDescriptors[$name] = $this->_reader->readInt64LE();
+ break;
+ case 5: // 16-bit integer
+ $this->_contentDescriptors[$name] = $this->_reader->readUInt16LE();
+ break;
+ default:
+ }
+ }
+ }
+
+ /**
+ * Returns the value of the specified descriptor or <var>false</var> if there
+ * is no such descriptor defined.
+ *
+ * @param string $name The name of the descriptor (ie the name of the field).
+ * @return string|false
+ */
+ public function getDescriptor($name)
+ {
+ if (isset($this->_contentDescriptors[$name]))
+ return $this->_contentDescriptors[$name];
+ return false;
+ }
+
+ /**
+ * Returns an associate array of all the descriptors defined having the names
+ * of the descriptors as the keys.
+ *
+ * @return Array
+ */
+ public function getDescriptors() { return $this->_contentDescriptors; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedContentEncryption.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedContentEncryption.php
new file mode 100644
index 0000000..a2a2eee
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedContentEncryption.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: ExtendedContentEncryption.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Extended Content Encryption Object</i> lets authors protect content by
+ * using the Windows Media Rights Manager 7 Software Development Kit (SDK).
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_ExtendedContentEncryption extends ASF_Object
+{
+ /** @var string */
+ private $_data;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $dataSize = $this->_reader->readUInt32LE();
+ $this->_data = $this->_reader->read($dataSize);
+ }
+
+ /**
+ * Returns the array of bytes required by the DRM client to manipulate the
+ * protected content.
+ *
+ * @return string
+ */
+ public function getData() { return $this->_data; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedStreamProperties.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedStreamProperties.php
new file mode 100644
index 0000000..6a65038
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ExtendedStreamProperties.php
@@ -0,0 +1,418 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: ExtendedStreamProperties.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Extended Stream Properties Object</i> defines additional optional
+ * properties and characteristics of a digital media stream that are not
+ * described in the <i>Stream Properties Object</i>.
+ *
+ * Typically, the basic <i>Stream Properties Object</i> is present in the
+ * <i>Header Object</i>, and the <i>Extended Stream Properties Object</i> is
+ * present in the <i>Header Extension Object</i>. Sometimes, however, the
+ * <i>Stream Properties Object</i> for a stream may be embedded inside the
+ * <i>Extended Stream Properties Object</i> for that stream. This approach
+ * facilitates the creation of backward-compatible content.
+ *
+ * This object has an optional provision to include application-specific or
+ * implementation-specific data attached to the payloads of each digital media
+ * sample stored within a <i>Data Packet</i>. This data can be looked at as
+ * digital media sample properties and is stored in the <i>Replicated Data</i>
+ * field of a payload header. The <i>Payload Extension Systems</i> fields of the
+ * <i>Extended Stream Properties Object</i> describes what this data is and is
+ * necessary for that data to be parsed, if present.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_ExtendedStreamProperties extends ASF_Object
+{
+ /**
+ * Indicates, if set, that this digital media stream, if sent over a network,
+ * must be carried over a reliable data communications transport mechanism.
+ * This should be set for streams that cannot recover after a lost media
+ * object.
+ */
+ const RELIABLE = 1;
+
+ /**
+ * This flag should be set only if the stream is seekable, either by using an
+ * index object or by estimating according to bit rate (as can sometimes be
+ * done with audio). This flag pertains to this stream only rather than to the
+ * entire file.
+ */
+ const SEEKABLE = 2;
+
+ /**
+ * Indicates, if set, that the stream does not contain any cleanpoints. A
+ * cleanpoint is any point at which playback could begin without having seen
+ * the previous media objects. For streams that use key frames, the key frames
+ * would be the cleanpoints.
+ */
+ const NO_CLEANPOINT = 4;
+
+ /**
+ * Specifies, if set, that when a stream is joined in mid-transmission, all
+ * information from the most recent cleanpoint up to the current time should
+ * be sent before normal streaming begins at the current time. The default
+ * behavior (when this flag is not set) is to send only the data starting at
+ * the current time. This flag should only be set for streams that are coming
+ * from a live source.
+ */
+ const RESEND_LIVE_CLEANPOINTS = 8;
+
+ const AUDIO_MEDIA = "f8699e40-5b4d-11cf-a8fd-00805f5c442b";
+ const VIDEO_MEDIA = "bc19efc0-5b4d-11cf-a8fd-00805f5c442b";
+ const COMMAND_MEDIA = "59dacfc0-59e6-11d0-a3ac-00a0c90348f6";
+ const JFIF_MEDIA = "b61be100-5b4e-11cf-a8fD-00805f5c442b";
+ const DEGRADABLE_JPEG_MEDIA = "35907dE0-e415-11cf-a917-00805f5c442b";
+ const FILE_TRANSFER_MEDIA = "91bd222c-f21c-497a-8b6d-5aa86bfc0185";
+ const BINARY_MEDIA = "3afb65e2-47ef-40f2-ac2c-70a90d71d343";
+
+ const NO_ERROR_CORRECTION = "20fb5700-5b55-11cf-a8fd-00805f5c442b";
+ const AUDIO_SPREAD = "bfc3cd50-618f-11cf-8bb2-00aa00b4e220";
+
+ const PAYLOAD_EXTENSION_SYSTEM_TIMECODE =
+ "399595ec-8667-4e2d-8fdb-98814ce76c1e";
+ const PAYLOAD_EXTENSION_SYSTEM_FILE_NAME =
+ "e165ec0e-19ed-45d7-b4a7-25cbd1e28e9b";
+ const PAYLOAD_EXTENSION_SYSTEM_CONTENT_TYPE =
+ "d590dc20-07bc-436c-9cf7-f3bbfbf1a4dc";
+ const PAYLOAD_EXTENSION_SYSTEM_PIXEL_ASPECT_RATIO =
+ "1b1ee554-f9ea-4bc8-821a-376b74e4c4b8";
+ const PAYLOAD_EXTENSION_SYSTEM_SAMPLE_DURATION =
+ "c6bd9450-867f-4907-83a3-c77921b733ad";
+ const PAYLOAD_EXTENSION_SYSTEM_ENCRYPTION_SAMPLE_ID =
+ "6698b84e-0afa-4330-aeb2-1c0a98d7a44d";
+
+ /** @var integer */
+ private $_startTime;
+
+ /** @var integer */
+ private $_endTime;
+
+ /** @var integer */
+ private $_dataBitrate;
+
+ /** @var integer */
+ private $_bufferSize;
+
+ /** @var integer */
+ private $_initialBufferFullness;
+
+ /** @var integer */
+ private $_alternateDataBitrate;
+
+ /** @var integer */
+ private $_alternateBufferSize;
+
+ /** @var integer */
+ private $_alternateInitialBufferFullness;
+
+ /** @var integer */
+ private $_maximumObjectSize;
+
+ /** @var integer */
+ private $_flags;
+
+ /** @var integer */
+ private $_streamNumber;
+
+ /** @var integer */
+ private $_streamLanguageIndex;
+
+ /** @var integer */
+ private $_averageTimePerFrame;
+
+ /** @var Array */
+ private $_streamNames = array();
+
+ /** @var Array */
+ private $_payloadExtensionSystems = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_startTime = $this->_reader->readInt64LE();
+ $this->_endTime = $this->_reader->readInt64LE();
+ $this->_dataBitrate = $this->_reader->readUInt32LE();
+ $this->_bufferSize = $this->_reader->readUInt32LE();
+ $this->_initialBufferFullness = $this->_reader->readUInt32LE();
+ $this->_alternateDataBitrate = $this->_reader->readUInt32LE();
+ $this->_alternateBufferSize = $this->_reader->readUInt32LE();
+ $this->_alternateInitialBufferFullness = $this->_reader->readUInt32LE();
+ $this->_maximumObjectSize = $this->_reader->readUInt32LE();
+ $this->_flags = $this->_reader->readUInt32LE();
+ $this->_streamNumber = $this->_reader->readUInt16LE();
+ $this->_streamLanguageIndex = $this->_reader->readUInt16LE();
+ $this->_averageTimePerFrame = $this->_reader->readInt64LE();
+ $streamNameCount = $this->_reader->readUInt16LE();
+ $payloadExtensionSystemCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $streamNameCount; $i++) {
+ $streamName = array("languageIndex" => $this->_reader->readUInt16LE());
+ $streamNameLength = $this->_reader->readUInt16LE();
+ $streamName["streamName"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($streamNameLength));
+ $this->_streamNames[] = $streamName;
+ }
+ for ($i = 0; $i < $payloadExtensionSystemCount; $i++) {
+ $payloadExtensionSystem = array
+ ("extensionSystemId" => $this->_reader->readGUID(),
+ "extensionDataSize" => $this->_reader->readUInt16LE());
+ $extensionSystemInfoLength = $this->_reader->readUInt32LE();
+ $payloadExtensionSystem["extensionSystemInfo"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($extensionSystemInfoLength));
+ $this->_payloadExtensionSystems[] = $payloadExtensionSystem;
+ }
+ }
+
+ /**
+ * Returns the presentation time of the first object, indicating where this
+ * digital media stream starts within the context of the timeline of the ASF
+ * file as a whole. This time value corresponds to presentation times as they
+ * appear in the data packets (adjusted by the preroll). This field is given
+ * in units of milliseconds and can optionally be set to 0, in which case it
+ * will be ignored.
+ *
+ * @return integer
+ */
+ public function getStartTime() { return $this->_startTime; }
+
+ /**
+ * Returns the presentation time of the last object plus the duration of play,
+ * indicating where this digital media stream ends within the context of the
+ * timeline of the ASF file as a whole. This time value corresponds to
+ * presentation times as they appear in the data packets (adjusted by the
+ * preroll). This field is given in units of milliseconds and can optionally
+ * be set to 0, in which case it will be ignored.
+ *
+ * @return integer
+ */
+ public function getEndTime() { return $this->_endTime; }
+
+ /**
+ * Returns the leak rate R, in bits per second, of a leaky bucket that
+ * contains the data portion of the stream without overflowing, excluding all
+ * ASF Data Packet overhead. The size of the leaky bucket is specified by the
+ * value of the <i>Buffer Size</i> field. This field has a non-zero value.
+ *
+ * @return integer
+ */
+ public function getDataBitrate() { return $this->_dataBitrate; }
+
+ /**
+ * Returns the size B, in milliseconds, of the leaky bucket used in the
+ * <i>Data Bitrate</i> definition.
+ *
+ * @return integer
+ */
+ public function getBufferSize() { return $this->_bufferSize; }
+
+ /**
+ * Returns the initial fullness, in milliseconds, of the leaky bucket used in
+ * the <i>Data Bitrate</i> definition. This is the fullness of the buffer at
+ * the instant before the first bit in the stream is dumped into the bucket.
+ * Typically, this value is set to 0. This value shall not exceed the value in
+ * the <i>Buffer Size</i> field.
+ *
+ * @return integer
+ */
+ public function getInitialBufferFullness()
+ {
+ return $this->_initialBufferFullness;
+ }
+
+ /**
+ * Returns the leak rate RAlt, in bits per second, of a leaky bucket that
+ * contains the data portion of the stream without overflowing, excluding all
+ * ASF <i>Data Packet</i> overhead. The size of the leaky bucket is specified
+ * by the value of the <i>Alternate Buffer Size</i> field. This value is
+ * relevant in most scenarios where the bit rate is not exactly constant, but
+ * it is especially useful for streams that have highly variable bit rates.
+ * This field can optionally be set to the same value as the <i>Data
+ * Bitrate</i> field.
+ *
+ * @return integer
+ */
+ public function getAlternateDataBitrate()
+ {
+ return $this->_alternateDataBitrate;
+ }
+
+ /**
+ * Returns the size BAlt, in milliseconds, of the leaky bucket used in the
+ * <i>Alternate Data Bitrate</i> definition. This value is relevant in most
+ * scenarios where the bit rate is not exactly constant, but it is especially
+ * useful for streams that have highly variable bit rates. This field can
+ * optionally be set to the same value as the <i>Buffer Size</i> field.
+ *
+ * @return integer
+ */
+ public function getAlternateBufferSize()
+ {
+ return $this->_alternateBufferSize;
+ }
+
+ /**
+ * Returns the initial fullness, in milliseconds, of the leaky bucket used in
+ * the <i>Alternate Data Bitrate</i> definition. This is the fullness of the
+ * buffer at the instant before the first bit in the stream is dumped into the
+ * bucket. Typically, this value is set to 0. This value does not exceed the
+ * value of the <i>Alternate Buffer Size</i> field.
+ *
+ * @return integer
+ */
+ public function getAlternateInitialBufferFullness()
+ {
+ return $this->_alternateInitialBufferFullness;
+ }
+
+ /**
+ * Returns the maximum size of the largest sample stored in the data packets
+ * for a stream. A value of 0 means unknown.
+ *
+ * @return integer
+ */
+ public function getMaximumObjectSize()
+ {
+ return $this->_maximumObjectSize;
+ }
+
+ /**
+ * Returns the average time duration, measured in 100-nanosecond units, of
+ * each frame. This number should be rounded to the nearest integer. This
+ * field can optionally be set to 0 if the average time per frame is unknown
+ * or unimportant. It is recommended that this field be set for video.
+ *
+ * @return integer
+ */
+ public function getAverageTimePerFrame()
+ {
+ return $this->_averageTimePerFrame;
+ }
+
+ /**
+ * Returns the number of this stream. 0 is an invalid stream number (that is,
+ * other <i>Header Objects</i> use stream number 0 to refer to the entire file
+ * as a whole rather than to a specific media stream within the file). Valid
+ * values are between 1 and 127.
+ *
+ * @return integer
+ */
+ public function getStreamNumber()
+ {
+ return $this->_streamNumber;
+ }
+
+ /**
+ * Returns the language, if any, which the content of the stream uses or
+ * assumes. Refer to the {@link LanguageList Language List Object} description
+ * for the details concerning how the <i>Stream Language Index</i> and
+ * <i>Language Index</i> fields should be used. Note that this is an index
+ * into the languages listed in the <i>Language List Object</i> rather than a
+ * language identifier.
+ *
+ * @return integer
+ */
+ public function getStreamLanguageIndex()
+ {
+ return $this->_streamLanguageIndex;
+ }
+
+ /**
+ * Returns an array of Stream Names. Each stream name instance is potentially
+ * localized into a specific language. The <i>Language Index</i> field
+ * indicates the language in which the <i>Stream Name</i> has been written.
+ *
+ * The array contains the following keys:
+ * o languageIndex -- The language index
+ * o streamName -- The localized stream name
+ *
+ * @return Array
+ */
+ public function getStreamNames()
+ {
+ return $this->_streamNames;
+ }
+
+ /**
+ * Returns an array of payload extension systems. Payload extensions provide a
+ * way for content creators to specify kinds of data that will appear in the
+ * payload header for every payload from this stream. This system is used when
+ * stream properties must be conveyed at the media object level. The
+ * <i>Replicated Data</i> bytes in the payload header will contain these
+ * properties in the order in which the <i>Payload Extension Systems</i>
+ * appear in this object. A <i>Payload Extension System</i> must appear in the
+ * <i>Extended Stream Properties Object</i> for each type of per-media-object
+ * properties that will appear with the payloads for this stream.
+ *
+ * The array contains the following keys:
+ * o extensionSystemId -- Specifies a unique identifier for the extension
+ * system.
+ * o extensionDataSize -- Specifies the fixed size of the extension data for
+ * this system that will appear in the replicated data alongside every
+ * payload for this stream. If this extension system uses variable-size
+ * data, then this should be set to 0xffff. Note, however, that replicated
+ * data length is limited to 255 bytes, which limits the total size of all
+ * extension systems for a particular stream.
+ * o extensionSystemInfo -- Specifies additional information to describe
+ * this extension system (optional).
+ *
+ * @return Array
+ */
+ public function getPayloadExtensionSystems()
+ {
+ return $this->_payloadExtensionSystems;
+ }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/FileProperties.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/FileProperties.php
new file mode 100644
index 0000000..c1e4ada
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/FileProperties.php
@@ -0,0 +1,255 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2006-2008 The PHP Reader Project Workgroup. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: FileProperties.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>File Properties Object</i> defines the global characteristics of the
+ * combined digital media streams found within the Data Object.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+final class ASF_Object_FileProperties extends ASF_Object
+{
+ /**
+ * Indicates, if set, that a file is in the process of being created (for
+ * example, for recording applications), and thus that various values stored
+ * in the header objects are invalid. It is highly recommended that
+ * post-processing be performed to remove this condition at the earliest
+ * opportunity.
+ */
+ const BROADCAST = 1;
+
+ /**
+ * Indicates, if set, that a file is seekable. Note that for files containing
+ * a single audio stream and a <i>Minimum Data Packet Size</i> field equal to
+ * the <i>Maximum Data Packet Size</i> field, this flag shall always be set to
+ * 1. For files containing a single audio stream and a video stream or
+ * mutually exclusive video streams, this flag is only set to 1 if the file
+ * contains a matching <i>Simple Index Object</i> for each regular video
+ * stream.
+ */
+ const SEEKABLE = 2;
+
+ /** @var string */
+ private $_fileId;
+
+ /** @var integer */
+ private $_fileSize;
+
+ /** @var integer */
+ private $_creationDate;
+
+ /** @var integer */
+ private $_dataPacketsCount;
+
+ /** @var integer */
+ private $_playDuration;
+
+ /** @var integer */
+ private $_sendDuration;
+
+ /** @var integer */
+ private $_preroll;
+
+ /** @var integer */
+ private $_flags;
+
+ /** @var integer */
+ private $_minimumDataPacketSize;
+
+ /** @var integer */
+ private $_maximumDataPacketSize;
+
+ /** @var integer */
+ private $_maximumBitrate;
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_fileId = $this->_reader->readGUID();
+ $this->_fileSize = $this->_reader->readInt64LE();
+ $this->_creationDate = $this->_reader->readInt64LE();
+ $this->_dataPacketsCount = $this->_reader->readInt64LE();
+ $this->_playDuration = $this->_reader->readInt64LE();
+ $this->_sendDuration = $this->_reader->readInt64LE();
+ $this->_preroll = $this->_reader->readInt64LE();
+ $this->_flags = $this->_reader->readUInt32LE();
+ $this->_minimumDataPacketSize = $this->_reader->readUInt32LE();
+ $this->_maximumDataPacketSize = $this->_reader->readUInt32LE();
+ $this->_maximumBitrate = $this->_reader->readUInt32LE();
+ }
+
+ /**
+ * Returns the file id field.
+ *
+ * @return integer
+ */
+ public function getFileId() { return $this->_fileId; }
+
+ /**
+ * Returns the size, in bytes, of the entire file. The value of this field is
+ * invalid if the broadcast flag bit in the flags field is set to 1.
+ *
+ * @return integer
+ */
+ public function getFileSize() { return $this->_fileSize; }
+
+ /**
+ * Returns the date and time of the initial creation of the file. The value is
+ * given as the number of 100-nanosecond intervals since January 1, 1601,
+ * according to Coordinated Universal Time (Greenwich Mean Time). The value of
+ * this field may be invalid if the broadcast flag bit in the flags field is
+ * set to 1.
+ *
+ * @return integer
+ */
+ public function getCreationDate() { return $this->_creationDate; }
+
+ /**
+ * Returns the number of Data Packet entries that exist within the
+ * {@link ASF_Object_Data Data Object}. The value of this field is invalid if
+ * the broadcast flag bit in the flags field is set to 1.
+ *
+ * @return integer
+ */
+ public function getDataPacketsCount() { return $this->_dataPacketsCount; }
+
+ /**
+ * Returns the time needed to play the file in 100-nanosecond units. This
+ * value should include the duration (estimated, if an exact value is
+ * unavailable) of the the last media object in the presentation. The value of
+ * this field is invalid if the broadcast flag bit in the flags field is set
+ * to 1.
+ *
+ * @return integer
+ */
+ public function getPlayDuration() { return $this->_playDuration; }
+
+ /**
+ * Returns the time needed to send the file in 100-nanosecond units. This
+ * value should include the duration of the last packet in the content. The
+ * value of this field is invalid if the broadcast flag bit in the flags field
+ * is set to 1.
+ *
+ * @return integer
+ */
+ public function getSendDuration() { return $this->_sendDuration; }
+
+ /**
+ * Returns the amount of time to buffer data before starting to play the file,
+ * in millisecond units. If this value is nonzero, the <i>Play Duration</i>
+ * field and all of the payload <i>Presentation Time</i> fields have been
+ * offset by this amount. Therefore, player software must subtract the value
+ * in the preroll field from the play duration and presentation times to
+ * calculate their actual values.
+ *
+ * @return integer
+ */
+ public function getPreroll() { return $this->_preroll; }
+
+ /**
+ * Checks whether or not the flag is set. Returns <var>true</var> if the flag
+ * is set, <var>false</var> otherwise.
+ *
+ * @param integer $flag The flag to query.
+ * @return boolean
+ */
+ public function hasFlag($flag) { return ($this->_flags & $flag) == $flag; }
+
+ /**
+ * Returns the flags field.
+ *
+ * @return integer
+ */
+ public function getFlags() { return $this->_flags; }
+
+ /**
+ * Returns the minimum <i>Data Packet</i> size in bytes. In general, the value
+ * of this field is invalid if the broadcast flag bit in the flags field is
+ * set to 1. However, the values for the <i>Minimum Data Packet Size</i> and
+ * <i>Maximum Data Packet Size</i> fields shall be set to the same value, and
+ * this value should be set to the packet size, even when the broadcast flag
+ * in the flags field is set to 1.
+ *
+ * @return integer
+ */
+ public function getMinimumDataPacketSize()
+ {
+ return $this->_minimumDataPacketSize;
+ }
+
+ /**
+ * Returns the maximum <i>Data Packet</i> size in bytes. In general, the value
+ * of this field is invalid if the broadcast flag bit in the flags field is
+ * set to 1. However, the values for the <i>Minimum Data Packet Size</i> and
+ * <i>Maximum Data Packet Size</i> fields shall be set to the same value, and
+ * this value should be set to the packet size, even when the broadcast flag
+ * in the flags field is set to 1.
+ *
+ * @return integer
+ */
+ public function getMaximumDataPacketSize()
+ {
+ return $this->_maximumDataPacketSize;
+ }
+
+ /**
+ * Returns the maximum instantaneous bit rate in bits per second for the
+ * entire file. This is equal the sum of the bit rates of the individual
+ * digital media streams.
+ *
+ * @return integer
+ */
+ public function getMaximumBitrate() { return $this->_maximumBitrate; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/GroupMutualExclusion.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/GroupMutualExclusion.php
new file mode 100644
index 0000000..f5bc6e4
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/GroupMutualExclusion.php
@@ -0,0 +1,108 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: GroupMutualExclusion.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Group Mutual Exclusion Object</i> is used to describe mutual exclusion
+ * relationships between groups of streams. This object is organized in terms of
+ * records, each containing one or more streams, where a stream in record N
+ * cannot coexist with a stream in record M for N != M (however, streams in the
+ * same record can coexist). This mutual exclusion object would be used
+ * typically for the purpose of language mutual exclusion, and a record would
+ * consist of all streams for a particular language.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_GroupMutualExclusion extends ASF_Object
+{
+ const MUTEX_LANGUAGE = "d6e22a00-35da-11d1-9034-00a0c90349be";
+ const MUTEX_BITRATE = "d6e22a01-35da-11d1-9034-00a0c90349be";
+ const MUTEX_UNKNOWN = "d6e22a02-35da-11d1-9034-00a0c90349be";
+
+ /** @var string */
+ private $_exclusionType;
+
+ /** @var Array */
+ private $_records = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+ $this->_exclusionType = $this->_reader->readGUID();
+ $recordCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $recordCount; $i++) {
+ $streamNumbersCount = $this->_reader->readUInt16LE();
+ $streamNumbers = array();
+ for ($j = 0; $j < $streamNumbersCount; $j++)
+ $streamNumbers[] = array
+ ("streamNumbers" => $this->_reader->readUInt16LE());
+ $this->_records[] = $streamNumbers;
+ }
+ }
+
+ /**
+ * Returns the nature of the mutual exclusion relationship.
+ *
+ * @return string
+ */
+ public function getExclusionType() { return $this->_exclusionType; }
+
+ /**
+ * Returns an array of records. Each record consists of the following keys.
+ *
+ * o streamNumbers -- Specifies the stream numbers for this record. Valid
+ * values are between 1 and 127.
+ *
+ * @return Array
+ */
+ public function getRecords() { return $this->_records; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Header.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Header.php
new file mode 100644
index 0000000..489ea78
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Header.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2006-2008 The PHP Reader Project Workgroup. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Header.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object/Container.php");
+/**#@-*/
+
+/**
+ * The role of the header object is to provide a well-known byte sequence at the
+ * beginning of ASF files and to contain all the information that is needed to
+ * properly interpret the information within the data object. The header object
+ * can optionally contain metadata such as bibliographic information.
+ *
+ * Of the three top-level ASF objects, the header object is the only one that
+ * contains other ASF objects. The header object may include a number of
+ * standard objects including, but not limited to:
+ *
+ * o File Properties Object -- Contains global file attributes.
+ * o Stream Properties Object -- Defines a digital media stream and its
+ * characteristics.
+ * o Header Extension Object -- Allows additional functionality to be added to
+ * an ASF file while maintaining backward compatibility.
+ * o Content Description Object -- Contains bibliographic information.
+ * o Script Command Object -- Contains commands that can be executed on the
+ * playback timeline.
+ * o Marker Object -- Provides named jump points within a file.
+ *
+ * Note that objects in the header object may appear in any order. To be valid,
+ * the header object must contain a {@link ASF_Object_FileProperties File
+ * Properties Object}, a {@link ASF_Object_HeaderExtension Header Extension
+ * Object}, and at least one {@link ASF_Object_StreamProperties Stream
+ * Properties Object}.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2006-2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+final class ASF_Object_Header extends ASF_Object_Container
+{
+ const FILE_PROPERTIES = "8cabdca1-a947-11cf-8ee4-00c00c205365";
+ const STREAM_PROPERTIES = "b7dc0791-a9b7-11cf-8ee6-00c00c205365";
+ const HEADER_EXTENSION = "5fbf03b5-a92e-11cf-8ee3-00c00c205365";
+ const CODEC_LIST = "86d15240-311d-11d0-a3a4-00a0c90348f6";
+ const SCRIPT_COMMAND = "1efb1a30-0b62-11d0-a39b-00a0c90348f6";
+ const MARKER = "f487cd01-a951-11cf-8ee6-00c00c205365";
+ const BITRATE_MUTUAL_EXCLUSION = "d6e229dc-35da-11d1-9034-00a0c90349be";
+ const ERROR_CORRECTION = "75b22635-668e-11cf-a6d9-00aa0062ce6c";
+ const CONTENT_DESCRIPTION = "75b22633-668e-11cf-a6d9-00aa0062ce6c";
+ const EXTENDED_CONTENT_DESCRIPTION = "d2d0a440-e307-11d2-97f0-00a0c95ea850";
+ const CONTENT_BRANDING = "2211b3fa-bd23-11d2-b4b7-00a0c955fc6e";
+ const STREAM_BITRATE_PROPERTIES = "7bf875ce-468d-11d1-8d82-006097c9a2b2";
+ const CONTENT_ENCRYPTION = "2211b3fb-bd23-11d2-b4b7-00a0c955fc6e";
+ const EXTENDED_CONTENT_ENCRYPTION = "298ae614-2622-4c17-b935-dae07ee9289c";
+ const DIGITAL_SIGNATURE = "2211b3fc-bd23-11d2-b4b7-00a0c955fc6e";
+ const PADDING = "1806d474-cadf-4509-a4ba-9aabcb96aae8";
+
+ /**
+ * Constructs the class with given parameters and options.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_reader->skip(6);
+ $this->constructObjects
+ (array
+ (self::FILE_PROPERTIES => "FileProperties",
+ self::STREAM_PROPERTIES => "StreamProperties",
+ self::HEADER_EXTENSION => "HeaderExtension",
+ self::CODEC_LIST => "CodecList",
+ self::SCRIPT_COMMAND => "ScriptCommand",
+ self::MARKER => "Marker",
+ self::BITRATE_MUTUAL_EXCLUSION => "BitrateMutualExclusion",
+ self::ERROR_CORRECTION => "ErrorCorrection",
+ self::CONTENT_DESCRIPTION => "ContentDescription",
+ self::EXTENDED_CONTENT_DESCRIPTION => "ExtendedContentDescription",
+ self::CONTENT_BRANDING => "ContentBranding",
+ self::STREAM_BITRATE_PROPERTIES => "StreamBitrateProperties",
+ self::CONTENT_ENCRYPTION => "ContentEncryption",
+ self::EXTENDED_CONTENT_ENCRYPTION => "ExtendedContentEncryption",
+ self::DIGITAL_SIGNATURE => "DigitalSignature",
+ self::PADDING => "Padding"));
+ }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/HeaderExtension.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/HeaderExtension.php
new file mode 100644
index 0000000..92c8c0d
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/HeaderExtension.php
@@ -0,0 +1,101 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: HeaderExtension.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object/Container.php");
+/**#@-*/
+
+/**
+ * The <i>Header Extension Object</i> allows additional functionality to be
+ * added to an ASF file while maintaining backward compatibility. The Header
+ * Extension Object is a container containing zero or more additional extended
+ * header objects.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_HeaderExtension extends ASF_Object_Container
+{
+ const EXTENDED_STREAM_PROPERTIES = "14e6a5cb-c672-4332-8399-a96952065b5a";
+ const ADVANCED_MUTUAL_EXCLUSION = "a08649cf-4775-4670-8a16-6e35357566cd";
+ const GROUP_MUTUAL_EXCLUSION = "d1465a40-5a79-4338-b71b-e36b8fd6c249";
+ const STREAM_PRIORITIZATION = "d4fed15b-88d3-454f-81f0-ed5c45999e24";
+ const BANDWIDTH_SHARING = "a69609e6-517b-11d2-b6af-00c04fd908e9";
+ const LANGUAGE_LIST = "7c4346a9-efe0-4bfc-b229-393ede415c85";
+ const METADATA = "c5f8cbea-5baf-4877-8467-aa8c44fa4cca";
+ const METADATA_LIBRARY = "44231c94-9498-49d1-a141-1d134e457054";
+ const INDEX_PARAMETERS = "d6e229df-35da-11d1-9034-00a0c90349be";
+ const MEDIA_OBJECT_INDEX_PARAMETERS = "6b203bad-3f11-48e4-aca8-d7613de2cfa7";
+ const TIMECODE_INDEX_PARAMETERS = "f55e496d-9797-4b5d-8c8b-604dfe9bfb24";
+ const COMPATIBILITY = "75b22630-668e-11cf-a6d9-00aa0062ce6c";
+ const ADVANCED_CONTENT_ENCRYPTION = "43058533-6981-49e6-9b74-ad12cb86d58c";
+ const PADDING = "1806d474-cadf-4509-a4ba-9aabcb96aae8";
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_reader->skip(22);
+ $this->constructObjects
+ (array
+ (self::EXTENDED_STREAM_PROPERTIES => "ExtendedStreamProperties",
+ self::ADVANCED_MUTUAL_EXCLUSION => "AdvancedMutualExclusion",
+ self::GROUP_MUTUAL_EXCLUSION => "GroupMutualExclusion",
+ self::STREAM_PRIORITIZATION => "StreamPrioritization",
+ self::BANDWIDTH_SHARING => "BandwidthSharing",
+ self::LANGUAGE_LIST => "LanguageList",
+ self::METADATA => "Metadata",
+ self::METADATA_LIBRARY => "MetadataLibrary",
+ self::INDEX_PARAMETERS => "IndexParameters",
+ self::MEDIA_OBJECT_INDEX_PARAMETERS => "MediaObjectIndexParameters",
+ self::TIMECODE_INDEX_PARAMETERS => "TimecodeIndexParameters",
+ self::COMPATIBILITY => "Compatibility",
+ self::ADVANCED_CONTENT_ENCRYPTION => "AdvancedContentEncryption",
+ self::PADDING => "Padding"));
+ }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Index.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Index.php
new file mode 100644
index 0000000..6ce63ca
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Index.php
@@ -0,0 +1,185 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Index.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * This top-level ASF object supplies the necessary indexing information for an
+ * ASF file that contains more than just a plain script-audio-video combination.
+ * It includes stream-specific indexing information based on an adjustable index
+ * entry time interval. The index is designed to be broken into blocks to
+ * facilitate storage that is more space-efficient by using 32-bit offsets
+ * relative to a 64-bit base. That is, each index block has a full 64-bit offset
+ * in the block header that is added to the 32-bit offsets found in each index
+ * entry. If a file is larger than 2^32 bytes, then multiple index blocks can be
+ * used to fully index the entire large file while still keeping index entry
+ * offsets at 32 bits.
+ *
+ * Indices into the <i>Index Object</i> are in terms of presentation times. The
+ * corresponding <i>Offset</i> field values of the <i>Index Entry</i> byte
+ * offsets that, when combined with the <i>Block Position</i> value of the
+ * <i>Index Block</i>, indicate the starting location in bytes of an ASF Data
+ * Packet relative to the start of the first ASF Data Packet in the file.
+ *
+ * An offset value of 0xFFFFFFFF is used to indicate an invalid offset value.
+ * Invalid offsets signify that this particular index entry does not identify a
+ * valid indexible point. Invalid offsets may occur for the initial index
+ * entries of a digital media stream whose first ASF Data Packet has a non-zero
+ * send time. Invalid offsets may also occur in the case where a digital media
+ * stream has a large gap in the presentation time of successive objects.
+ *
+ * The <i>Index Object</i> is not recommended for use with files where the
+ * <i>Send Time</i> of the first <i>Data Packet</i> within the <i>Data
+ * Object</i> has a <i>Send Time</i> value significantly greater than zero
+ * (otherwise the index itself will be sparse and inefficient).
+ *
+ * Any ASF file containing an <i>Index Object</i> does also contain an <i>Index
+ * Parameters Object</i> in its {@link ASF_Object_Header ASF Header}.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_Index extends ASF_Object
+{
+ /**
+ * Indicates that the index type is Nearest Past Data Packet. The Nearest
+ * Past Data Packet indexes point to the data packet whose presentation time
+ * is closest to the index entry time.
+ */
+ const NEAREST_PAST_DATA_PACKET = 1;
+
+ /**
+ * Indicates that the index type is Nearest Past Media. The Nearest Past
+ * Object indexes point to the closest data packet containing an entire object
+ * or first fragment of an object.
+ */
+ const NEAREST_PAST_MEDIA = 2;
+
+ /**
+ * Indicates that the index type is Nearest Past Cleanpoint. The Nearest Past
+ * Cleanpoint indexes point to the closest data packet containing an entire
+ * object (or first fragment of an object) that has the Cleanpoint Flag set.
+ *
+ * Nearest Past Cleanpoint is the most common type of index.
+ */
+ const NEAREST_PAST_CLEANPOINT = 3;
+
+ /** @var integer */
+ private $_indexEntryTimeInterval;
+
+ /** @var Array */
+ private $_indexSpecifiers = array();
+
+ /** @var Array */
+ private $_indexBlocks = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_indexEntryTimeInterval = $this->_reader->readUInt32LE();
+ $indexSpecifiersCount = $this->_reader->readUInt16LE();
+ $indexBlocksCount = $this->_reader->readUInt32LE();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $this->_indexSpecifiers[] = array
+ ("streamNumber" => $this->_reader->readUInt16LE(),
+ "indexType" => $this->_reader->readUInt16LE());
+ for ($i = 0; $i < $indexBlocksCount; $i++) {
+ $indexEntryCount = $this->_reader->readUInt32LE();
+ $blockPositions = array();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $blockPositions[] = $this->_reader->readInt64LE();
+ $offsets = array();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $offsets[] = $this->_reader->readUInt32LE();
+ $this->_indexBlocks[] = array
+ ("blockPositions" => $blockPositions,
+ "indexEntryOffsets" => $offsets);
+ }
+ }
+
+ /**
+ * Returns the time interval between each index entry in ms.
+ *
+ * @return integer
+ */
+ public function getIndexEntryTimeInterval()
+ {
+ return $this->_indexEntryTimeInterval;
+ }
+
+ /**
+ * Returns an array of index specifiers. Each entry consists of the following
+ * keys.
+ *
+ * o streamNumber -- Specifies the stream number that the <i>Index
+ * Specifiers</i> refer to. Valid values are between 1 and 127.
+ *
+ * o indexType -- Specifies the type of index.
+ *
+ * @return Array
+ */
+ public function getIndexSpecifiers() { return $this->_indexSpecifiers; }
+
+ /**
+ * Returns an array of index entries. Each entry consists of the following
+ * keys.
+ *
+ * o blockPositions -- Specifies a list of byte offsets of the beginnings of
+ * the blocks relative to the beginning of the first Data Packet (for
+ * example, the beginning of the Data Object + 50 bytes).
+ *
+ * o indexEntryOffsets -- Specifies the offset. An offset value of
+ * 0xffffffff indicates an invalid offset value.
+ *
+ * @return Array
+ */
+ public function getIndexBlocks() { return $this->_indexBlocks; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/IndexParameters.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/IndexParameters.php
new file mode 100644
index 0000000..d8229d9
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/IndexParameters.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: IndexParameters.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Index Parameters Object</i> supplies information about those streams
+ * that are actually indexed (there must be at least one stream in an index) by
+ * the {@link ASF_Object_Index Index Object} and how they are being indexed.
+ * This object shall be present in the {@link ASF_Object_Header Header Object}
+ * if there is an {@link ASF_Object_Index Index Object} present in the file.
+ *
+ * An Index Specifier is required for each stream that will be indexed by the
+ * {@link ASF_Object_Index Index Object}. These specifiers must exactly match
+ * those in the {@link ASF_Object_Index Index Object}.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_IndexParameters extends ASF_Object
+{
+ /** @var string */
+ private $_indexEntryTimeInterval;
+
+ /** @var Array */
+ private $_indexSpecifiers = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_indexEntryTimeInterval = $this->_reader->readUInt32LE();
+ $indexSpecifiersCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++) {
+ $this->_indexSpecifiers[] = array
+ ("streamNumber" => $this->_reader->readUInt16LE(),
+ "indexType" => $this->_reader->readUInt16LE());
+ }
+ }
+
+ /**
+ * Returns the time interval between index entries in milliseconds. This value
+ * cannot be 0.
+ *
+ * @return integer
+ */
+ public function getIndexEntryTimeInterval()
+ {
+ return $this->_indexEntryTimeInterval;
+ }
+
+ /**
+ * Returns an array of index entries. Each entry consists of the following
+ * keys.
+ *
+ * o streamNumber -- Specifies the stream number that the Index Specifiers
+ * refer to. Valid values are between 1 and 127.
+ *
+ * o indexType -- Specifies the type of index. Values are as follows:
+ * 1 = Nearest Past Data Packet,
+ * 2 = Nearest Past Media Object, and
+ * 3 = Nearest Past Cleanpoint.
+ * The Nearest Past Data Packet indexes point to the data packet whose
+ * presentation time is closest to the index entry time. The Nearest Past
+ * Object indexes point to the closest data packet containing an entire
+ * object or first fragment of an object. The Nearest Past Cleanpoint
+ * indexes point to the closest data packet containing an entire object
+ * (or first fragment of an object) that has the Cleanpoint Flag set.
+ * Nearest Past Cleanpoint is the most common type of index.
+ *
+ * @return Array
+ */
+ public function getIndexSpecifiers() { return $this->_indexSpecifiers; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/LanguageList.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/LanguageList.php
new file mode 100644
index 0000000..13c6950
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/LanguageList.php
@@ -0,0 +1,85 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: LanguageList.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Language List Object</i> contains an array of Unicode-based language
+ * IDs. All other header objects refer to languages through zero-based positions
+ * in this array.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+final class ASF_Object_LanguageList extends ASF_Object
+{
+ /** @var Array */
+ private $_languages = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $languageIdRecordsCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $languageIdRecordsCount; $i++) {
+ $languageIdLength = $this->_reader->readInt8();
+ $languageId = $this->_reader->readString16LE($languageIdLength);
+ $this->_languages[] = iconv
+ ("utf-16le", $this->getOption("encoding"), $languageId);
+ }
+ }
+
+ /**
+ * Returns the array of language ids.
+ *
+ * @return Array
+ */
+ public function getLanguage() { return $this->_languages; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Marker.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Marker.php
new file mode 100644
index 0000000..697cb4a
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Marker.php
@@ -0,0 +1,121 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Marker.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Marker Object</i> class.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_Marker extends ASF_Object
+{
+ /** @var string */
+ private $_name;
+
+ /** @var Array */
+ private $_markers = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_reader->skip(16);
+ $markersCount = $this->_reader->readUInt32LE();
+ $this->_reader->skip(2);
+ $nameLength = $this->_reader->readUInt16LE();
+ $this->_name = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($nameLength));
+ for ($i = 0; $i < $markersCount; $i++) {
+ $marker = array
+ ("offset" => $this->_reader->readInt64LE(),
+ "presentationTime" => $this->_reader->readInt64LE());
+ $this->_reader->skip(2);
+ $marker["sendTime"] = $this->_reader->readUInt32LE();
+ $marker["flags"] = $this->_reader->readUInt32LE();
+ $descriptionLength = $this->_reader->readUInt32LE();
+ $marker["description"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($descriptionLength));
+ $this->_markers[] = $marker;
+ }
+ }
+
+ /**
+ * Returns the name of the Marker Object.
+ *
+ * @return Array
+ */
+ public function getName() { return $this->_name; }
+
+ /**
+ * Returns an array of markers. Each entry consists of the following keys.
+ *
+ * o offset -- Specifies a byte offset into the <i>Data Object</i> to the
+ * actual position of the marker in the <i>Data Object</i>. ASF parsers
+ * must seek to this position to properly display data at the specified
+ * marker <i>Presentation Time</i>.
+ *
+ * o presentationTime -- Specifies the presentation time of the marker, in
+ * 100-nanosecond units.
+ *
+ * o sendTime -- Specifies the send time of the marker entry, in
+ * milliseconds.
+ *
+ * o flags -- Flags are reserved and should be set to 0.
+ *
+ * o description -- Specifies a description of the marker entry.
+ *
+ * @return Array
+ */
+ public function getMarkers() { return $this->_markers; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MediaObjectIndex.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MediaObjectIndex.php
new file mode 100644
index 0000000..676abd1
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MediaObjectIndex.php
@@ -0,0 +1,176 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: MediaObjectIndex.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * This top-level ASF object supplies media object indexing information for the
+ * streams of an ASF file. It includes stream-specific indexing information
+ * based on an adjustable index entry media object count interval. This object
+ * can be used to index all the video frames or key frames in a video stream.
+ * The index is designed to be broken into blocks to facilitate storage that is
+ * more space-efficient by using 32-bit offsets relative to a 64-bit base. That
+ * is, each index block has a full 64-bit offset in the block header that is
+ * added to the 32-bit offset found in each index entry. If a file is larger
+ * than 2^32 bytes, then multiple index blocks can be used to fully index the
+ * entire large file while still keeping index entry offsets at 32 bits.
+ *
+ * Indices into the <i>Media Object Index Object</i> are in terms of media
+ * object numbers, with the first frame for a given stream in the ASF file
+ * corresponding to entry 0 in the <i>Media Object Index Object</i>. The
+ * corresponding <i>Offset</i> field values of the <i>Index Entry</i> are byte
+ * offsets that, when combined with the <i>Block Position</i> value of the
+ * Index Block, indicate the starting location in bytes of an ASF Data Packet
+ * relative to the start of the first ASF Data Packet in the file.
+ *
+ * Any ASF file containing a <i>Media Object Index Object</i> shall also contain
+ * a <i>Media Object Index Parameters Object</i> in its
+ * {@link ASF_Object_Header ASF Header}.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_MediaObjectIndex extends ASF_Object
+{
+ /**
+ * Indicates that the index type is Nearest Past Data Packet. The Nearest
+ * Past Data Packet indexes point to the data packet whose presentation time
+ * is closest to the index entry time.
+ */
+ const NEAREST_PAST_DATA_PACKET = 1;
+
+ /**
+ * Indicates that the index type is Nearest Past Media. The Nearest Past
+ * Object indexes point to the closest data packet containing an entire object
+ * or first fragment of an object.
+ */
+ const NEAREST_PAST_MEDIA = 2;
+
+ /**
+ * Indicates that the index type is Nearest Past Cleanpoint. The Nearest Past
+ * Cleanpoint indexes point to the closest data packet containing an entire
+ * object (or first fragment of an object) that has the Cleanpoint Flag set.
+ *
+ * Nearest Past Cleanpoint is the most common type of index.
+ */
+ const NEAREST_PAST_CLEANPOINT = 3;
+
+ /** @var integer */
+ private $_indexEntryCountInterval;
+
+ /** @var Array */
+ private $_indexSpecifiers = array();
+
+ /** @var Array */
+ private $_indexBlocks = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_indexEntryCountInterval = $this->_reader->readUInt32LE();
+ $indexSpecifiersCount = $this->_reader->readUInt16LE();
+ $indexBlocksCount = $this->_reader->readUInt32LE();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $this->_indexSpecifiers[] = array
+ ("streamNumber" => $this->_reader->readUInt16LE(),
+ "indexType" => $this->_reader->readUInt16LE());
+ for ($i = 0; $i < $indexBlocksCount; $i++) {
+ $indexEntryCount = $this->_reader->readUInt32LE();
+ $blockPositions = array();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $blockPositions[] = $this->_reader->readInt64LE();
+ $offsets = array();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $offsets[] = $this->_reader->readUInt32LE();
+ $this->_indexBlocks[] = array
+ ("blockPositions" => $blockPositions,
+ "indexEntryOffsets" => $offsets);
+ }
+ }
+
+ /**
+ * Returns the interval between each index entry in number of media objects.
+ *
+ * @return integer
+ */
+ public function getIndexEntryCountInterval()
+ {
+ return $this->_indexEntryCountInterval;
+ }
+
+ /**
+ * Returns an array of index specifiers. Each entry consists of the following
+ * keys.
+ *
+ * o streamNumber -- Specifies the stream number that the <i>Index
+ * Specifiers</i> refer to. Valid values are between 1 and 127.
+ *
+ * o indexType -- Specifies the type of index.
+ *
+ * @return Array
+ */
+ public function getIndexSpecifiers() { return $this->_indexSpecifiers; }
+
+ /**
+ * Returns an array of index entries. Each entry consists of the following
+ * keys.
+ *
+ * o blockPositions -- Specifies a list of byte offsets of the beginnings of
+ * the blocks relative to the beginning of the first Data Packet (for
+ * example, the beginning of the Data Object + 50 bytes).
+ *
+ * o indexEntryOffsets -- Specifies the offset. An offset value of
+ * 0xffffffff indicates an invalid offset value.
+ *
+ * @return Array
+ */
+ public function getIndexBlocks() { return $this->_indexBlocks; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MediaObjectIndexParameters.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MediaObjectIndexParameters.php
new file mode 100644
index 0000000..ffc8998
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MediaObjectIndexParameters.php
@@ -0,0 +1,130 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: MediaObjectIndexParameters.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Media Object Index Parameters Object</i> supplies information about
+ * those streams that actually indexed (there must be at least one stream in an
+ * index) by media objects. This object shall be present in the
+ * {@link ASF_Object_Header Header Object} if there is a
+ * {@link ASF_Object_MediaObjectIndex Media Object Index Object} present in the
+ * file.
+ *
+ * An Index Specifier is required for each stream that will be indexed by the
+ * {@link ASF_Object_MediaObjectIndex Media Object Index Object}. These
+ * specifiers must exactly match those in the
+ * {@link ASF_Object_MediaObjectIndex Media Object Index Object}.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_MediaObjectIndexParameters extends ASF_Object
+{
+ /** @var string */
+ private $_indexEntryCountInterval;
+
+ /** @var Array */
+ private $_indexSpecifiers = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_indexEntryCountInterval = $this->_reader->readUInt32LE();
+ $indexSpecifiersCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++) {
+ $this->_indexSpecifiers[] = array
+ ("streamNumber" => $this->_reader->readUInt16LE(),
+ "indexType" => $this->_reader->readUInt16LE());
+ }
+ }
+
+ /**
+ * Returns the interval between each index entry by the number of media
+ * objects. This value cannot be 0.
+ *
+ * @return integer
+ */
+ public function getIndexEntryCountInterval()
+ {
+ return $this->_indexEntryCountInterval;
+ }
+
+ /**
+ * Returns an array of index entries. Each entry consists of the following
+ * keys.
+ *
+ * o streamNumber -- Specifies the stream number that the Index Specifiers
+ * refer to. Valid values are between 1 and 127.
+ *
+ * o indexType -- Specifies the type of index. Values are defined as
+ * follows:
+ * 1 = Nearest Past Data Packet,
+ * 2 = Nearest Past Media Object,
+ * 3 = Nearest Past Cleanpoint,
+ * 0xff = Frame Number Offset.
+ * For a video stream, the Nearest Past Media Object and Nearest Past Data
+ * Packet indexes point to the closest data packet containing an entire
+ * video frame or first fragment of a video frame; Nearest Past Cleanpoint
+ * indexes point to the closest data packet containing an entire video
+ * frame (or first fragment of a video frame) that is a key frame; and
+ * Frame Number Offset indicates how many more frames need to be read for
+ * the given stream, starting with the first frame in the packet pointed
+ * to by the index entry, in order to get to the requested frame. Nearest
+ * Past Media Object is the most common value. Because ASF payloads do not
+ * contain the full frame number, there is often a Frame Number Offset
+ * index alongside one of the other types of indexes to allow the user to
+ * identify the exact frame being seeked to.
+ *
+ * @return Array
+ */
+ public function getIndexSpecifiers() { return $this->_indexSpecifiers; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Metadata.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Metadata.php
new file mode 100644
index 0000000..67b75e2
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Metadata.php
@@ -0,0 +1,113 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Metadata.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Metadata Object</i> permits authors to store stream-based metadata in
+ * a file. This object supports the same types of metadata information as the
+ * <i>Extended Content Description Object</i> except that it also allows a
+ * stream number to be specified.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+final class ASF_Object_Metadata extends ASF_Object
+{
+ /** @var Array */
+ private $_descriptions = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $descriptionRecordsCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $descriptionRecordsCount; $i++) {
+ $this->_reader->skip(2);
+ $record = array("streamNumber" => $this->_reader->readUInt16LE());
+ $nameLength = $this->_reader->readUInt16LE();
+ $dataType = $this->_reader->readUInt16LE();
+ $dataLength = $this->_reader->readUInt32LE();
+ $record["name"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($nameLength));
+ switch ($dataType) {
+ case 0:
+ $record["data"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($dataLength));
+ break;
+ case 1:
+ $record["data"] = $this->_reader->readString16LE($dataLength);
+ break;
+ case 2:
+ $record["data"] = $this->_reader->readUInt16LE() ? true : false;
+ break;
+ case 3:
+ $record["data"] = $this->_reader->readUInt32LE();
+ break;
+ case 4:
+ $record["data"] = $this->_reader->readInt64LE();
+ break;
+ case 5:
+ $record["data"] = $this->_reader->readUInt16LE();
+ break;
+ }
+ $this->_descriptions[] = $record;
+ }
+ }
+
+ /**
+ * Returns the array of description records.
+ *
+ * @return Array
+ */
+ public function getDescriptions() { return $this->_descriptions; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MetadataLibrary.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MetadataLibrary.php
new file mode 100644
index 0000000..4a03fdf
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/MetadataLibrary.php
@@ -0,0 +1,137 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: MetadataLibrary.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Metadata Library Object</i> lets authors store stream-based,
+ * language-attributed, multiply defined, and large metadata attributes in a
+ * file.
+ *
+ * This object supports the same types of metadata as the
+ * <i>{@link ASF_Object_Metadata Metadata Object}</i>, as well as attributes
+ * with language IDs, attributes that are defined more than once, large
+ * attributes, and attributes with the GUID data type.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_MetadataLibrary extends ASF_Object
+{
+ /** @var Array */
+ private $_descriptionRecords = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $descriptionRecordsCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $descriptionRecordsCount; $i++) {
+ $descriptionRecord = array
+ ("languageIndex" => $this->_reader->readUInt16LE(),
+ "streamNumber" => $this->_reader->readUInt16LE());
+ $nameLength = $this->_reader->readUInt16LE();
+ $dataType = $this->_reader->readUInt16LE();
+ $dataLength = $this->_reader->readUInt32LE();
+ $descriptionRecord["name"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($nameLength));
+ switch ($dataType) {
+ case 0: // Unicode string
+ $descriptionRecord["data"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($dataLength));
+ break;
+ case 1: // BYTE array
+ $descriptionRecord["data"] = $this->_reader->read($dataLength);
+ break;
+ case 2: // BOOL
+ $descriptionRecord["data"] = $this->_reader->readUInt16LE() == 1;
+ break;
+ case 3: // DWORD
+ $descriptionRecord["data"] = $this->_reader->readUInt32LE();
+ break;
+ case 4: // QWORD
+ $descriptionRecord["data"] = $this->_reader->readInt64LE();
+ break;
+ case 5: // WORD
+ $descriptionRecord["data"] = $this->_reader->readUInt16LE();
+ break;
+ case 6: // GUID
+ $descriptionRecord["data"] = $this->_reader->readGUID();
+ break;
+ }
+ $this->_descriptionRecords[] = $descriptionRecord;
+ }
+ }
+
+ /**
+ * Returns an array of description records. Each record consists of the
+ * following keys.
+ *
+ * o languageIndex -- Specifies the index into the <i>Language List
+ * Object</i> that identifies the language of this attribute. If there is
+ * no <i>Language List Object</i> present, this field is zero.
+ *
+ * o streamNumber -- Specifies whether the entry applies to a specific
+ * digital media stream or whether it applies to the whole file. A value
+ * of 0 in this field indicates that it applies to the whole file;
+ * otherwise, the entry applies only to the indicated stream number. Valid
+ * values are between 1 and 127.
+ *
+ * o name -- Specifies the name that identifies the attribute being
+ * described.
+ *
+ * o data -- Specifies the actual metadata being stored.
+ *
+ * @return Array
+ */
+ public function getDescriptionRecords() { return $this->_descriptionRecords; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Padding.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Padding.php
new file mode 100644
index 0000000..4e0be36
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Padding.php
@@ -0,0 +1,64 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: Padding.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Padding Object</i> is a dummy object that is used to pad the size of
+ * the <i>Header Object</i>. This object enables the size of any object stored
+ * in the <i>Header Object</i> to grow or shrink without having to rewrite the
+ * entire <i>Data Object</i> and <i>Index Object</i> sections of the ASF file.
+ * For instance, if entries in the <i>Content Description Object</i> or
+ * <i>Extended Content Description Object</i> need to be removed or shortened,
+ * the size of the <i>Padding Object</i> can be increased to compensate for the
+ * reduction in size of the <i>Content Description Object</i>. The ASF file can
+ * then be updated by overwriting the previous <i>Header Object</i> with the
+ * edited <i>Header Object</i> of identical size, without having to move or
+ * rewrite the data contained in the <i>Data Object</i>.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+final class ASF_Object_Padding extends ASF_Object
+{
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ScriptCommand.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ScriptCommand.php
new file mode 100644
index 0000000..4fdbfd6
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/ScriptCommand.php
@@ -0,0 +1,124 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: ScriptCommand.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Script Command Object</i> provides a list of type/parameter pairs of
+ * strings that are synchronized to the ASF file's timeline. Types can include
+ * URL or FILENAME values. Other type values may also be freely defined and
+ * used. The semantics and treatment of this set of types are defined by the
+ * local implementations. The parameter value is specific to the type field. You
+ * can use this type/parameter pairing for many purposes, including sending URLs
+ * to be launched by a client into an HTML frame (in other words, the URL type)
+ * or launching another ASF file for the chained continuous play of audio or
+ * video presentations (in other words, the FILENAME type). This object is also
+ * used as a method to stream text, as well as to provide script commands that
+ * you can use to control elements within the client environment.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_ScriptCommand extends ASF_Object
+{
+ /** @var Array */
+ private $_commandTypes = array();
+
+ /** @var Array */
+ private $_commands = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_reader->skip(16);
+ $commandsCount = $this->_reader->readUInt16LE();
+ $commandTypesCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $commandTypesCount; $i++) {
+ $commandTypeNameLength = $this->_reader->readUInt16LE();
+ $this->_commandTypes[] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($commandTypeNameLength * 2));
+ }
+ for ($i = 0; $i < $commandsCount; $i++) {
+ $command = array
+ ("presentationTime" => $this->_reader->readUInt32LE(),
+ "typeIndex" => $this->_reader->readUInt16LE());
+ $commandNameLength = $this->_reader->readUInt16LE();
+ $command["name"] = iconv
+ ("utf-16le", $this->getOption("encoding"),
+ $this->_reader->readString16LE($commandNameLength * 2));
+ $this->_commands[] = $command;
+ }
+ }
+
+ /**
+ * Returns an array of command type names.
+ *
+ * @return Array
+ */
+ public function getCommandTypes() { return $this->_commandTypes; }
+
+ /**
+ * Returns an array of index entries. Each entry consists of the following
+ * keys.
+ *
+ * o presentationTime -- Specifies the presentation time of the command, in
+ * milliseconds.
+ *
+ * o typeIndex -- Specifies the type of this command, as a zero-based index
+ * into the array of Command Types of this object.
+ *
+ * o name -- Specifies the name of this command.
+ *
+ * @return Array
+ */
+ public function getCommands() { return $this->_commands; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/SimpleIndex.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/SimpleIndex.php
new file mode 100644
index 0000000..14de7c9
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/SimpleIndex.php
@@ -0,0 +1,143 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: SimpleIndex.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * For each video stream in an ASF file, there should be one instance of the
+ * <i>Simple Index Object</i>. Additionally, the instances of the <i>Simple
+ * Index Object</i> shall be ordered by stream number.
+ *
+ * Index entries in the <i>Simple Index Object</i> are in terms of
+ * <i>Presentation Times</i>. The corresponding <i>Packet Number</i> field
+ * values (of the <i>Index Entry</i>, see below) indicate the packet number of
+ * the ASF <i>Data Packet</i> with the closest past key frame. Note that for
+ * video streams that contain both key frames and non-key frames, the <i>Packet
+ * Number</i> field will always point to the closest past key frame.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_SimpleIndex extends ASF_Object
+{
+ /** @var string */
+ private $_fileId;
+
+ /** @var integer */
+ private $_indexEntryTimeInterval;
+
+ /** @var integer */
+ private $_maximumPacketCount;
+
+ /** @var Array */
+ private $_indexEntries = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_fileId = $this->_reader->readGUID();
+ $this->_indexEntryTimeInterval = $this->_reader->readInt64LE();
+ $this->_maximumPacketCount = $this->_reader->readUInt32LE();
+ $indexEntriesCount = $this->_reader->readUInt32LE();
+ for ($i = 0; $i < $indexEntriesCount; $i++) {
+ $this->_indexEntries[] = array
+ ("packetNumber" => $this->_reader->readUInt32LE(),
+ "packetCount" => $this->_reader->readUInt16LE());
+ }
+ }
+
+ /**
+ * Returns the unique identifier for this ASF file. The value of this field
+ * should be changed every time the file is modified in any way. The value of
+ * this field may be set to 0 or set to be identical to the value of the
+ * <i>File ID</i> field of the <i>Data Object</i> and the <i>Header
+ * Object</i>.
+ *
+ * @return string
+ */
+ public function getFileId() { return $this->_fileId; }
+
+ /**
+ * Returns the time interval between each index entry in 100-nanosecond units.
+ * The most common value is 10000000, to indicate that the index entries are
+ * in 1-second intervals, though other values can be used as well.
+ *
+ * @return integer
+ */
+ public function getIndexEntryTimeInterval()
+ {
+ return $this->_indexEntryTimeInterval;
+ }
+
+ /**
+ * Returns the maximum <i>Packet Count</i> value of all <i>Index Entries</i>.
+ *
+ * @return integer
+ */
+ public function getMaximumPacketCount() { return $this->_maximumPacketCount; }
+
+ /**
+ * Returns an array of index entries. Each entry consists of the following
+ * keys.
+ *
+ * o packetNumber -- Specifies the number of the Data Packet associated
+ * with this index entry. Note that for video streams that contain both
+ * key frames and non-key frames, this field will always point to the
+ * closest key frame prior to the time interval.
+ *
+ * o packetCount -- Specifies the number of <i>Data Packets</i> to send at
+ * this index entry. If a video key frame has been fragmented into two
+ * Data Packets, the value of this field will be equal to 2.
+ *
+ * @return Array
+ */
+ public function getIndexEntries() { return $this->_indexEntries; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamBitrateProperties.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamBitrateProperties.php
new file mode 100644
index 0000000..98fd037
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamBitrateProperties.php
@@ -0,0 +1,93 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: StreamBitrateProperties.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Stream Bitrate Properties Object</i> defines the average bit rate of
+ * each digital media stream.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_StreamBitrateProperties extends ASF_Object
+{
+ /** @var Array */
+ private $_bitrateRecords = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $bitrateRecordsCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $bitrateRecordsCount; $i++)
+ $this->_bitrateRecords[] = array
+ ("streamNumber" => ($tmp = $this->_reader->readInt16LE()) & 0x1f,
+ "flags" => $tmp >> 5,
+ "averageBitrate" => $this->_reader->readUInt32LE());
+ }
+
+ /**
+ * Returns an array of bitrate records. Each record consists of the following
+ * keys.
+ *
+ * o streamNumber -- Specifies the number of this stream described by this
+ * record. 0 is an invalid stream. Valid values are between 1 and 127.
+ *
+ * o flags -- These bits are reserved and should be set to 0.
+ *
+ * o averageBitrate -- Specifies the average bit rate of the stream in bits
+ * per second. This value should include an estimate of ASF packet and
+ * payload overhead associated with this stream.
+ *
+ * @return Array
+ */
+ public function getBitrateRecords() { return $this->_bitrateRecords; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamPrioritization.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamPrioritization.php
new file mode 100644
index 0000000..e5f1bf5
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamPrioritization.php
@@ -0,0 +1,99 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: StreamPrioritization.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Stream Prioritization Object</i> indicates the author's intentions as
+ * to which streams should or should not be dropped in response to varying
+ * network congestion situations. There may be special cases where this
+ * preferential order may be ignored (for example, the user hits the "mute"
+ * button). Generally it is expected that implementations will try to honor the
+ * author's preference.
+ *
+ * The priority of each stream is indicated by how early in the list that
+ * stream's stream number is listed (in other words, the list is ordered in
+ * terms of decreasing priority).
+ *
+ * The Mandatory flag field shall be set if the author wants that stream kept
+ * "regardless". If this flag is not set, then that indicates that the stream
+ * should be dropped in response to network congestion situations. Non-mandatory
+ * streams must never be assigned a higher priority than mandatory streams.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_StreamPrioritization extends ASF_Object
+{
+ /** @var Array */
+ private $_priorityRecords = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+ $priorityRecordCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $priorityRecordCount; $i++)
+ $this->_priorityRecords[] = array
+ ("streamNumber" => $this->_reader->readUInt16LE(),
+ "flags" => $this->_reader->readUInt16LE());
+ }
+
+ /**
+ * Returns an array of records. Each record consists of the following keys.
+ *
+ * o streamNumber -- Specifies the stream number. Valid values are between
+ * 1 and 127.
+ *
+ * o flags -- Specifies the flags. The mandatory flag is the bit 1 (LSB).
+ *
+ * @return Array
+ */
+ public function getPriorityRecords() { return $this->_priorityRecords; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamProperties.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamProperties.php
new file mode 100644
index 0000000..8c42d57
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/StreamProperties.php
@@ -0,0 +1,288 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: StreamProperties.php 102 2008-06-23 20:41:20Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Stream Properties Object</i> defines the specific properties and
+ * characteristics of a digital media stream. This object defines how a digital
+ * media stream within the <i>Data Object</i> is interpreted, as well as the
+ * specific format (of elements) of the <i>Data Packet</i> itself.
+ *
+ * Whereas every stream in an ASF presentation, including each stream in a
+ * mutual exclusion relationship, must be represented by a <i>Stream Properties
+ * Object</i>, in certain cases, this object might be found embedded in the
+ * <i>Extended Stream Properties Object</i>.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 102 $
+ */
+final class ASF_Object_StreamProperties extends ASF_Object
+{
+ /**
+ * Indicates, if set, that the data contained in this stream is encrypted and
+ * will be unreadable unless there is a way to decrypt the stream.
+ */
+ const ENCRYPTED_CONTENT = 0x8000;
+
+ const AUDIO_MEDIA = "f8699e40-5b4d-11cf-a8fd-00805f5c442b";
+ const VIDEO_MEDIA = "bc19efc0-5b4d-11cf-a8fd-00805f5c442b";
+ const COMMAND_MEDIA = "59dacfc0-59e6-11d0-a3ac-00a0c90348f6";
+ const JFIF_MEDIA = "b61be100-5b4e-11cf-a8fD-00805f5c442b";
+ const DEGRADABLE_JPEG_MEDIA = "35907dE0-e415-11cf-a917-00805f5c442b";
+ const FILE_TRANSFER_MEDIA = "91bd222c-f21c-497a-8b6d-5aa86bfc0185";
+ const BINARY_MEDIA = "3afb65e2-47ef-40f2-ac2c-70a90d71d343";
+
+ const NO_ERROR_CORRECTION = "20fb5700-5b55-11cf-a8fd-00805f5c442b";
+ const AUDIO_SPREAD = "bfc3cd50-618f-11cf-8bb2-00aa00b4e220";
+
+ /** @var string */
+ private $_streamType;
+
+ /** @var string */
+ private $_errorCorrectionType;
+
+ /** @var integer */
+ private $_timeOffset;
+
+ /** @var integer */
+ private $_flags;
+
+ /** @var Array */
+ private $_typeSpecificData = array();
+
+ /** @var Array */
+ private $_errorCorrectionData = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_streamType = $this->_reader->readGUID();
+ $this->_errorCorrectionType = $this->_reader->readGUID();
+ $this->_timeOffset = $this->_reader->readInt64LE();
+ $typeSpecificDataLength = $this->_reader->readUInt32LE();
+ $errorCorrectionDataLength = $this->_reader->readUInt32LE();
+ $this->_flags = $this->_reader->readUInt16LE();
+ $this->_reader->skip(4);
+ switch ($this->_streamType) {
+ case self::AUDIO_MEDIA:
+ $this->_typeSpecificData = array
+ ("codecId" => $this->_reader->readUInt16LE(),
+ "numberOfChannels" => $this->_reader->readUInt16LE(),
+ "samplesPerSecond" => $this->_reader->readUInt32LE(),
+ "avgNumBytesPerSecond" => $this->_reader->readUInt32LE(),
+ "blockAlignment" => $this->_reader->readUInt16LE(),
+ "bitsPerSample" => $this->_reader->readUInt16LE());
+ $codecSpecificDataSize = $this->_reader->readUInt16LE();
+ $this->_typeSpecificData["codecSpecificData"] =
+ $this->_reader->read($codecSpecificDataSize);
+ break;
+ case self::VIDEO_MEDIA:
+ $this->_typeSpecificData = array
+ ("encodedImageWidth" => $this->_reader->readUInt32LE(),
+ "encodedImageHeight" => $this->_reader->readUInt32LE(),
+ "reservedFlags" => $this->_reader->readInt8());
+ $this->_reader->skip(2);
+ $formatDataSize = $this->_reader->readUInt32LE();
+ $this->_typeSpecificData = array_merge
+ ($this->_typeSpecificData, array
+ ("imageWidth" => $this->_reader->readUInt32LE(),
+ "imageHeight" => $this->_reader->readUInt32LE(),
+ "reserved" => $this->_reader->readUInt16LE(),
+ "bitsPerPixelCount" => $this->_reader->readUInt16LE(),
+ "compressionId" => $this->_reader->readUInt32LE(),
+ "imageSize" => $this->_reader->readUInt32LE(),
+ "horizontalPixelsPerMeter" => $this->_reader->readUInt32LE(),
+ "verticalPixelsPerMeter" => $this->_reader->readUInt32LE(),
+ "colorsUsedCount" => $this->_reader->readUInt32LE(),
+ "importantColorsCount" => $this->_reader->readUInt32LE(),
+ "codecSpecificData" => $this->_reader->read($formatDataSize - 38)));
+ break;
+ case self::JFIF_MEDIA:
+ $this->_typeSpecificData = array
+ ("imageWidth" => $this->_reader->readUInt32LE(),
+ "imageHeight" => $this->_reader->readUInt32LE(),
+ "reserved" => $this->_reader->readUInt32LE());
+ break;
+ case self::DEGRADABLE_JPEG_MEDIA:
+ $this->_typeSpecificData = array
+ ("imageWidth" => $this->_reader->readUInt32LE(),
+ "imageHeight" => $this->_reader->readUInt32LE(),
+ $this->_reader->readUInt16LE(),
+ $this->_reader->readUInt16LE(),
+ $this->_reader->readUInt16LE());
+ $interchangeDataSize = $this->_reader->readUInt16LE();
+ if ($interchangeDataSize == 0)
+ $interchangeDataSize++;
+ $this->_typeSpecificData["interchangeData"] =
+ $this->_reader->read($interchangeDataSize);
+ break;
+ case self::FILE_TRANSFER_MEDIA:
+ case self::BINARY_MEDIA:
+ $this->_typeSpecificData = array
+ ("majorMediaType" => $this->_reader->getGUID(),
+ "mediaSubtype" => $this->_reader->getGUID(),
+ "fixedSizeSamples" => $this->_reader->readUInt32LE(),
+ "temporalCompression" => $this->_reader->readUInt32LE(),
+ "sampleSize" => $this->_reader->readUInt32LE(),
+ "formatType" => $this->_reader->getGUID());
+ $formatDataSize = $this->_reader->readUInt32LE();
+ $this->_typeSpecificData["formatData"] =
+ $this->_reader->read($formatDataSize);
+ break;
+ case self::COMMAND_MEDIA:
+ default:
+ $this->_reader->skip($typeSpecificDataLength);
+ }
+ switch ($this->_errorCorrectionType) {
+ case self::AUDIO_SPREAD:
+ $this->_errorCorrectionData = array
+ ("span" => $this->_reader->readInt8(),
+ "virtualPacketLength" => $this->_reader->readUInt16LE(),
+ "virtualChunkLength" => $this->_reader->readUInt16LE());
+ $silenceDataSize = $this->_reader->readUInt16LE();
+ $this->_errorCorrectionData["silenceData"] =
+ $this->_reader->read($silenceDataSize);
+ break;
+ case self::NO_ERROR_CORRECTION:
+ default:
+ $this->_reader->skip($errorCorrectionDataLength);
+ }
+ }
+
+ /**
+ * Returns the number of this stream. 0 is an invalid stream. Valid values are
+ * between 1 and 127. The numbers assigned to streams in an ASF presentation
+ * may be any combination of unique values; parsing logic must not assume that
+ * streams are numbered sequentially.
+ *
+ * @return integer
+ */
+ public function getStreamNumber() { return $this->_flags & 0x3f; }
+
+ /**
+ * Returns the type of the stream (for example, audio, video, and so on).
+ *
+ * @return string
+ */
+ public function getStreamType() { return $this->_streamType; }
+
+ /**
+ * Returns the error correction type used by this digital media stream. For
+ * streams other than audio, this value should be set to NO_ERROR_CORRECTION.
+ * For audio streams, this value should be set to AUDIO_SPREAD.
+ *
+ * @return string
+ */
+ public function getErrorCorrectionType()
+ {
+ return $this->_errorCorrectionType;
+ }
+
+ /**
+ * Returns the presentation time offset of the stream in 100-nanosecond units.
+ * The value of this field is added to all of the timestamps of the samples in
+ * the stream. This value shall be equal to the send time of the first
+ * interleaved packet in the data section. The value of this field is
+ * typically 0. It is non-zero in the case when an ASF file is edited and it
+ * is not possible for the editor to change the presentation times and send
+ * times of ASF packets. Note that if more than one stream is present in an
+ * ASF file the offset values of all stream properties objects must be equal.
+ *
+ * @return integer
+ */
+ public function getTimeOffset() { return $this->_timeOffset; }
+
+ /**
+ * Checks whether or not the flag is set. Returns <var>true</var> if the flag
+ * is set, <var>false</var> otherwise.
+ *
+ * @param integer $flag The flag to query.
+ * @return boolean
+ */
+ public function hasFlag($flag) { return ($this->_flags & $flag) == $flag; }
+
+ /**
+ * Returns the flags field.
+ *
+ * @return integer
+ */
+ public function getFlags() { return $this->_flags; }
+
+ /**
+ * Returns type-specific format data. The structure for the <i>Type-Specific
+ * Data</i> field is determined by the value stored in the <i>Stream Type</i>
+ * field.
+ *
+ * The type-specific data is returned as key-value pairs of an associate
+ * array.
+ *
+ * @return Array
+ */
+ public function getTypeSpecificData() { return $this->_typeSpecificData; }
+
+ /**
+ * Returns data specific to the error correction type. The structure for the
+ * <i>Error Correction Data</i> field is determined by the value stored in the
+ * <i>Error Correction Type</i> field. For example, an audio data stream might
+ * need to know how codec chunks were redistributed, or it might need a sample
+ * of encoded silence.
+ *
+ * The error correction type-specific data is returned as key-value pairs of
+ * an associate array.
+ *
+ * @return integer
+ */
+ public function getErrorCorrectionData()
+ {
+ return $this->_errorCorrectionData;
+ }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/TimecodeIndex.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/TimecodeIndex.php
new file mode 100644
index 0000000..943a353
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/TimecodeIndex.php
@@ -0,0 +1,181 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: TimecodeIndex.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * This top-level ASF object supplies timecode indexing information for the
+ * streams of an ASF file. It includes stream-specific indexing information
+ * based on the timecodes found in the file. If the <i>Timecode Index Object</i>
+ * is used, it is recommended that timecodes be stored as a <i>Payload Extension
+ * System</i> on the appropriate stream. It is also recommended that every
+ * timecode appearing in the ASF file have a corresponging index entry.
+ *
+ * The index is designed to be broken into blocks to facilitate storage that is
+ * more space-efficient by using 32-bit offsets relative to a 64-bit base. That
+ * is, each index block has a full 64-bit offset in the block header that is
+ * added to the 32-bit offsets found in each index entry. If a file is larger
+ * than 2^32 bytes, then multiple index blocks can be used to fully index the
+ * entire large file while still keeping index entry offsets at 32 bits.
+ *
+ * To locate an object with a particular timecode in an ASF file, one would
+ * typically look through the <i>Timecode Index Object</i> in blocks of the
+ * appropriate range and try to locate the nearest possible timecode. The
+ * corresponding <i>Offset</i> field values of the <i>Index Entry</i> are byte
+ * offsets that, when combined with the <i>Block Position</i> value of the Index
+ * Block, indicate the starting location in bytes of an ASF Data Packet relative
+ * to the start of the first ASF Data Packet in the file.
+ *
+ * Any ASF file containing a <i>Timecode Index Object</i> shall also contain a
+ * <i>Timecode Index Parameters Object</i> in its
+ * {@link ASF_Object_Header ASF Header}.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_TimecodeIndex extends ASF_Object
+{
+ /**
+ * Indicates that the index type is Nearest Past Data Packet. The Nearest
+ * Past Data Packet indexes point to the data packet whose presentation time
+ * is closest to the index entry time.
+ */
+ const NEAREST_PAST_DATA_PACKET = 1;
+
+ /**
+ * Indicates that the index type is Nearest Past Media. The Nearest Past
+ * Object indexes point to the closest data packet containing an entire object
+ * or first fragment of an object.
+ */
+ const NEAREST_PAST_MEDIA = 2;
+
+ /**
+ * Indicates that the index type is Nearest Past Cleanpoint. The Nearest Past
+ * Cleanpoint indexes point to the closest data packet containing an entire
+ * object (or first fragment of an object) that has the Cleanpoint Flag set.
+ *
+ * Nearest Past Cleanpoint is the most common type of index.
+ */
+ const NEAREST_PAST_CLEANPOINT = 3;
+
+ /** @var Array */
+ private $_indexSpecifiers = array();
+
+ /** @var Array */
+ private $_indexBlocks = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_reader->skip(4);
+ $indexSpecifiersCount = $this->_reader->readUInt16LE();
+ $indexBlocksCount = $this->_reader->readUInt32LE();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $this->_indexSpecifiers[] = array
+ ("streamNumber" => $this->_reader->readUInt16LE(),
+ "indexType" => $this->_reader->readUInt16LE());
+ for ($i = 0; $i < $indexBlocksCount; $i++) {
+ $indexEntryCount = $this->_reader->readUInt32LE();
+ $timecodeRange = $this->_reader->readUInt16LE();
+ $blockPositions = array();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $blockPositions[] = $this->_reader->readInt64LE();
+ $indexEntries = array();
+ for ($i = 0; $i < $indexEntryCount; $i++) {
+ $timecode = $this->_reader->readUInt32LE();
+ $offsets = array();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++)
+ $offsets[] = $this->_reader->readUInt32LE();
+ $indexEntries[] = array
+ ("timecode" => $timecode,
+ "offsets" => $offsets);
+ }
+ $this->_indexBlocks[] = array
+ ("timecodeRange" => $timecodeRange,
+ "blockPositions" => $blockPositions,
+ "indexEntries" => $indexEntries);
+ }
+ }
+
+ /**
+ * Returns an array of index specifiers. Each entry consists of the following
+ * keys.
+ *
+ * o streamNumber -- Specifies the stream number that the <i>Index
+ * Specifiers</i> refer to. Valid values are between 1 and 127.
+ *
+ * o indexType -- Specifies the type of index.
+ *
+ * @return Array
+ */
+ public function getIndexSpecifiers() { return $this->_indexSpecifiers; }
+
+ /**
+ * Returns an array of index entries. Each entry consists of the following
+ * keys.
+ *
+ * o timecodeRange -- Specifies the timecode range for this block.
+ * Subsequent blocks must contain range numbers greater than or equal to
+ * this one.
+ *
+ * o blockPositions -- Specifies a list of byte offsets of the beginnings of
+ * the blocks relative to the beginning of the first Data Packet (for
+ * example, the beginning of the Data Object + 50 bytes).
+ *
+ * o indexEntries -- An array that consists of the following keys
+ * o timecode -- This is the 4-byte timecode for these entries.
+ * o offsets -- Specifies the offset. An offset value of 0xffffffff
+ * indicates an invalid offset value.
+ *
+ * @return Array
+ */
+ public function getIndexBlocks() { return $this->_indexBlocks; }
+}
diff --git a/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/TimecodeIndexParameters.php b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/TimecodeIndexParameters.php
new file mode 100644
index 0000000..a7a9ef8
--- /dev/null
+++ b/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/TimecodeIndexParameters.php
@@ -0,0 +1,125 @@
+<?php
+/**
+ * PHP Reader Library
+ *
+ * Copyright (c) 2008 The PHP Reader Project Workgroup. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * - Redistributions of source code must retain the above copyright notice,
+ * this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * - Neither the name of the project workgroup nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Id: TimecodeIndexParameters.php 108 2008-09-05 17:00:05Z svollbehr $
+ */
+
+/**#@+ @ignore */
+require_once("ASF/Object.php");
+/**#@-*/
+
+/**
+ * The <i>Timecode Index Parameters Object</i> supplies information about those
+ * streams that are actually indexed (there must be at least one stream in an
+ * index) by timecodes. All streams referred to in the
+ * {@link ASF_Object_TimecodeIndexParameters Timecode Index Parameters Object}
+ * must have timecode Payload Extension Systems associated with them in the
+ * {@link ASF_Object_ExtendedStreamProperties Extended Stream Properties
+ * Object}. This object shall be present in the {@link ASF_Object_Header Header
+ * Object} if there is a {@link ASF_Object_TimecodeIndex Timecode Index Object}
+ * present in the file.
+ *
+ * An Index Specifier is required for each stream that will be indexed by the
+ * {@link ASF_Object_TimecodeIndex Timecode Index Object}. These specifiers must
+ * exactly match those in the {@link ASF_Object_TimecodeIndex Timecode Index
+ * Object}.
+ *
+ * @package php-reader
+ * @subpackage ASF
+ * @author Sven Vollbehr <svollbehr@gmail.com>
+ * @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
+ * @license http://code.google.com/p/php-reader/wiki/License New BSD License
+ * @version $Rev: 108 $
+ */
+final class ASF_Object_TimecodeIndexParameters extends ASF_Object
+{
+ /** @var string */
+ private $_indexEntryCountInterval;
+
+ /** @var Array */
+ private $_indexSpecifiers = array();
+
+ /**
+ * Constructs the class with given parameters and reads object related data
+ * from the ASF file.
+ *
+ * @param Reader $reader The reader object.
+ * @param Array $options The options array.
+ */
+ public function __construct($reader, &$options = array())
+ {
+ parent::__construct($reader, $options);
+
+ $this->_indexEntryCountInterval = $this->_reader->readUInt32LE();
+ $indexSpecifiersCount = $this->_reader->readUInt16LE();
+ for ($i = 0; $i < $indexSpecifiersCount; $i++) {
+ $this->_indexSpecifiers[] = array
+ ("streamNumber" => $this->_reader->readUInt16LE(),
+ "indexType" => $this->_reader->readUInt16LE());
+ }
+ }
+
+ /**
+ * Returns the interval between each index entry by the number of media
+ * objects. This value cannot be 0.
+ *
+ * @return integer
+ */
+ public function getIndexEntryCountInterval()
+ {
+ return $this->_indexEntryCountInterval;
+ }
+
+ /**
+ * Returns an array of index entries. Each entry consists of the following
+ * keys.
+ *
+ * o streamNumber -- Specifies the stream number that the Index Specifiers
+ * refer to. Valid values are between 1 and 127.
+ *
+ * o indexType -- Specifies the type of index. Values are defined as
+ * follows:
+ * 2 = Nearest Past Media Object,
+ * 3 = Nearest Past Cleanpoint (1 is not a valid value).
+ * For a video stream, The Nearest Past Media Object indexes point to the
+ * closest data packet containing an entire video frame or the first
+ * fragment of a video frame, and the Nearest Past Cleanpoint indexes
+ * point to the closest data packet containing an entire video frame (or
+ * first fragment of a video frame) that is a key frame. Nearest Past
+ * Media Object is the most common value.
+ *
+ * @return Array
+ */
+ public function getIndexSpecifiers() { return $this->_indexSpecifiers; }
+}