aboutsummaryrefslogtreecommitdiff
path: root/libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Container.php
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Container.php')
-rw-r--r--libraries/phpvideotoolkit/adapters/ffmpeg-php/php-reader/src/ASF/Object/Container.php195
1 files changed, 195 insertions, 0 deletions
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]);
+ }
+}