Merge zend branch into trunk

git-svn-id: http://php-reader.googlecode.com/svn/trunk@177 51a70ab9-7547-0410-9469-37e369ee0574
This commit is contained in:
svollbehr
2010-03-09 13:13:34 +00:00
466 changed files with 34633 additions and 32013 deletions

View File

@@ -1,2 +1,7 @@
include.path=${php.global.include.path}
source.encoding=UTF-8
version=4
src.dir=src
tags.asp=false
tags.short=true
test.src.dir=tests
web.root=.

View File

@@ -1,216 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2006-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("Reader.php");
require_once("ASF/Object/Container.php");
/**#@-*/
/**
* This class represents a file in Advanced Systems Format (ASF) as described in
* {@link http://go.microsoft.com/fwlink/?LinkId=31334 The Advanced Systems
* Format (ASF) Specification}. It is a file format that can contain various
* types of information ranging from audio and video to script commands and
* developer defined custom streams.
*
* The ASF file consists of code blocks that are called content objects. Each
* of these objects have a format of their own. They may contain other objects
* or other specific data. Each supported object has been implemented as their
* own classes to ease the correct use of the information.
*
* @package php-reader
* @subpackage ASF
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2006-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
class ASF extends ASF_Object_Container
{
/** @var string */
private $_filename;
/**
* Constructs the ASF class with given file and options.
*
* The following options are currently recognized:
* o encoding -- Indicates the encoding that all the texts are presented
* with. By default this is set to utf-8. See the documentation of iconv
* for accepted values.
* o readonly -- Indicates that the file is read from a temporary location
* or another source it cannot be written back to.
*
* @param string $filename The path to the file or file descriptor of an
* opened file.
* @param Array $options The options array.
*/
public function __construct($filename, $options = array())
{
$this->_reader = new Reader($this->_filename = $filename);
$this->setOptions($options);
if ($this->getOption("encoding", false) === false)
$this->setOption("encoding", "utf-8");
$this->setOffset(0);
$this->setSize($this->_reader->getSize());
$this->constructObjects
(array
(self::HEADER => "Header",
self::DATA => "Data",
self::SIMPLE_INDEX => "SimpleIndex",
self::INDEX => "Index",
self::MEDIA_OBJECT_INDEX => "MediaObjectIndex",
self::TIMECODE_INDEX => "TimecodeIndex"));
}
/**
* Returns the mandatory header object contained in this file.
*
* @return ASF_Object_Header
*/
public function getHeader()
{
$header = $this->getObjectsByIdentifier(self::HEADER);
return $header[0];
}
/**
* Returns the mandatory data object contained in this file.
*
* @return ASF_Object_Data
*/
public function getData()
{
$data = $this->getObjectsByIdentifier(self::DATA);
return $data[0];
}
/**
* Returns an array of index objects contained in this file.
*
* @return Array
*/
public function getIndices()
{
return $this->getObjectsByIdentifier
(self::SIMPLE_INDEX . "|" . self::INDEX . "|" .
self::MEDIA_OBJECT_INDEX . "|" . self::TIMECODE_INDEX);
}
/**
* Writes the changes back to the original media file.
*/
public function write($filename = false)
{
if ($filename === false)
$filename = $this->_filename;
if ($filename !== false && $this->_filename !== false &&
realpath($filename) != realpath($this->_filename) &&
!copy($this->_filename, $filename)) {
require_once("ASF/Exception.php");
throw new ASF_Exception("Unable to copy source to destination: " .
realpath($this->_filename) . "->" . realpath($filename));
}
if (($fd = fopen
($filename, file_exists($filename) ? "r+b" : "wb")) === false) {
require_once("ASF/Exception.php");
throw new ASF_Exception("Unable to open file for writing: " . $filename);
}
$header = $this->getHeader();
$headerLengthOld = $header->getSize();
$header->removeObjectsByIdentifier(ASF_Object::PADDING);
$header->headerExtension->removeObjectsByIdentifier(ASF_Object::PADDING);
$headerData = $header->__toString();
$headerLengthNew = $header->getSize();
// Fits right in
if ($headerLengthOld == $headerLengthNew) {
}
// Fits with adjusted padding
else if ($headerLengthOld >= $headerLengthNew + 24 /* for header */) {
$header->headerExtension->padding->setSize
($headerLengthOld - $headerLengthNew);
$headerData = $header->__toString();
$headerLengthNew = $header->getSize();
}
// Must expand
else {
$header->headerExtension->padding->setSize(4096);
$headerData = $header->__toString();
$headerLengthNew = $header->getSize();
fseek($fd, 0, SEEK_END);
$oldFileSize = ftell($fd);
ftruncate
($fd, $newFileSize = $headerLengthNew - $headerLengthOld +
$oldFileSize);
for ($i = 1, $cur = $oldFileSize; $cur > 0; $cur -= 1024, $i++) {
fseek($fd, -(($i * 1024) + ($newFileSize - $oldFileSize)), SEEK_END);
$buffer = fread($fd, 1024);
fseek($fd, -($i * 1024), SEEK_END);
fwrite($fd, $buffer, 1024);
}
}
fseek($fd, 0);
fwrite($fd, $headerData, $headerLengthNew);
fclose($fd);
$this->_filename = $filename;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return true; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
}

View File

@@ -1,51 +0,0 @@
<?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$
*/
/**
* 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$
*/
class ASF_Exception extends Exception
{
}

View File

@@ -1,301 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2006-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**
* 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
abstract class ASF_Object
{
/* ASF Objects */
const HEADER = "75b22630-668e-11cf-a6d9-00aa0062ce6c";
const DATA = "75b22636-668e-11cf-a6d9-00aa0062ce6c";
const SIMPLE_INDEX = "33000890-e5b1-11cf-89f4-00a0c90349cb";
const INDEX = "d6e229d3-35da-11d1-9034-00a0c90349be";
const MEDIA_OBJECT_INDEX = "feb103f8-12ad-4c64-840f-2a1d2f7ad48c";
const TIMECODE_INDEX = "3cb73fd0-0c4a-4803-953d-edf7b6228f0c";
/* Header Objects */
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";
/* Header Extension Objects */
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";
/**
* The reader object.
*
* @var Reader
*/
protected $_reader;
/**
* The options array.
*
* @var Array
*/
protected $_options;
/** @var integer */
private $_offset = false;
/** @var string */
private $_identifier = false;
/** @var integer */
private $_size = false;
/** @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;
if ($reader === null) {
if (defined($constant = "self::" . strtoupper
(preg_replace
("/(?<=[a-z])[A-Z]/", "_$0", substr(get_class($this), 11)))))
$this->_identifier = constant($constant);
else {
require_once("ASF/Exception.php");
throw new ASF_Exception("Object identifier could not be determined");
}
} else {
$this->_offset = $this->_reader->getOffset();
$this->_identifier = $this->_reader->readGUID();
$this->_size = $this->_reader->readInt64LE();
}
}
/**
* Returns the file offset to object start, or <var>false</var> if the object
* was created on heap.
*
* @return integer
*/
public final function getOffset() { return $this->_offset; }
/**
* Sets the file offset where the object starts.
*
* @param integer $offset The file offset to object start.
*/
public final function setOffset($offset) { $this->_offset = $offset; }
/**
* Returns the GUID of the ASF object.
*
* @return string
*/
public final function getIdentifier() { return $this->_identifier; }
/**
* Set the GUID of the ASF object.
*
* @param string $id The GUID
*/
public final function setIdentifier($identifier)
{
$this->_identifier = $identifier;
}
/**
* Returns the object size in bytes, including the header.
*
* @return integer
*/
public final function getSize() { return $this->_size; }
/**
* Sets the object size. The size must include the 24 byte header.
*
* @param integer $size The object size.
*/
public final 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 final 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 final function getOption($option, $defaultValue = false)
{
if (isset($this->_options[$option]))
return $this->_options[$option];
return $defaultValue;
}
/**
* Sets the options array. See {@link ASF} class for available options.
*
* @param Array $options The options array.
*/
public final 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 final function setOption($option, $value)
{
$this->_options[$option] = $value;
}
/**
* Returns the parent object containing this object.
*
* @return ASF_Object
*/
public final function getParent() { return $this->_parent; }
/**
* Sets the parent containing object.
*
* @param ASF_Object $parent The parent object.
*/
public final 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)));
if (method_exists($this, "is" . ucfirst($name)))
return call_user_func(array($this, "is" . ucfirst($name)));
require_once("ASF/Exception.php");
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 {
require_once("ASF/Exception.php");
throw new ASF_Exception("Unknown field: " . $name);
}
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public abstract function isMandatory();
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public abstract function isMultiple();
}

View File

@@ -1,186 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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. 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.
*
* o data -- The content protection data for this Content Encryption Record.
*
* @return Array
*/
public function getContentEncryptionRecords()
{
return $this->_contentEncryptionRecords;
}
/**
* Sets the array of content encryption records. Each record must consist 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. 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.
*
* o data -- The content protection data for this Content Encryption Record.
*
* @param Array $contentEncryptionRecords The array of content encryption
* records.
*/
public function setContentEncryptionRecords($contentEncryptionRecords)
{
$this->_contentEncryptionRecords = $contentEncryptionRecords;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toUInt16LE
($contentEncryptionRecordsCount =
count($this->_contentEncryptionRecords));
for ($i = 0; $i < $contentEncryptionRecordsCount; $i++) {
$data .=
Transform::toGUID($this->_contentEncryptionRecords["systemId"]) .
Transform::toUInt32LE
($this->_contentEncryptionRecords["systemVersion"]) .
Transform::toUInt16LE
($encryptedObjectRecordCount =
$this->_contentEncryptionRecords["streamNumbers"]);
for ($j = 0; $j < $encryptedObjectRecordCount; $j++)
$data .=
Transform::toUInt16LE(1) . Transform::toUInt16LE(2) .
Transform::toUInt16LE
($this->_contentEncryptionRecords["streamNumbers"][$j]);
$data .= strlen($this->_contentEncryptionRecords["data"]) .
$this->_contentEncryptionRecords;
}
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,159 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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 the nature of the mutual exclusion relationship.
*
* @return string
*/
public function setExclusionType($exclusionType)
{
$this->_exclusionType = $exclusionType;
}
/**
* Returns an array of stream numbers.
*
* @return Array
*/
public function getStreamNumbers() { return $this->_streamNumbers; }
/**
* Sets the array of stream numbers.
*
* @return Array
*/
public function setStreamNumbers($streamNumbers)
{
$this->_streamNumbers = $streamNumbers;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return true; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toGUID($this->_exclusionType) .
Transform::toUInt16LE($streamNumbersCount = count($this->_streamNumbers));
for ($i = 0; $i < $streamNumbersCount; $i++)
$data .= Transform::toUInt16LE($this->_streamNumbers[$i]);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,226 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, $options);
if ($reader === null)
return;
$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; }
/**
* Sets 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 setSharingType($sharingType)
{
$this->_sharingType = $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; }
/**
* Sets 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.
*
* @param integer $dataBitrate The data bitrate.
*/
public function setDataBitrate($dataBitrate)
{
$this->_dataBitrate = $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; }
/**
* Sets 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.
*
* @param integer $bufferSize The buffer size.
*/
public function setBufferSize($bufferSize)
{
$this->_bufferSize = $bufferSize;
}
/**
* Returns an array of stream numbers.
*
* @return Array
*/
public function getStreamNumbers() { return $this->_streamNumbers; }
/**
* Sets the array of stream numbers.
*
* @param Array $streamNumbers The array of stream numbers.
*/
public function setStreamNumbers($streamNumbers)
{
$this->_streamNumbers = $streamNumbers;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return true; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toGUID($this->_sharingType) .
Transform::toUInt32LE($this->_dataBitrate) .
Transform::toUInt32LE($this->_bufferSize) .
Transform::toUInt16LE($streamNumbersCount = count($this->_streamNumber));
for ($i = 0; $i < $streamNumbersCount; $i++)
$data .= Transform::toUInt16LE($this->_streamNumbers[$i]);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,160 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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; }
/**
* Sets the nature of the mutual exclusion relationship.
*
* @param string $exclusionType The nature of the mutual exclusion
* relationship.
*/
public function setExclusionType($exclusionType)
{
$this->_exclusionType = $exclusionType;
}
/**
* Returns an array of stream numbers.
*
* @return Array
*/
public function getStreamNumbers() { return $this->_streamNumbers; }
/**
* Sets the array of stream numbers.
*
* @param Array $streamNumbers The array of stream numbers.
*/
public function setStreamNumbers($streamNumbers)
{
$this->_streamNumbers = $streamNumbers;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toGUID($this->_exclusionType) .
Transform::toUInt16LE($streamNumbersCount = count($this->_streamNumbers));
for ($i = 0; $i < $streamNumbersCount; $i++)
$data .= Transform::toUInt16LE($this->_streamNumbers[$i]);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,181 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_CodecList extends ASF_Object
{
const VIDEO_CODEC = 0x1;
const AUDIO_CODEC = 0x2;
const UNKNOWN_CODEC = 0xffff;
/** @var string */
private $_reserved;
/** @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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_reserved = $this->_reader->readGUID();
$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->readString16($codecNameLength));
$codecDescriptionLength = $this->_reader->readUInt16LE() * 2;
$entry["codecDescription"] = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($codecDescriptionLength));
$codecInformationLength = $this->_reader->readUInt16LE();
$entry["codecInformation"] =
$this->_reader->read($codecInformationLength);
$this->_entries[] = $entry;
}
}
/**
* Returns the array of codec entries. Each record consists of the following
* keys.
*
* o type -- Specifies the type of the codec used. Use one of the following
* values: VIDEO_CODEC, AUDIO_CODEC, or UNKNOWN_CODEC.
*
* o codecName -- Specifies the name of the codec used to create the
* content.
*
* o codecDescription -- Specifies the description of the format used to
* create the content.
*
* o codecInformation -- Specifies an opaque array of information bytes
* about the codec used to create the content. The meaning of these bytes
* is determined by the codec.
*
* @return Array
*/
public function getEntries() { return $this->_entries; }
/**
* Sets the array of codec entries. Each record must consist of the following
* keys.
*
* o codecName -- Specifies the name of the codec used to create the
* content.
*
* o codecDescription -- Specifies the description of the format used to
* create the content.
*
* o codecInformation -- Specifies an opaque array of information bytes
* about the codec used to create the content. The meaning of these bytes
* is determined by the codec.
*
* @param Array $entries The array of codec entries.
*/
public function setEntries($entries) { $this->_entries = $entries; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = Transform::toGUID($this->_reserved) .
Transform::toUInt32LE($codecEntriesCount = count($this->_entries));
for ($i = 0; $i < $codecEntriesCount; $i++) {
$data .= Transform::toUInt16LE($this->_entries[$i]["type"]) .
Transform::toUInt16LE(strlen($codecName = iconv
($this->getOption("encoding"), "utf-16le",
$this->_entries[$i]["codecName"]) . "\0\0") / 2) .
Transform::toString16($codecName) .
Transform::toUInt16LE(strlen($codecDescription = iconv
($this->getOption("encoding"), "utf-16le",
$this->_entries[$i]["codecDescription"]) . "\0\0") / 2) .
Transform::toString16($codecDescription) .
Transform::toUInt16LE(strlen($this->_entries[$i]["codecInformation"])) .
$this->_entries[$i]["codecInformation"];
}
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,138 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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 profile field. This field is reserved and is set to 2.
*
* @param integer $profile The profile.
*/
public function setProfile($profile) { $this->_profile = $profile; }
/**
* Returns the mode field. This field is reserved and is set to 1.
*
* @return integer
*/
public function getMode() { return $this->_mode; }
/**
* Sets the mode field. This field is reserved and is set to 1.
*
* @param integer $mode The mode.
*/
public function setMode($mode) { $this->_mode = $mode; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toUInt8($this->_profile) .
Transform::toUInt8($this->_mode);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,330 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ASF/Object.php");
require_once("ASF/Object/Unknown.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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
abstract class ASF_Object_Container extends ASF_Object
{
/** @var Array */
private $_objects = array();
/**
* Reads and constructs the objects found within this object.
*/
protected final 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_Unknown($this->_reader, $this->_options);
} else
$object = new ASF_Object_Unknown($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 identifier is present in the file. The
* identifier can either be the object GUID, or name of the constant
* containing the GUID, or the name of the object class.
*
* Returns <var>true</var> if one or more objects are present,
* <var>false</var> otherwise.
*
* @param string $identifier The object GUID, name of the GUID constant, or
* object class name.
* @return boolean
*/
public final function hasObject($identifier)
{
if (defined($constname = get_class($this) . "::" . strtoupper
(preg_replace("/[A-Z]/", "_$0", $identifier)))) {
$objects = $this->getObjectsByIdentifier(constant($constname));
return isset($objects[0]);
}
else
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 final 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.
*
* @param string $identifier The object GUID.
* @return Array
*/
public final 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;
}
/**
* Returns an array of objects matching the given object constant name or an
* empty array if no object matched the name.
*
* The object constant name can be given in three forms; either using the full
* name of the constant, the name of the class or the shorthand style of the
* class name having its first letter in lower case.
*
* One may use the shorthand $obj->name to access the first box with the name
* given directly. Shorthands will not work with user defined uuid types.
*
* The name may not contain wildcard characters.
*
* @param string $name The object constant name or class name.
* @return Array
*/
public final function getObjectsByName($name)
{
if (defined($constname = get_class($this) . "::" . $name) ||
defined($constname = get_class($this) . "::" . strtoupper
(preg_replace
("/^_/", "", preg_replace("/[A-Z]/", "_$0", $name)))))
return $this->getObjectsByIdentifier(constant($constname));
return array();
}
/**
* Removes any objects matching the given object GUID.
*
* The identifier may contain wildcard characters "*" and "?". The asterisk
* matches against zero or more characters, and the question mark matches any
* single character.
*
* One may also use the shorthand unset($obj->name) to achieve the same
* result. Wildcards cannot be used with the shorthand method.
*
* @param string $identifier The object GUID.
*/
public final function removeObjectsByIdentifier($identifier)
{
$searchPattern = "/^" .
str_replace(array("*", "?"), array(".*", "."), $identifier) . "$/i";
foreach ($this->_objects as $identifier => $objects)
if (preg_match($searchPattern, $identifier))
unset($this->_objects[$identifier]);
}
/**
* Removes any objects matching the given object name.
*
* The name can be given in three forms; either using the full name of the
* constant, the name of the class or the shorthand style of the class name
* having its first letter in lower case.
*
* One may also use the shorthand unset($obj->name) to achieve the same
* result.
*
* The name may not contain wildcard characters.
*
* @param string $name The object constant name or class name.
*/
public final function removeObjectsByName($name)
{
if (defined($constname = get_class($this) . "::" . strtoupper
(preg_replace("/[A-Z]/", "_$0", $name))))
unset($this->_objects[constant($constname)]);
}
/**
* Adds a new object into the current object and returns it.
*
* @param ASF_Object $object The object to add
* @return ASF_Object
*/
public final 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;
}
/**
* Removes the object.
*
* @param ASF_Object $object The object to remove
*/
public final function removeObject($object)
{
if ($this->hasObject($object->getIdentifier())) {
foreach ($this->_objects[$object->getIdentifier()] as $key => $value)
if ($object === $value)
unset($this->_objects[$object->getIdentifier()][$key]);
}
}
/**
* 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).
* If no object is found by the given value, a respective class name is tried
* to instantiate and add to the container.
*
* @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 (method_exists($this, "is" . ucfirst($name)))
return call_user_func(array($this, "is" . 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];
else {
if (@fopen($filename = "ASF/Object/" . ucfirst($name) .
".php", "r", true) !== false)
require_once($filename);
if (class_exists
($classname = "ASF_Object_" . ucfirst($name))) {
$obj = new $classname();
$obj->setIdentifier(constant($constname));
return $this->addObject($obj);
}
}
}
require_once("ASF/Exception.php");
throw new ASF_Exception("Unknown field/object: " . $name);
}
/**
* Override magic function so that $obj->value will work as expected.
*
* The method first attempts to call the appropriate setter method. If no
* field with given name is found, the method attempts to set the right
* object instead. In other words, assigning to $obj->value will attempt to
* set the object with given value's identifier.
*
* Please note that using this method will override any prior objects having
* the same object identifier.
*
* @param string $name The field or object name.
* @param string $value The field value or object.
* @return mixed
*/
public function __set($name, $value)
{
if (method_exists($this, "set" . ucfirst($name)))
call_user_func(array($this, "set" . ucfirst($name)), $value);
if (defined($constname = get_class($this) . "::" . strtoupper
(preg_replace("/[A-Z]/", "_$0", $name)))) {
$value->setOptions($this->_options);
$this->_objects[constant($constname)] = array($value);
}
else {
require_once("ASF/Exception.php");
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 or name is contained by this
* container.
*
* @param string $name The object identifier or logical name.
* @return boolean
*/
public function __isset($name) { return $this->hasObject($name); }
/**
* Magic function so that unset($obj->value) will work. This method removes
* all the objects with the given identifier or name.
*
* @param string $name The object identifier or logical name.
*/
public function __unset($name) { $this->removeObjectsByName($name); }
}

View File

@@ -1,219 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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; }
/**
* Sets 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.
*
* @param integer $bannerImageType The type of data.
*/
public function setBannerImageType($bannerImageType)
{
$this->_bannerImageType = $bannerImageType;
}
/**
* Returns the entire banner image, including the header for the appropriate
* image format.
*
* @return string
*/
public function getBannerImageData() { return $this->_bannerImageData; }
/**
* Sets the entire banner image, including the header for the appropriate
* image format.
*
* @param string $bannerImageData The entire banner image.
*/
public function setBannerImageData($bannerImageData)
{
$this->_bannerImageData = $bannerImageData;
}
/**
* Returns, if present, a link to more information about the banner image.
*
* @return string
*/
public function getBannerImageUrl() { return $this->_bannerImageUrl; }
/**
* Sets a link to more information about the banner image.
*
* @param string $bannerImageUrl The link.
*/
public function setBannerImageUrl($bannerImageUrl)
{
$this->_bannerImageUrl = $bannerImageUrl;
}
/**
* Returns, if present, a link to more information about the copyright for the
* content.
*
* @return string
*/
public function getCopyrightUrl() { return $this->_copyrightUrl; }
/**
* Sets a link to more information about the copyright for the content.
*
* @param string $copyrightUrl The copyright link.
*/
public function setCopyrightUrl($copyrightUrl)
{
$this->_copyrightUrl = $copyrightUrl;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toUInt32LE($this->_bannerImageType) .
Transform::toUInt32LE(count($this->_bannerImageData)) .
$this->_bannerImageData .
Transform::toUInt32LE(count($this->_bannerImageUrl)) .
$this->_bannerImageUrl .
Transform::toUInt32LE(count($this->_copyrightUrl)) .
$this->_copyrightUrl;
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,238 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2006-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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->readString16($titleLen));
$this->_author = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($authorLen));
$this->_copyright = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($copyrightLen));
$this->_description = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($descriptionLen));
$this->_rating = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($ratingLen));
}
/**
* Returns the title information.
*
* @return string
*/
public function getTitle() { return $this->_title; }
/**
* Sets the title information.
*
* @param string $title The title information.
*/
public function setTitle($title) { $this->_title = $title; }
/**
* Returns the author information.
*
* @return string
*/
public function getAuthor() { return $this->_author; }
/**
* Sets the author information.
*
* @param string $author The author information.
*/
public function setAuthor($author) { $this->_author = $author; }
/**
* Returns the copyright information.
*
* @return string
*/
public function getCopyright() { return $this->_copyright; }
/**
* Sets the copyright information.
*
* @param string $copyright The copyright information.
*/
public function setCopyright($copyright) { $this->_copyright = $copyright; }
/**
* Returns the description information.
*
* @return string
*/
public function getDescription() { return $this->_description; }
/**
* Sets the description information.
*
* @param string $description The description information.
*/
public function setDescription($description)
{
$this->_description = $description;
}
/**
* Returns the rating information.
*
* @return string
*/
public function getRating() { return $this->_rating; }
/**
* Sets the rating information.
*
* @param string $rating The rating information.
*/
public function setRating($rating) { $this->_rating = $rating; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$title = iconv
($this->getOption("encoding"), "utf-16le",
$this->_title ? $this->_title . "\0" : "");
$author = iconv
($this->getOption("encoding"), "utf-16le",
$this->_author ? $this->_author . "\0" : "");
$copyright = iconv
($this->getOption("encoding"), "utf-16le",
$this->_copyright ? $this->_copyright . "\0" : "");
$description = iconv
($this->getOption("encoding"), "utf-16le",
$this->_description ? $this->_description . "\0" : "");
$rating = iconv
($this->getOption("encoding"), "utf-16le",
$this->_rating ? $this->_rating . "\0" : "");
$data =
Transform::toUInt16LE(strlen($title)) .
Transform::toUInt16LE(strlen($author)) .
Transform::toUInt16LE(strlen($copyright)) .
Transform::toUInt16LE(strlen($description)) .
Transform::toUInt16LE(strlen($rating)) .
Transform::toString16($title) .
Transform::toString16($author) .
Transform::toString16($copyright) .
Transform::toString16($description) .
Transform::toString16($rating);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,198 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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; }
/**
* Sets the secret data.
*
* @param string $secretData The secret data.
*/
public function setSecretData($secretData)
{
$this->_secretData = $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; }
/**
* Sets the type of protection mechanism used. The value of this field
* is to be set to "DRM".
*
* @param string $protectionType The protection mechanism used.
*/
public function setProtectionType($protectionType)
{
$this->_protectionType = $protectionType;
}
/**
* Returns the key ID used.
*
* @return string
*/
public function getKeyId() { return $this->_keyId; }
/**
* Sets the key ID used.
*
* @param string $keyId The key ID used.
*/
public function setKeyId($keyId) { $this->_keyId = $keyId; }
/**
* Returns the URL from which a license to manipulate the content can be
* acquired.
*
* @return string
*/
public function getLicenseUrl() { return $this->_licenseUrl; }
/**
* Returns the URL from which a license to manipulate the content can be
* acquired.
*
* @param string $licenseUrl The URL from which a license can be acquired.
*/
public function setLicenseUrl($licenseUrl)
{
$this->_licenseUrl = $licenseUrl;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toUInt32LE(strlen($this->_secretData)) .
$this->_secretData .
Transform::toUInt32LE($len = strlen($this->_protectionType) + 1) .
Transform::toString8($this->_protectionType, $len) .
Transform::toUInt32LE($len = strlen($this->_keyId) + 1) .
Transform::toString8($this->_keyId, $len) .
Transform::toUInt32LE($len = strlen($this->_licenseUrl) + 1) .
Transform::toString8($this->_licenseUrl, $len);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,142 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ASF/Object.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 support for ASF Data Packets
* @package php-reader
* @subpackage ASF
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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);
/* Support for Data Packets is not done yet
* 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->_totalDataPackets; }
/**
* Returns an array of Data Packets.
*
* @return Array
*/
public function getDataPackets()
{
require_once("ASF/Exception.php");
throw new ASF_Exception("Support for Data Packets is not done yet");
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return true; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
}

View File

@@ -1,141 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_DigitalSignature extends ASF_Object
{
/** @var integer */
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_type = $this->_reader->readUInt32LE();
$dataLength = $this->_reader->readUInt32LE();
$this->_data = $this->_reader->read($dataLength);
}
/**
* Returns the type of digital signature used. This field is set to 2.
*
* @return integer
*/
public function getType() { return $this->_type; }
/**
* Sets the type of digital signature used. This field must be set to 2.
*
* @param integer $type The type of digital signature used.
*/
public function setType($type) { $this->_type = $type; }
/**
* Returns the digital signature data.
*
* @return string
*/
public function getData() { return $this->_data; }
/**
* Sets the digital signature data.
*
* @return string
*/
public function setData($data) { $this->_data = $data; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toUInt32LE($this->_type) .
Transform::toUInt32LE(strlen($this->_data)) . $this->_data;
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,152 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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; }
/**
* Sets the type of error correction.
*
* @param string $type The type of error correction.
*/
public function setType($type) { $this->_type = $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; }
/**
* Sets 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.
*
* @param Array $data The error correction specific data.
*/
public function setData($data) { $this->_data = $data; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toGUID($this->_type) .
Transform::toUInt32LE(strlen($this->_data)) . $this->_data;
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,232 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2006-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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.
*
* @todo Implement better handling of various types of attributes
* according to http://msdn.microsoft.com/en-us/library/aa384495(VS.85).aspx
* @package php-reader
* @subpackage ASF
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2006-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$contentDescriptorsCount = $this->_reader->readUInt16LE();
for ($i = 0; $i < $contentDescriptorsCount; $i++) {
$nameLen = $this->_reader->readUInt16LE();
$name = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($nameLen));
$valueDataType = $this->_reader->readUInt16LE();
$valueLen = $this->_reader->readUInt16LE();
switch ($valueDataType) {
case 0: // string
$this->_contentDescriptors[$name] = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($valueLen));
break;
case 1: // byte array
$this->_contentDescriptors[$name] = $this->_reader->read($valueLen);
break;
case 2: // bool
$this->_contentDescriptors[$name] =
$this->_reader->readUInt32LE() == 1 ? true : false;
break;
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;
}
/**
* Sets the given descriptor a new value.
*
* @param string $name The name of the descriptor.
* @param string $value The value of the field.
* @return string|false
*/
public function setDescriptor($name, $value)
{
$this->_contentDescriptors[$name] = $value;
}
/**
* 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; }
/**
* Sets the content descriptor associate array having the descriptor names as
* array keys and their values as associated value. The descriptor names and
* all string values must be encoded in the default character encoding given
* as an option to {@link ASF} class.
*
* @param Array $contentDescriptors The content descriptors
*/
public function setDescriptors($contentDescriptors)
{
$this->_contentDescriptors = $contentDescriptors;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = Transform::toUInt16LE(count($this->_contentDescriptors));
foreach ($this->_contentDescriptors as $name => $value) {
$descriptor = iconv
($this->getOption("encoding"), "utf-16le", $name ? $name . "\0" : "");
$data .= Transform::toUInt16LE(strlen($descriptor)) .
Transform::toString16($descriptor);
if (is_string($value)) {
/* There is no way to distinguish byte arrays from unicode strings and
* hence the need for a list of fields of type byte array */
static $byteArray = array (
"W\0M\0/\0M\0C\0D\0I\0\0\0",
"W\0M\0/\0U\0s\0e\0r\0W\0e\0b\0U\0R\0L\0\0\0",
"W\0M\0/\0L\0y\0r\0i\0c\0s\0_\0S\0y\0n\0c\0h\0r\0o\0n\0i\0s\0e\0d\0\0\0",
"W\0M\0/\0P\0i\0c\0t\0u\0r\0e\0\0\0"
); // TODO: Add to the list if you encounter one
if (in_array($descriptor, $byteArray))
$data .= Transform::toUInt16LE(1) .
Transform::toUInt16LE(strlen($value)) . $value;
else {
$value = iconv
($this->getOption("encoding"), "utf-16le", $value) . "\0\0";
$data .= Transform::toUInt16LE(0) .
Transform::toUInt16LE(strlen($value)) .
Transform::toString16($value);
}
}
else if (is_bool($value))
$data .= Transform::toUInt16LE(2) . Transform::toUInt16LE(4) .
Transform::toUInt32LE($value ? 1 : 0);
else if (is_int($value))
$data .= Transform::toUInt16LE(3) . Transform::toUInt16LE(4) .
Transform::toUInt32LE($value);
else if (is_float($value))
$data .= Transform::toUInt16LE(4) . Transform::toUInt16LE(8) .
Transform::toInt64LE($value);
else {
// Invalid value and there is nothing to be done so cause a fatal error
require_once("ASF/Exception.php");
throw new ASF_Exception("Invalid data type");
}
}
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,121 +0,0 @@
<?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$
*/
/**#@+ @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$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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; }
/**
* Sets the array of bytes required by the DRM client to manipulate the
* protected content.
*
* @param string $data The data.
*/
public function setData($data) { $this->_data = $data; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return true; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = Transform::toUInt32LE(strlen($this->_data)) . $this->_data;
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,697 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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->readString16($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->readString16($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; }
/**
* Sets 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).
*
* The given value must be in units of milliseconds or optionally be set to 0,
* in which case the field will be ignored.
*
* @param integer $startTime The presentation time of the first object.
*/
public function setStartTime($startTime) { $this->_startTime = $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; }
/**
* Sets 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).
*
* The given value must be given in units of milliseconds or optionally be set
* to 0, in which case the field will be ignored.
*
* @param integer $endTime The presentation time of the last object plus the
* duration of play.
*/
public function setEndTime($endTime) { $this->_endTime = $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; }
/**
* Sets 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 must be given a non-zero value.
*
* @param integer $dataBitrate The leak rate.
*/
public function setDataBitrate($dataBitrate)
{
$this->_dataBitrate = $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; }
/**
* Sets the size B, in milliseconds, of the leaky bucket used in the
* <i>Data Bitrate</i> definition.
*
* @param integer $bufferSize The size.
*/
public function setBufferSize($bufferSize)
{
$this->_bufferSize = $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;
}
/**
* Sets 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.
*
* @param integer $initialBufferFullness The initial fullness.
*/
public function setInitialBufferFullness($initialBufferFullness)
{
$this->_initialBufferFullness = $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;
}
/**
* Sets 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.
*
* @param integer $alternateDataBitrate The alternate leak rate.
*/
public function setAlternateDataBitrate($alternateDataBitrate)
{
$this->_alternateDataBitrate = $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;
}
/**
* Sets 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.
*
* @param integer $alternateBufferSize
*/
public function setAlternateBufferSize($alternateBufferSize)
{
$this->_alternateBufferSize = $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;
}
/**
* Sets 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.
*
* @param integer $alternateInitialBufferFullness The alternate initial
* fullness.
*/
public function setAlternateInitialBufferFullness
($alternateInitialBufferFullness)
{
$this->_alternateInitialBufferFullness = $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;
}
/**
* Sets the maximum size of the largest sample stored in the data packets for
* a stream. A value of 0 means unknown.
*
* @param integer $maximumObjectSize The maximum size of the largest sample.
*/
public function setMaximumObjectSize($maximumObjectSize)
{
$this->_maximumObjectSize = $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;
}
/**
* Sets 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.
*
* @param integer $averageTimePerFrame The average time duration.
*/
public function setAverageTimePerFrame($averageTimePerFrame)
{
$this->_averageTimePerFrame = $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;
}
/**
* Sets 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.
*
* @param integer $streamNumber The number of this stream.
*/
public function setStreamNumber($streamNumber)
{
$this->_streamNumber = $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;
}
/**
* Sets 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.
*
* @param integer $streamLanguageIndex The language index.
*/
public function setStreamLanguageIndex($streamLanguageIndex)
{
$this->_streamLanguageIndex = $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 entry contains the following keys:
* o languageIndex -- The language index
* o streamName -- The localized stream name
*
* @return Array
*/
public function getStreamNames()
{
return $this->_streamNames;
}
/**
* Sets the 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 entries are to contain the following keys:
* o languageIndex -- The language index
* o streamName -- The localized stream name
*
* @param Array $streamNames The array of stream names
*/
public function setStreamNames($streamNames)
{
$this->_streamNames = $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 entry 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;
}
/**
* Sets 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 enties are to contain 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).
*
* @param Array $payloadExtensionSystems The array of payload extension
* systems.
*/
public function setPayloadExtensionSystems($payloadExtensionSystems)
{
$this->_payloadExtensionSystems = $payloadExtensionSystems;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return true; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toInt64LE($this->_startTime) .
Transform::toInt64LE($this->_endTime) .
Transform::toUInt32LE($this->_dataBitrate) .
Transform::toUInt32LE($this->_bufferSize) .
Transform::toUInt32LE($this->_initialBufferFullness) .
Transform::toUInt32LE($this->_alternateDataBitrate) .
Transform::toUInt32LE($this->_alternateBufferSize) .
Transform::toUInt32LE($this->_alternateInitialBufferFullness) .
Transform::toUInt32LE($this->_maximumObjectSize) .
Transform::toUInt32LE($this->_flags) .
Transform::toUInt16LE($this->_streamNumber) .
Transform::toUInt16LE($this->_streamLanguageIndex) .
Transform::toInt64LE($this->_averageTimePerFrame) .
Transform::toUInt16LE($streamNameCount = count($this->_streamNames)) .
Transform::toUInt16LE
($payloadExtensionSystemCount = count($this->_payloadExtensionSystems));
for ($i = 0; $i < $streamNameCount; $i++)
$data .=
Transform::toUInt16LE($this->_streamNames["languageIndex"]) .
Transform::toUInt16LE(strlen($streamName = iconv
($this->getOption("encoding"), "utf-16le",
$this->_streamNames["streamName"]) . "\0\0")) .
Transform::toString16($streamName);
for ($i = 0; $i < $payloadExtensionSystemCount; $i++)
$data .=
Transform::toGUID($this->_streamNames["extensionSystemId"]) .
Transform::toUInt16LE($this->_streamNames["extensionDataSize"]) .
Transform::toUInt16LE(strlen($extensionSystemInfo = iconv
($this->getOption("encoding"), "utf-16le",
$this->_streamNames["extensionSystemInfo"]) . "\0\0")) .
Transform::toString16($extensionSystemInfo);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,429 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2006-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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; }
/**
* Sets the file id field.
*
* @param GUID $fileId The new file id.
*/
public function setFileId($fileId) { $this->_fileId = $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; }
/**
* Sets 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.
*
* @param integer $fileSize The size of the entire file.
*/
public function setFileSize($fileSize) { $this->_fileSize = $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; }
/**
* Sets 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.
*
* @param integer $creationDate The date and time of the initial creation of
* the file.
*/
public function setCreationDate($creationDate)
{
$this->_creationDate = $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; }
/**
* Sets 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.
*
* @param integer $dataPacketsCount The number of Data Packet entries.
*/
public function setDataPacketsCount($dataPacketsCount)
{
$this->_dataPacketsCount = $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; }
/**
* Sets 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.
*
* @param integer $playDuration The time needed to play the file.
*/
public function setPlayDuration($playDuration)
{
$this->_playDuration = $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; }
/**
* Sets 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.
*
* @param integer $sendDuration The time needed to send the file.
*/
public function setSendDuration($sendDuration)
{
$this->_sendDuration = $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; }
/**
* Sets 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.
*
* @param integer $preroll The amount of time to buffer data.
*/
public function setPreroll($preroll) { $this->_preroll = $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; }
/**
* Sets the flags field.
*
* @param integer $flags The flags field.
*/
public function setFlags($flags) { $this->_flags = $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;
}
/**
* Sets 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.
*
* @param integer $minimumDataPacketSize The minimum <i>Data Packet</i> size
* in bytes.
*/
public function setMinimumDataPacketSize($minimumDataPacketSize)
{
$this->_minimumDataPacketSize = $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;
}
/**
* Sets 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.
*
* @param integer $maximumDataPacketSize The maximum <i>Data Packet</i> size
* in bytes
*/
public function setMaximumDataPacketSize($maximumDataPacketSize)
{
$this->_maximumDataPacketSize = $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; }
/**
* Sets 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.
*
* @param integer $maximumBitrate The maximum instantaneous bit rate in bits
* per second.
*/
public function setMaximumBitrate($maximumBitrate)
{
$this->_maximumBitrate = $maximumBitrate;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return true; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toGUID($this->_fileId) .
Transform::toInt64LE($this->_fileSize) .
Transform::toInt64LE($this->_creationDate) .
Transform::toInt64LE($this->_dataPacketsCount) .
Transform::toInt64LE($this->_playDuration) .
Transform::toInt64LE($this->_sendDuration) .
Transform::toInt64LE($this->_preroll) .
Transform::toUInt32LE($this->_flags) .
Transform::toUInt32LE($this->_minimumDataPacketSize) .
Transform::toUInt32LE($this->_maximumDataPacketSize) .
Transform::toUInt32LE($this->_maximumBitrate);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,171 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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; }
/**
* Sets the nature of the mutual exclusion relationship.
*
* @param string $exclusionType The exclusion type.
*/
public function setExclusionType($exclusionType)
{
$this->_exclusionType = $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; }
/**
* Sets an array of records. Each record is to consist of the following keys.
*
* o streamNumbers -- Specifies the stream numbers for this record. Valid
* values are between 1 and 127.
*
* @param Array $records The array of records
*/
public function setRecords($records) { $this->_records = $records; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return true; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toGUID($this->_exclusionType) .
Transform::toUInt16LE($recordCount = count($this->_records));
for ($i = 0; $i < $recordCount; $i++) {
$data .=
Transform::toUInt16LE($streamNumbersCount = count($this->_records[$i]));
for ($j = 0; $j < $streamNumbersCount; $j++)
$data .= Transform::toUInt16LE($this->_records[$i][$j]["streamNumbers"]);
}
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,153 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2006-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_Header extends ASF_Object_Container
{
/** @var integer */
private $_reserved1;
/** @var integer */
private $_reserved2;
/**
* 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(4);
$this->_reserved1 = $this->_reader->readInt8();
$this->_reserved2 = $this->_reader->readInt8();
$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"));
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return true; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = "";
foreach ($this->getObjects() as $objects)
foreach ($objects as $object)
$data .= $object->__toString();
$this->setSize
(24 /* for header */ + 6 + strlen($data) /* for object data */);
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) .
Transform::toUInt32LE(count($this->getObjects())) .
Transform::toInt8($this->_reserved1) .
Transform::toInt8($this->_reserved2) . $data;
}
}

View File

@@ -1,132 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_HeaderExtension extends ASF_Object_Container
{
/** @var string */
private $_reserved1;
/** @var integer */
private $_reserved2;
/**
* 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->_reserved1 = $this->_reader->readGUID();
$this->_reserved2 = $this->_reader->readUInt16LE();
$this->_reader->skip(4);
$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"));
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return true; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = "";
foreach ($this->getObjects() as $objects)
foreach ($objects as $object)
$data .= $object->__toString();
$this->setSize
(24 /* for header */ + 22 + strlen($data) /* for object data */);
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) .
Transform::toGUID($this->_reserved1) .
Transform::toUInt16LE($this->_reserved2) .
Transform::toUInt32LE(strlen($data)) . $data;
}
}

View File

@@ -1,185 +0,0 @@
<?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$
*/
/**#@+ @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$
*/
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; }
}

View File

@@ -1,121 +0,0 @@
<?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$
*/
/**#@+ @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$
*/
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; }
}

View File

@@ -1,132 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$languageIdRecordsCount = $this->_reader->readUInt16LE();
for ($i = 0; $i < $languageIdRecordsCount; $i++) {
$languageIdLength = $this->_reader->readInt8();
$languageId = $this->_reader->readString16($languageIdLength);
$this->_languages[] = iconv
("utf-16le", $this->getOption("encoding"), $languageId);
}
}
/**
* Returns the array of language ids.
*
* @return Array
*/
public function getLanguages() { return $this->_languages; }
/**
* Sets the array of language ids.
*
* @param Array $languages The array of language ids.
*/
public function setLanguages($languages) { $this->_languages = $languages; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = Transform::toUInt16LE
($languageIdRecordsCount = count($this->_languages));
for ($i = 0; $i < $languageIdRecordsCount; $i++)
$data .=
Transform::toInt8(strlen($languageId = iconv
($this->getOption("encoding"), "utf-16le", $this->_languages[$i]) .
"\0\0")) . Transform::toString16($languageId);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,207 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_Marker extends ASF_Object
{
/** @var string */
private $_reserved1;
/** @var integer */
private $_reserved2;
/** @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->_reserved1 = $this->_reader->readGUID();
$markersCount = $this->_reader->readUInt32LE();
$this->_reserved2 = $this->_reader->readUInt16LE();
$nameLength = $this->_reader->readUInt16LE();
$this->_name = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($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->readString16($descriptionLength));
$this->_markers[] = $marker;
}
}
/**
* Returns the name of the Marker Object.
*
* @return Array
*/
public function getName() { return $this->_name; }
/**
* Returns the name of the Marker Object.
*
* @param string $name The name.
*/
public function setName($name) { $this->_name = $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; }
/**
* Sets the array of markers. Each entry is to consist 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.
*
* @param Array $markers The array of markers.
*/
public function setMarkers($markers) { $this->_markers = $markers; }
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toGUID($this->_reserved1) .
Transform::toUInt32LE($markersCount = count($this->_markers)) .
Transform::toUInt16LE($this->_reserved2) .
Transform::toUInt16LE
(strlen($name = iconv
($this->getOption("encoding"), "utf-16le", $this->_name) . "\0\0")) .
Transform::toString16($name);
for ($i = 0; $i < $markersCount; $i++)
$data .=
Transform::toInt64LE($this->_markers[$i]["offset"]) .
Transform::toInt64LE($this->_markers[$i]["presentationTime"]) .
Transform::toUInt16LE
(12 + ($descriptionLength = strlen($description = iconv
("utf-16le", $this->getOption("encoding"),
$this->_markers[$i]["description"]) . "\0\0"))) .
Transform::toUInt32LE($this->_markers[$i]["sendTime"]) .
Transform::toUInt32LE($this->_markers[$i]["flags"]) .
Transform::toUInt32LE($descriptionLength) .
Transform::toString16($description);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,176 +0,0 @@
<?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$
*/
/**#@+ @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$
*/
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; }
}

View File

@@ -1,130 +0,0 @@
<?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$
*/
/**#@+ @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$
*/
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; }
}

View File

@@ -1,223 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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.
*
* @todo Implement better handling of various types of attributes
* according to http://msdn.microsoft.com/en-us/library/aa384495(VS.85).aspx
* @package php-reader
* @subpackage ASF
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_Metadata 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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$descriptionRecordsCount = $this->_reader->readUInt16LE();
for ($i = 0; $i < $descriptionRecordsCount; $i++) {
$this->_reader->skip(2);
$descriptionRecord = array("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->readString16($nameLength));
switch ($dataType) {
case 0: // Unicode string
$descriptionRecord["data"] = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($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;
}
$this->_descriptionRecords[] = $descriptionRecord;
}
}
/**
* Returns the array of description records. Each record consists of the
* following keys.
*
* o streamNumber -- Specifies the stream number. Valid values are between
* 1 and 127.
*
* o name -- Specifies the name that uniquely identifies the attribute being
* described. Names are case-sensitive.
*
* o data -- Specifies the actual metadata being stored.
*
* @return Array
*/
public function getDescriptionRecords() { return $this->_descriptionRecords; }
/**
* Sets the array of description records. Each record must consist of the
* following keys.
*
* o streamNumber -- Specifies the stream number. Valid values are between
* 1 and 127.
*
* o name -- Specifies the name that uniquely identifies the attribute being
* described. Names are case-sensitive.
*
* o data -- Specifies the actual metadata being stored.
*
* @param Array $descriptionRecords The array of description records.
*/
public function setDescriptionRecords($descriptionRecords)
{
$this->_descriptionRecords = $descriptionRecords;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = Transform::toUInt16LE
($descriptionRecordsCount = count($this->_descriptionRecords));
for ($i = 0; $i < $descriptionRecordsCount; $i++) {
$data .= Transform::toUInt16LE(0) .
Transform::toUInt16LE($this->_descriptionRecords[$i]["streamNumber"]) .
Transform::toUInt16LE(strlen($name = iconv
($this->getOption("encoding"), "utf-16le",
$this->_descriptionRecords[$i]["name"]) . "\0\0"));
if (is_string($this->_descriptionRecords[$i]["data"])) {
/* There is no way to distinguish byte arrays from unicode strings and
* hence the need for a list of fields of type byte array */
static $byteArray = array (
""
); // TODO: Add to the list if you encounter one
if (in_array($name, $byteArray))
$data .= Transform::toUInt16LE(1) . Transform::toUInt32LE
(strlen($this->_descriptionRecords[$i]["data"])) . $name .
$this->_descriptionRecords[$i]["data"];
else {
$value = iconv
($this->getOption("encoding"), "utf-16le",
$this->_descriptionRecords[$i]["data"]);
$value = ($value ? $value . "\0\0" : "");
$data .= Transform::toUInt16LE(0) .
Transform::toUInt32LE(strlen($value)) . $name .
Transform::toString16($value);
}
}
else if (is_bool($this->_descriptionRecords[$i]["data"])) {
$data .= Transform::toUInt16LE(2) . Transform::toUInt32LE(2) . $name .
Transform::toUInt16LE($this->_descriptionRecords[$i]["data"] ? 1 : 0);
}
else if (is_int($this->_descriptionRecords[$i]["data"])) {
$data .= Transform::toUInt16LE(3) . Transform::toUInt32LE(4) . $name .
Transform::toUInt32LE($this->_descriptionRecords[$i]["data"]);
}
else if (is_float($this->_descriptionRecords[$i]["data"])) {
$data .= Transform::toUInt16LE(4) . Transform::toUInt32LE(8) . $name .
Transform::toInt64LE($this->_descriptionRecords[$i]["data"]);
}
else {
// Invalid value and there is nothing to be done so cause a fatal error
require_once("ASF/Exception.php");
throw new ASF_Exception("Invalid data type");
}
}
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,256 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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.
*
* @todo Implement better handling of various types of attributes
* according to http://msdn.microsoft.com/en-us/library/aa384495(VS.85).aspx
* @package php-reader
* @subpackage ASF
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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->readString16($nameLength));
switch ($dataType) {
case 0: // Unicode string
$descriptionRecord["data"] = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($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
* {@link LanguageList Language List Object} 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; }
/**
* Sets an array of description records. Each record must consist 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 setDescriptionRecords($descriptionRecords)
{
$this->_descriptionRecords = $descriptionRecords;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = Transform::toUInt16LE
($descriptionRecordsCount = count($this->_descriptionRecords));
for ($i = 0; $i < $descriptionRecordsCount; $i++) {
$data .=
Transform::toUInt16LE($this->_descriptionRecords[$i]["languageIndex"]) .
Transform::toUInt16LE($this->_descriptionRecords[$i]["streamNumber"]) .
Transform::toUInt16LE(strlen($name = iconv
($this->getOption("encoding"), "utf-16le",
$this->_descriptionRecords[$i]["name"]) . "\0\0"));
if (is_string($this->_descriptionRecords[$i]["data"])) {
$chunks = array();
if (preg_match
("/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/i",
$this->_descriptionRecords[$i]["data"]))
$data .= Transform::toUInt16LE(6) . Transform::toUInt32LE(16) .
$name . Transform::toGUID($this->_descriptionRecords[$i]["data"]);
else {
/* There is no way to distinguish byte arrays from unicode strings and
* hence the need for a list of fields of type byte array */
static $byteArray = array (
"W\0M\0/\0L\0y\0r\0i\0c\0s\0_\0S\0y\0n\0c\0h\0r\0o\0n\0i\0s\0e\0d\0\0\0",
"W\0M\0/\0P\0i\0c\0t\0u\0r\0e\0\0\0"
); // TODO: Add to the list if you encounter one
if (in_array($name, $byteArray))
$data .= Transform::toUInt16LE(1) . Transform::toUInt32LE
(strlen($this->_descriptionRecords[$i]["data"])) . $name .
$this->_descriptionRecords[$i]["data"];
else {
$value = iconv
($this->getOption("encoding"), "utf-16le",
$this->_descriptionRecords[$i]["data"]);
$value = ($value ? $value . "\0\0" : "");
$data .= Transform::toUInt16LE(0) .
Transform::toUInt32LE(strlen($value)) . $name .
Transform::toString16($value);
}
}
}
else if (is_bool($this->_descriptionRecords[$i]["data"])) {
$data .= Transform::toUInt16LE(2) . Transform::toUInt32LE(2) . $name .
Transform::toUInt16LE($this->_descriptionRecords[$i]["data"] ? 1 : 0);
}
else if (is_int($this->_descriptionRecords[$i]["data"])) {
$data .= Transform::toUInt16LE(3) . Transform::toUInt32LE(4) . $name .
Transform::toUInt32LE($this->_descriptionRecords[$i]["data"]);
}
else if (is_float($this->_descriptionRecords[$i]["data"])) {
$data .= Transform::toUInt16LE(4) . Transform::toUInt32LE(8) . $name .
Transform::toInt64LE($this->_descriptionRecords[$i]["data"]);
}
else {
// Invalid value and there is nothing to be done so cause a fatal error
require_once("ASF/Exception.php");
throw new ASF_Exception("Invalid data type");
}
}
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,107 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_Padding extends ASF_Object
{
/**
* 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 = null, &$options = array())
{
parent::__construct($reader, $options);
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return true; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
if ($this->getSize() == 0)
$this->setSize(24);
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) .
str_pad("", $this->getSize() - 24 /* header */, "\0");
}
}

View File

@@ -1,188 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_ScriptCommand extends ASF_Object
{
/** @var string */
private $_reserved;
/** @var Array */
private $_commands = array();
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* 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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_reserved = $this->_reader->readGUID();
$commandsCount = $this->_reader->readUInt16LE();
$commandTypesCount = $this->_reader->readUInt16LE();
$commandTypes = array();
for ($i = 0; $i < $commandTypesCount; $i++) {
$commandTypeNameLength = $this->_reader->readUInt16LE();
$commandTypes[] = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($commandTypeNameLength * 2));
}
for ($i = 0; $i < $commandsCount; $i++) {
$command = array
("presentationTime" => $this->_reader->readUInt32LE(),
"type" => $commandTypes[$this->_reader->readUInt16LE()]);
$commandNameLength = $this->_reader->readUInt16LE();
$command["name"] = iconv
("utf-16le", $this->getOption("encoding"),
$this->_reader->readString16($commandNameLength * 2));
$this->_commands[] = $command;
}
}
/**
* 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 type -- Specifies the type of this command.
*
* o name -- Specifies the name of this command.
*
* @return Array
*/
public function getCommands() { return $this->_commands; }
/**
* Sets the array of index entries. Each entry is to consist of the following
* keys.
*
* o presentationTime -- Specifies the presentation time of the command, in
* milliseconds.
*
* o type -- Specifies the type of this command.
*
* o name -- Specifies the name of this command.
*
* @param Array $commands The array of index entries.
*/
public function setCommands($commands) { $this->_commands = $commands; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$commandTypes = array();
foreach ($this->_commands as $command)
if (!in_array($command["type"], $commandTypes))
$commandTypes[] = $command["type"];
$data =
Transform::toGUID($this->_reserved) .
Transform::toUInt16LE($commandsCount = count($this->_commands)) .
Transform::toUInt16LE($commandTypesCount = count($commandTypes));
for ($i = 0; $i < $commandTypesCount; $i++)
$data .=
Transform::toUInt16LE
(strlen($commandType = iconv
($this->getOption("encoding"), "utf-16le",
$commandTypes[$i])) / 2) . $commandType;
for ($i = 0; $i < $commandsCount; $i++)
$data .=
Transform::toUInt32LE($this->_commands[$i]["presentationTime"]) .
Transform::toUInt16LE
(array_search($this->_commands[$i]["type"], $commandTypes)) .
Transform::toUInt16LE
(strlen($command = iconv
($this->getOption("encoding"), "utf-16le",
$this->_commands[$i]["name"])) / 2) . $command;
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,143 +0,0 @@
<?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$
*/
/**#@+ @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$
*/
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; }
}

View File

@@ -1,153 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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; }
/**
* Sets 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.
*
* @param Array $bitrateRecords The array of bitrate records.
*/
public function setBitrateRecords($bitrateRecords)
{
$this->_bitrateRecords = $bitrateRecords;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = Transform::toUInt16LE
($bitrateRecordsCount = count($this->_bitrateRecords));
for ($i = 0; $i < $bitrateRecordsCount; $i++)
$data .= Transform::toUInt16LE
(($this->_bitrateRecords[$i]["flags"] << 5) |
($this->_bitrateRecords[$i]["streamNumber"] & 0x1f)) .
Transform::toUInt32LE($this->_bitrateRecords[$i]["averageBitrate"]);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,154 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$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; }
/**
* Sets the 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).
*
* @param Array $priorityRecords The array of records.
*/
public function setPriorityRecords($priorityRecords)
{
$this->_priorityRecords = $priorityRecords;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data = Transform::toUInt16LE
($priorityRecordCount = count($this->_priorityRecords));
for ($i = 0; $i < $priorityRecordCount; $i++)
$data .=
Transform::toUInt16LE($this->_priorityRecords[$i]["streamNumber"]) .
Transform::toUInt16LE($this->_priorityRecords[$i]["flags"]);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,516 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @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-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
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 integer */
private $_reserved;
/** @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->_reserved = $this->_reader->readUInt32LE();
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 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.
*
* @param integer $streamNumber The number of this stream.
*/
public function setStreamNumber($streamNumber)
{
if ($streamNumber < 1 || $streamNumber > 127) {
require_once("ASF/Exception.php");
throw new ASF_Exception("Invalid argument");
}
$this->_flags = ($this->_flags & 0xffc0) | ($streamNumber & 0x3f);
}
/**
* Returns the type of the stream (for example, audio, video, and so on).
*
* @return string
*/
public function getStreamType() { return $this->_streamType; }
/**
* Sets the type of the stream (for example, audio, video, and so on).
*
* @param integer $streamType The type of the stream.
*/
public function setStreamType($streamType)
{
$this->_streamType = $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;
}
/**
* Sets 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.
*
* @param integer $errorCorrectionType The error correction type used by this
* digital media stream.
*/
public function setErrorCorrectionType($errorCorrectionType)
{
$this->_errorCorrectionType = $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; }
/**
* Sets 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.
*
* @param integer $timeOffset The presentation time offset of the stream.
*/
public function setTimeOffset($timeOffset)
{
$this->_timeOffset = $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; }
/**
* Sets the flags field.
*
* @param integer $flags The flags field.
*/
public function setFlags($flags) { $this->_flags = $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; }
/**
* Sets 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.
*
* @param Array $typeSpecificData The type-specific data as key-value pairs of
* an associate array.
*/
public function setTypeSpecificData($typeSpecificData)
{
$this->_typeSpecificData = $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;
}
/**
* Sets 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.
*
* @param Array $errorCorrectionData The error correction type-specific data
* as key-value pairs of an associate array.
*/
public function setErrorCorrectionData($errorCorrectionData)
{
$this->_errorCorrectionData = $errorCorrectionData;
}
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return true; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return false; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$data =
Transform::toGUID($this->_streamType) .
Transform::toGUID($this->_errorCorrectionType) .
Transform::toInt64LE($this->_timeOffset);
switch ($this->_streamType) {
case self::AUDIO_MEDIA:
$typeSpecificData =
Transform::toUInt16LE($this->_typeSpecificData["codecId"]) .
Transform::toUInt16LE($this->_typeSpecificData["numberOfChannels"]) .
Transform::toUInt32LE($this->_typeSpecificData["samplesPerSecond"]) .
Transform::toUInt32LE
($this->_typeSpecificData["avgNumBytesPerSecond"]) .
Transform::toUInt16LE($this->_typeSpecificData["blockAlignment"]) .
Transform::toUInt16LE($this->_typeSpecificData["bitsPerSample"]) .
Transform::toUInt16LE
(strlen($this->_typeSpecificData["codecSpecificData"])) .
$this->_typeSpecificData["codecSpecificData"];
break;
case self::VIDEO_MEDIA:
$typeSpecificData =
Transform::toUInt32LE($this->_typeSpecificData["encodedImageWidth"]) .
Transform::toUInt32LE($this->_typeSpecificData["encodedImageHeight"]) .
Transform::toInt8($this->_typeSpecificData["reservedFlags"]) .
Transform::toUInt16LE(0) . // Reserved
Transform::toUInt32LE
(38 + strlen($this->_typeSpecificData["codecSpecificData"])) .
Transform::toUInt32LE($this->_typeSpecificData["imageWidth"]) .
Transform::toUInt32LE($this->_typeSpecificData["imageHeight"]) .
Transform::toUInt16LE($this->_typeSpecificData["reserved"]) .
Transform::toUInt16LE($this->_typeSpecificData["bitsPerPixelCount"]) .
Transform::toUInt32LE($this->_typeSpecificData["compressionId"]) .
Transform::toUInt32LE($this->_typeSpecificData["imageSize"]) .
Transform::toUInt32LE
($this->_typeSpecificData["horizontalPixelsPerMeter"]) .
Transform::toUInt32LE
($this->_typeSpecificData["verticalPixelsPerMeter"]) .
Transform::toUInt32LE($this->_typeSpecificData["colorsUsedCount"]) .
Transform::toUInt32LE
($this->_typeSpecificData["importantColorsCount"]) .
$this->_typeSpecificData["codecSpecificData"];
break;
case self::JFIF_MEDIA:
$typeSpecificData =
Transform::toUInt32LE($this->_typeSpecificData["imageWidth"]) .
Transform::toUInt32LE($this->_typeSpecificData["imageHeight"]) .
Transform::toUInt32LE(0);
break;
case self::DEGRADABLE_JPEG_MEDIA:
$typeSpecificData =
Transform::toUInt32LE($this->_typeSpecificData["imageWidth"]) .
Transform::toUInt32LE($this->_typeSpecificData["imageHeight"]) .
Transform::toUInt16LE(0) .
Transform::toUInt16LE(0) .
Transform::toUInt16LE(0);
$interchangeDataSize = strlen
($this->_typeSpecificData["interchangeData"]);
if ($interchangeDataSize == 1)
$interchangeDataSize = 0;
$typeSpecificData .=
Transform::toUInt16LE($interchangeDataSize) .
$this->_typeSpecificData["interchangeData"];
break;
case self::FILE_TRANSFER_MEDIA:
case self::BINARY_MEDIA:
$typeSpecificData =
Transform::toGUID($this->_typeSpecificData["majorMediaType"]) .
Transform::toGUID($this->_typeSpecificData["mediaSubtype"]) .
Transform::toUInt32LE($this->_typeSpecificData["fixedSizeSamples"]) .
Transform::toUInt32LE($this->_typeSpecificData["temporalCompression"]) .
Transform::toUInt32LE($this->_typeSpecificData["sampleSize"]) .
Transform::toGUID($this->_typeSpecificData["formatType"]) .
Transform::toUInt32LE(strlen($this->_typeSpecificData["formatData"])) .
$this->_typeSpecificData["formatData"];
break;
case self::COMMAND_MEDIA:
default:
$typeSpecificData = "";
}
switch ($this->_errorCorrectionType) {
case self::AUDIO_SPREAD:
$errorCorrectionData =
Transform::toInt8($this->_errorCorrectionData["span"]) .
Transform::toUInt16LE
($this->_errorCorrectionData["virtualPacketLength"]) .
Transform::toUInt16LE
($this->_errorCorrectionData["virtualChunkLength"]) .
Transform::toUInt16LE
(strlen($this->_errorCorrectionData["silenceData"])) .
$this->_errorCorrectionData["silenceData"];
break;
case self::NO_ERROR_CORRECTION:
default:
$errorCorrectionData = "";
}
$data .=
Transform::toUInt32LE(strlen($typeSpecificData)) .
Transform::toUInt32LE(strlen($errorCorrectionData)) .
Transform::toUInt16LE($this->_flags) .
Transform::toUInt32LE($this->_reserved) .
$typeSpecificData . $errorCorrectionData;
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,181 +0,0 @@
<?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$
*/
/**#@+ @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$
*/
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; }
}

View File

@@ -1,125 +0,0 @@
<?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$
*/
/**#@+ @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$
*/
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; }
}

View File

@@ -1,87 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2009 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) 2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ASF/Object.php");
/**#@-*/
/**
* The <i>Unknown Object</i> represents objects that are not known to the
* library.
*
* @package php-reader
* @subpackage ASF
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ASF_Object_Unknown extends ASF_Object
{
/**
* Returns the whether the object is required to be present, or whether
* minimum cardinality is 1.
*
* @return boolean
*/
public function isMandatory() { return false; }
/**
* Returns whether multiple instances of this object can be present, or
* whether maximum cardinality is greater than 1.
*
* @return boolean
*/
public function isMultiple() { return true; }
/**
* Returns the object data with headers.
*
* @return string
*/
public function __toString()
{
$offset = $this->_reader->getOffset();
$this->_reader->setOffset($this->getOffset() + 24 /* for header */);
$data = $this->_reader->read($this->getSize() - 24 /* for header */);
$this->_reader->setOffset($offset);
$this->setSize(24 /* for header */ + strlen($data));
return
Transform::toGUID($this->getIdentifier()) .
Transform::toInt64LE($this->getSize()) . $data;
}
}

View File

@@ -1,79 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**
* The <var>Encoding</var> interface implies that the ID3v2 frame supports
* content encoding.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
interface ID3_Encoding
{
/** The ISO-8859-1 encoding. */
const ISO88591 = 0;
/** The UTF-16 Unicode encoding with BOM. */
const UTF16 = 1;
/** The UTF-16LE Unicode encoding without BOM. */
const UTF16LE = 4;
/** The UTF-16BE Unicode encoding without BOM. */
const UTF16BE = 2;
/** The UTF-8 Unicode encoding. */
const UTF8 = 3;
/**
* Returns the text encoding.
*
* @return integer
*/
public function getEncoding();
/**
* Sets the text encoding.
*
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding);
}

View File

@@ -1,51 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**
* The ID3_Exception is thrown whenever an error occurs within the {@link ID3v1}
* or the {@link ID3v2} classes.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
class ID3_Exception extends Exception
{
}

View File

@@ -1,324 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Object.php");
/**#@-*/
/**
* The extended header contains information that can provide further insight in
* the structure of the tag, but is not vital to the correct parsing of the tag
* information; hence the extended header is optional.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_ExtendedHeader extends ID3_Object
{
/**
* A flag to denote that the present tag is an update of a tag found earlier
* in the present file or stream. If frames defined as unique are found in
* the present tag, they are to override any corresponding ones found in the
* earlier tag. This flag has no corresponding data.
*
* @since ID3v2.4.0
*/
const UPDATE = 64;
/**
* @since ID3v2.4.0 A flag to denote that a CRC-32 data is included in the
* extended header. The CRC is calculated on all the data between the header
* and footer as indicated by the header's tag length field, minus the
* extended header. Note that this includes the padding (if there is any), but
* excludes the footer. The CRC-32 is stored as an 35 bit synchsafe integer,
* leaving the upper four bits always zeroed.
*
* @since ID3v2.3.0 The CRC is calculated before unsynchronisation on the data
* between the extended header and the padding, i.e. the frames and only the
* frames.
*/
const CRC32 = 32;
/**
* A flag to denote whether or not the tag has restrictions applied on it.
*
* @since ID3v2.4.0
*/
const RESTRICTED = 16;
/** @var integer */
private $_size;
/** @var integer */
private $_flags = 0;
/** @var integer */
private $_padding;
/** @var integer */
private $_crc;
/** @var integer */
private $_restrictions = 0;
/**
* Constructs the class with given parameters and reads object related data
* from the ID3v2 tag.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$offset = $this->_reader->getOffset();
$this->_size = $this->_reader->readUInt32BE();
/* ID3v2.3.0 ExtendedHeader */
if ($this->getOption("version", 4) < 4) {
if ($this->_reader->readUInt16BE() == 0x8000)
$this->_flags = self::CRC32;
$this->_padding = $this->_reader->readUInt32BE();
if ($this->hasFlag(self::CRC32))
$this->_crc = Transform::readUInt32BE();
}
/* ID3v2.4.0 ExtendedHeader */
else {
$this->_size = $this->_decodeSynchsafe32($this->_size);
$this->_reader->skip(1);
$this->_flags = $this->_reader->readInt8();
if ($this->hasFlag(self::UPDATE))
$this->_reader->skip(1);
if ($this->hasFlag(self::CRC32)) {
$this->_reader->skip(1);
$this->_crc =
Transform::fromInt8($this->_reader->read(1)) * (0xfffffff + 1) +
_decodeSynchsafe32(Transform::fromUInt32BE($this->_reader->read(4)));
}
if ($this->hasFlag(self::RESTRICTED)) {
$this->_reader->skip(1);
$this->_restrictions = $this->_reader->readInt8(1);
}
}
}
/**
* Returns the extended header size in bytes.
*
* @return integer
*/
public function getSize() { return $this->_size; }
/**
* 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 byte.
*
* @return integer
*/
public function getFlags($flags) { return $this->_flags; }
/**
* Sets the flags byte.
*
* @param integer $flags The flags byte.
*/
public function setFlags($flags) { $this->_flags = $flags; }
/**
* Returns the CRC-32 data.
*
* @return integer
*/
public function getCrc()
{
if ($this->hasFlag(self::CRC32))
return $this->_crc;
return false;
}
/**
* Sets whether the CRC-32 should be generated upon tag write.
*
* @param boolean $useCrc Whether CRC-32 should be generated.
*/
public function useCrc($useCrc)
{
if ($useCrc)
$this->setFlags($this->getFlags() | self::CRC32);
else
$this->setFlags($this->getFlags() & ~self::CRC32);
}
/**
* Sets the CRC-32. The CRC-32 value is calculated of all the frames in the
* tag and includes padding.
*
* @param integer $crc The 32-bit CRC value.
*/
public function setCrc($crc)
{
if (is_bool($crc))
$this->useCrc($crc);
else
$this->_crc = $crc;
}
/**
* Returns the restrictions. For some applications it might be desired to
* restrict a tag in more ways than imposed by the ID3v2 specification. Note
* that the presence of these restrictions does not affect how the tag is
* decoded, merely how it was restricted before encoding. If this flag is set
* the tag is restricted as follows:
*
* <pre>
* Restrictions %ppqrrstt
*
* p - Tag size restrictions
*
* 00 No more than 128 frames and 1 MB total tag size.
* 01 No more than 64 frames and 128 KB total tag size.
* 10 No more than 32 frames and 40 KB total tag size.
* 11 No more than 32 frames and 4 KB total tag size.
*
* q - Text encoding restrictions
*
* 0 No restrictions
* 1 Strings are only encoded with ISO-8859-1 or UTF-8.
*
* r - Text fields size restrictions
*
* 00 No restrictions
* 01 No string is longer than 1024 characters.
* 10 No string is longer than 128 characters.
* 11 No string is longer than 30 characters.
*
* Note that nothing is said about how many bytes is used to represent those
* characters, since it is encoding dependent. If a text frame consists of
* more than one string, the sum of the strungs is restricted as stated.
*
* s - Image encoding restrictions
*
* 0 No restrictions
* 1 Images are encoded only with PNG [PNG] or JPEG [JFIF].
*
* t - Image size restrictions
*
* 00 No restrictions
* 01 All images are 256x256 pixels or smaller.
* 10 All images are 64x64 pixels or smaller.
* 11 All images are exactly 64x64 pixels, unless required otherwise.
* </pre>
*
* @return integer
*/
public function getRestrictions() { return $this->_restrictions; }
/**
* Sets the restrictions byte. See {@link #getRestrictions} for more.
*
* @param integer $restrictions The restrictions byte.
*/
public function setRestrictions($restrictions)
{
$this->_restrictions = $restrictions;
}
/**
* Returns the total padding size, or simply the total tag size excluding the
* frames and the headers.
*
* @return integer
* @deprecated ID3v2.3.0
*/
public function getPadding() { return $this->_padding; }
/**
* Sets the total padding size, or simply the total tag size excluding the
* frames and the headers.
*
* @param integer $padding The padding size.
* @deprecated ID3v2.3.0
*/
public function setPadding($padding) { return $this->_padding = $padding; }
/**
* Returns the header data.
*
* @return string
*/
public function __toString()
{
/* ID3v2.3.0 ExtendedHeader */
if ($this->getOption("version", 4) < 4) {
return Transform::toUInt32BE($this->_size) .
Transform::toUInt16BE($this->hasFlag(self::CRC32) ? 0x8000 : 0) .
Transform::toUInt32BE($this->_padding) .
($this->hasFlag(self::CRC32) ? Transform::toUInt32BE($this->_crc) : "");
}
/* ID3v2.4.0 ExtendedHeader */
else {
return Transform::toUInt32BE($this->_encodeSynchsafe32($this->_size)) .
Transform::toInt8(1) . Transform::toInt8($this->_flags) .
($this->hasFlag(self::UPDATE) ? "\0" : "") .
($this->hasFlag(self::CRC32) ? Transform::toInt8(5) .
Transform::toInt8($this->_crc & 0xf0000000 >> 28 & 0xf /*eq >>> 28*/) .
Transform::toUInt32BE($this->_encodeSynchsafe32($this->_crc)) : "") .
($this->hasFlag(self::RESTRICTED) ?
Transform::toInt8(1) . Transform::toInt8($this->_restrictions) : "");
}
}
}

View File

@@ -1,299 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Object.php");
/**#@-*/
/**
* A base class for all ID3v2 frames as described in the
* {@link http://www.id3.org/id3v2.4.0-frames ID3v2 frames document}.
*
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
abstract class ID3_Frame extends ID3_Object
{
/**
* This flag tells the tag parser what to do with this frame if it is unknown
* and the tag is altered in any way. This applies to all kinds of
* alterations, including adding more padding and reordering the frames.
*/
const DISCARD_ON_TAGCHANGE = 16384;
/**
* This flag tells the tag parser what to do with this frame if it is unknown
* and the file, excluding the tag, is altered. This does not apply when the
* audio is completely replaced with other audio data.
*/
const DISCARD_ON_FILECHANGE = 8192;
/**
* This flag, if set, tells the software that the contents of this frame are
* intended to be read only. Changing the contents might break something,
* e.g. a signature.
*/
const READ_ONLY = 4096;
/**
* This flag indicates whether or not this frame belongs in a group with
* other frames. If set, a group identifier byte is added to the frame. Every
* frame with the same group identifier belongs to the same group.
*/
const GROUPING_IDENTITY = 32;
/**
* This flag indicates whether or not the frame is compressed. A <i>Data
* Length Indicator</i> byte is included in the frame.
*
* @see DATA_LENGTH_INDICATOR
*/
const COMPRESSION = 8;
/**
* This flag indicates whether or not the frame is encrypted. If set, one byte
* indicating with which method it was encrypted will be added to the frame.
* See description of the {@link ID3_Frame_ENCR} frame for more information
* about encryption method registration. Encryption should be done after
* compression. Whether or not setting this flag requires the presence of a
* <i>Data Length Indicator</i> depends on the specific algorithm used.
*
* @see DATA_LENGTH_INDICATOR
*/
const ENCRYPTION = 4;
/**
* This flag indicates whether or not unsynchronisation was applied to this
* frame.
*
* @since ID3v2.4.0
*/
const UNSYNCHRONISATION = 2;
/**
* This flag indicates that a data length indicator has been added to the
* frame.
*
* @since ID3v2.4.0
*/
const DATA_LENGTH_INDICATOR = 1;
/** @var integer */
private $_identifier;
/** @var integer */
private $_size = 0;
/** @var integer */
private $_flags = 0;
/**
* Raw content of the frame.
*
* @var string
*/
protected $_data = "";
/**
* Constructs the class with given parameters and reads object related data
* from the ID3v2 tag.
*
* @todo Only limited subset of flags are processed.
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null) {
$this->_identifier = substr(get_class($this), -4);
} else {
$this->_identifier = $this->_reader->readString8(4);
/* ID3v2.3.0 size and flags; convert flags to 2.4.0 format */
if ($this->getOption("version", 4) < 4) {
$this->_size = $this->_reader->readUInt32BE();
$flags = $this->_reader->readUInt16BE();
if (($flags & 0x8000) == 0x8000)
$this->_flags |= self::DISCARD_ON_TAGCHANGE;
if (($flags & 0x4000) == 0x4000)
$this->_flags |= self::DISCARD_ON_FILECHANGE;
if (($flags & 0x2000) == 0x2000)
$this->_flags |= self::READ_ONLY;
if (($flags & 0x80) == 0x80)
$this->_flags |= self::COMPRESSION;
if (($flags & 0x40) == 0x40)
$this->_flags |= self::ENCRYPTION;
if (($flags & 0x20) == 0x20)
$this->_flags |= self::GROUPING_IDENTITY;
}
/* ID3v2.4.0 size and flags */
else {
$this->_size =
$this->_decodeSynchsafe32($this->_reader->readUInt32BE());
$this->_flags = $this->_reader->readUInt16BE();
}
$dataLength = $this->_size;
if ($this->hasFlag(self::DATA_LENGTH_INDICATOR)) {
$dataLength = $this->_decodeSynchsafe32($this->_reader->readUInt32BE());
$this->_size -= 4;
}
$this->_data = $this->_reader->read($this->_size);
$this->_size = $dataLength;
if ($this->hasFlag(self::UNSYNCHRONISATION) ||
$this->getOption("unsynchronisation", false) === true)
$this->_data = $this->_decodeUnsynchronisation($this->_data);
}
}
/**
* Returns the frame identifier string.
*
* @return string
*/
public final function getIdentifier() { return $this->_identifier; }
/**
* Sets the frame identifier.
*
* @param string $identifier The identifier.
*/
public final function setIdentifier($identifier)
{
$this->_identifier = $identifier;
}
/**
* Returns the size of the data in the final frame, after encryption,
* compression and unsynchronisation. The size is excluding the frame header.
*
* @return integer
*/
public final function getSize() { return $this->_size; }
/**
* 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 final function hasFlag($flag)
{
return ($this->_flags & $flag) == $flag;
}
/**
* Returns the frame flags byte.
*
* @return integer
*/
public final function getFlags($flags) { return $this->_flags; }
/**
* Sets the frame flags byte.
*
* @param string $flags The flags byte.
*/
public final function setFlags($flags) { $this->_flags = $flags; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
abstract protected function _getData();
/**
* Returns the frame data with the header.
*
* @return string
*/
public function __toString()
{
/* ID3v2.3.0 Flags; convert from 2.4.0 format */
if ($this->getOption("version", 4) < 4) {
$flags = 0;
if ($this->hasFlag(self::DISCARD_ON_TAGCHANGE))
$flags = $flags | 0x8000;
if ($this->hasFlag(self::DISCARD_ON_FILECHANGE))
$flags = $flags | 0x4000;
if ($this->hasFlag(self::READ_ONLY))
$flags = $flags | 0x2000;
if ($this->hasFlag(self::COMPRESSION))
$flags = $flags | 0x80;
if ($this->hasFlag(self::ENCRYPTION))
$flags = $flags | 0x40;
if ($this->hasFlag(self::GROUPING_IDENTITY))
$flags = $flags | 0x20;
}
/* ID3v2.4.0 Flags */
else
$flags = $this->_flags;
if ($this->getOption("version", 4) < 4) {
$data = $this->_data = $this->_getData();
$size = $this->_size = strlen($data);
} else {
$data = $this->_data = $this->_getData();
$size = $this->_size = strlen($data);
$data = $this->_encodeUnsynchronisation($data);
if (($dataLength = strlen($data)) != $size) {
$size = 4 + $dataLength;
$data = Transform::toUInt32BE($this->_encodeSynchsafe32($this->_size)) .
$data;
$flags |= self::DATA_LENGTH_INDICATOR | self::UNSYNCHRONISATION;
$this->setOption("unsynchronisation", true);
} else
$flags &= ~(self::DATA_LENGTH_INDICATOR | self::UNSYNCHRONISATION);
}
return Transform::toString8(substr($this->_identifier, 0, 4), 4) .
Transform::toUInt32BE($this->_encodeSynchsafe32($size)) .
Transform::toUInt16BE($flags) . $data;
}
}

View File

@@ -1,171 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Audio encryption</i> indicates if the actual audio stream is
* encrypted, and by whom.
*
* The identifier is a URL containing an email address, or a link to a location
* where an email address can be found, that belongs to the organisation
* responsible for this specific encrypted audio file. Questions regarding the
* encrypted audio should be sent to the email address specified. There may be
* more than one AENC frame in a tag, but only one with the same owner
* identifier.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_AENC extends ID3_Frame
{
/** @var string */
private $_owner;
/** @var integer */
private $_previewStart;
/** @var integer */
private $_previewLength;
/** @var string */
private $_encryptionInfo;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
list($this->_owner, $this->_data) = $this->_explodeString8($this->_data, 2);
$this->_previewStart = Transform::fromUInt16BE(substr($this->_data, 0, 2));
$this->_previewLength = Transform::fromUInt16BE(substr($this->_data, 2, 2));
$this->_encryptionInfo = substr($this->_data, 4);
}
/**
* Returns the owner identifier string.
*
* @return string
*/
public function getOwner() { return $this->_owner; }
/**
* Sets the owner identifier string.
*
* @param string $owner The owner identifier string.
*/
public function setOwner($owner) { $this->_owner = $owner; }
/**
* Returns the pointer to an unencrypted part of the audio in frames.
*
* @return integer
*/
public function getPreviewStart() { return $this->_previewStart; }
/**
* Sets the pointer to an unencrypted part of the audio in frames.
*
* @param integer $previewStart The pointer to an unencrypted part.
*/
public function setPreviewStart($previewStart)
{
$this->_previewStart = $previewStart;
}
/**
* Returns the length of the preview in frames.
*
* @return integer
*/
public function getPreviewLength() { return $this->_previewLength; }
/**
* Sets the length of the preview in frames.
*
* @param integer $previewLength The length of the preview.
*/
public function setPreviewLength($previewLength)
{
$this->_previewLength = $previewLength;
}
/**
* Returns the encryption info.
*
* @return string
*/
public function getEncryptionInfo() { return $this->_encryptionInfo; }
/**
* Sets the encryption info binary string.
*
* @param string $encryptionInfo The data string.
*/
public function setEncryptionInfo($encryptionInfo)
{
$this->_encryptionInfo = $encryptionInfo;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
$this->_owner . "\0" . Transform::toUInt16BE($this->_previewStart) .
Transform::toUInt16BE($this->_previewLength) . $this->_encryptionInfo;
}
}

View File

@@ -1,274 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Encoding.php");
/**#@-*/
/**
* The <i>Attached picture</i> frame contains a picture directly related to the
* audio file. Image format is the MIME type and subtype for the image.
*
* There may be several pictures attached to one file, each in their individual
* APIC frame, but only one with the same content descriptor. There may only
* be one picture with the same picture type. There is the possibility to put
* only a link to the image file by using the MIME type "-->" and having a
* complete URL instead of picture data.
*
* The use of linked files should however be used sparingly since there is the
* risk of separation of files.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_APIC extends ID3_Frame
implements ID3_Encoding
{
/**
* The list of image types.
*
* @var Array
*/
public static $types = array
("Other", "32x32 pixels file icon (PNG only)", "Other file icon",
"Cover (front)", "Cover (back)", "Leaflet page",
"Media (e.g. label side of CD)", "Lead artist/lead performer/soloist",
"Artist/performer", "Conductor", "Band/Orchestra", "Composer",
"Lyricist/text writer", "Recording Location", "During recording",
"During performance", "Movie/video screen capture",
"A bright coloured fish", "Illustration", "Band/artist logotype",
"Publisher/Studio logotype");
/** @var integer */
private $_encoding;
/** @var string */
private $_mimeType = "image/unknown";
/** @var integer */
private $_imageType = 0;
/** @var string */
private $_description;
/** @var string */
private $_imageData;
/** @var integer */
private $_imageSize = 0;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
$this->_encoding = $this->getOption("encoding", ID3_Encoding::UTF8);
if ($reader === null)
return;
$encoding = Transform::fromUInt8($this->_data[0]);
$this->_mimeType = substr
($this->_data, 1, ($pos = strpos($this->_data, "\0", 1)) - 1);
$this->_imageType = Transform::fromUInt8($this->_data[++$pos]);
$this->_data = substr($this->_data, $pos + 1);
switch ($encoding) {
case self::UTF16:
list ($this->_description, $this->_imageData) =
$this->_explodeString16($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16");
break;
case self::UTF16BE:
list ($this->_description, $this->_imageData) =
$this->_explodeString16($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16be");
break;
case self::UTF8:
list ($this->_description, $this->_imageData) =
$this->_explodeString8($this->_data, 2);
$this->_description = $this->_convertString
($this->_description, "utf-8");
break;
default:
list ($this->_description, $this->_imageData) =
$this->_explodeString8($this->_data, 2);
$this->_description = $this->_convertString
($this->_description, "iso-8859-1");
}
$this->_imageSize = strlen($this->_imageData);
}
/**
* Returns the text encoding.
*
* All the strings read from a file are automatically converted to the
* character encoding specified with the <var>encoding</var> option. See
* {@link ID3v2} for details. This method returns the original text encoding
* used to write the frame.
*
* @return integer
*/
public function getEncoding() { return $this->_encoding; }
/**
* Sets the text encoding.
*
* All the string written to the frame are done so using given character
* encoding. No conversions of existing data take place upon the call to this
* method thus all texts must be given in given character encoding.
*
* The default character encoding used to write the frame is UTF-8.
*
* @see ID3_Encoding
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding) { $this->_encoding = $encoding; }
/**
* Returns the MIME type. The MIME type is always ISO-8859-1 encoded.
*
* @return string
*/
public function getMimeType() { return $this->_mimeType; }
/**
* Sets the MIME type. The MIME type is always ISO-8859-1 encoded.
*
* @param string $mimeType The MIME type.
*/
public function setMimeType($mimeType) { $this->_mimeType = $mimeType; }
/**
* Returns the image type.
*
* @return integer
*/
public function getImageType() { return $this->_imageType; }
/**
* Sets the image type code.
*
* @param integer $imageType The image type code.
*/
public function setImageType($imageType) { $this->_imageType = $imageType; }
/**
* Returns the file description.
*
* @return string
*/
public function getDescription() { return $this->_description; }
/**
* Sets the content description text using given encoding.
*
* @param string $description The content description text.
* @param integer $encoding The text encoding.
*/
public function setDescription($description, $encoding = false)
{
$this->_description = $description;
if ($encoding !== false)
$this->_encoding = $encoding;
}
/**
* Returns the embedded image data.
*
* @return string
*/
public function getImageData() { return $this->_imageData; }
/**
* Sets the embedded image data. Also updates the image size field to
* correspond the new data.
*
* @param string $imageData The image data.
*/
public function setImageData($imageData)
{
$this->_imageData = $imageData;
$this->_imageSize = strlen($imageData);
}
/**
* Returns the size of the embedded image data.
*
* @return integer
*/
public function getImageSize() { return $this->_imageSize; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_encoding) . $this->_mimeType . "\0" .
Transform::toUInt8($this->_imageType);
switch ($this->_encoding) {
case self::UTF16LE:
$data .= Transform::toString16
($this->_description, Transform::LITTLE_ENDIAN_ORDER, 1);
break;
case self::UTF16:
case self::UTF16BE:
$data .= Transform::toString16($this->_description, false, 1);
break;
default:
$data .= $this->_description . "\0";
}
return $data . $this->_imageData;
}
}

View File

@@ -1,160 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* Audio files with variable bit rates are intrinsically difficult to deal with
* in the case of seeking within the file. The <i>Audio seek point index</i> or
* ASPI frame makes seeking easier by providing a list a seek points within the
* audio file. The seek points are a fractional offset within the audio data,
* providing a starting point from which to find an appropriate point to start
* decoding. The presence of an ASPI frame requires the existence of a
* {@link ID3_Frame_TLEN} frame, indicating the duration of the file in
* milliseconds. There may only be one audio seek point index frame in a tag.
*
* @todo Data parsing and write support
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
* @since ID3v2.4.0
*/
final class ID3_Frame_ASPI extends ID3_Frame
{
/** @var integer */
private $_dataStart;
/** @var integer */
private $_dataLength;
/** @var integer */
private $_size;
/** @var Array */
private $_fractions = array();
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null) {
require_once("ID3/Exception.php");
throw new ID3_Exception("Write not supported yet");
}
$this->_dataStart = Transform::fromInt32BE(substr($this->_data, 0, 4));
$this->_dataLength = Transform::fromInt32BE(substr($this->_data, 4, 4));
$this->_size = Transform::fromInt16BE(substr($this->_data, 8, 2));
$bitsPerPoint = Transform::fromInt8($this->_data[10]);
/*for ($i = 0, $offset = 11; $i < $this->_size; $i++) {
if ($bitsPerPoint == 16) {
$this->_fractions[$i] = substr($this->_data, $offset, 2);
$offset += 2;
} else {
$this->_fractions[$i] = substr($this->_data, $offset, 1);
$offset ++;
}
}*/
}
/**
* Returns the byte offset from the beginning of the file.
*
* @return integer
*/
public function getDataStart() { return $this->_dataStart; }
/**
* Sets the byte offset from the beginning of the file.
*
* @param integer $dataStart The offset.
*/
public function setDataStart($dataStart) { $this->_dataStart = $dataStart; }
/**
* Returns the byte length of the audio data being indexed.
*
* @return integer
*/
public function getDataLength() { return $this->_dataLength; }
/**
* Sets the byte length of the audio data being indexed.
*
* @param integer $dataLength The length.
*/
public function setDataLength($dataLength)
{
$this->_dataLength = $dataLength;
}
/**
* Returns the number of index points in the frame.
*
* @return integer
*/
public function getSize() { return count($this->_fractions); }
/**
* Returns the numerator of the fraction representing a relative position in
* the data or <var>false</var> if index not defined. The denominator is 2
* to the power of b.
*
* @param integer $index The fraction numerator.
* @return integer
*/
public function getFractionAt($index)
{
if (isset($this->_fractions[$index]))
return $this->_fractions[$index];
return false;
}
}

View File

@@ -1,96 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* A base class for all the URL link frames.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
abstract class ID3_Frame_AbstractLink extends ID3_Frame
{
/** @var string */
protected $_link;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader !== null)
$this->_link = implode($this->_explodeString8($this->_data, 1), "");
}
/**
* Returns the link associated with the frame.
*
* @return string
*/
public function getLink() { return $this->_link; }
/**
* Sets the link. The link encoding is always ISO-8859-1.
*
* @param string $link The link.
*/
public function setLink($link) { $this->_link = $link; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return $this->_link;
}
}

View File

@@ -1,188 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Encoding.php");
/**#@-*/
/**
* A base class for all the text frames.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
abstract class ID3_Frame_AbstractText extends ID3_Frame
implements ID3_Encoding
{
/**
* The text encoding.
*
* @var integer
*/
protected $_encoding;
/**
* The text array.
*
* @var string
*/
protected $_text;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
$this->_encoding = $this->getOption("encoding", ID3_Encoding::UTF8);
if ($reader === null)
return;
$encoding = Transform::fromUInt8($this->_data[0]);
$this->_data = substr($this->_data, 1);
switch ($encoding) {
case self::UTF16:
$this->_text = $this->_convertString
($this->_explodeString16(Transform::fromString16($this->_data)),
"utf-16");
break;
case self::UTF16BE:
$this->_text = $this->_convertString
($this->_explodeString16(Transform::fromString16($this->_data)),
"utf-16be");
break;
case self::UTF8:
$this->_text = $this->_convertString
($this->_explodeString8(Transform::fromString8($this->_data)), "utf-8");
break;
default:
$this->_text = $this->_convertString
($this->_explodeString8(Transform::fromString8($this->_data)),
"iso-8859-1");
}
}
/**
* Returns the text encoding.
*
* All the strings read from a file are automatically converted to the
* character encoding specified with the <var>encoding</var> option. See
* {@link ID3v2} for details. This method returns the original text encoding
* used to write the frame.
*
* @return integer
*/
public function getEncoding() { return $this->_encoding; }
/**
* Sets the text encoding.
*
* All the string written to the frame are done so using given character
* encoding. No conversions of existing data take place upon the call to this
* method thus all texts must be given in given character encoding.
*
* The default character encoding used to write the frame is UTF-8.
*
* @see ID3_Encoding
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding) { $this->_encoding = $encoding; }
/**
* Returns the first text chunk the frame contains.
*
* @return string
*/
public function getText() { return $this->_text[0]; }
/**
* Returns an array of texts the frame contains.
*
* @return Array
*/
public function getTexts() { return $this->_text; }
/**
* Sets the text using given encoding.
*
* @param mixed $text The test string or an array of strings.
* @param integer $encoding The text encoding.
*/
public function setText($text, $encoding = false)
{
$this->_text = is_array($text) ? $text : array($text);
if ($encoding !== false)
$this->_encoding = $encoding;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_encoding);
switch ($this->_encoding) {
case self::UTF16LE:
$array = $this->_text;
foreach ($array as &$text)
$text = Transform::toString16($text, Transform::LITTLE_ENDIAN_ORDER);
$data .= implode("\0\0", $array);
break;
case self::UTF16:
case self::UTF16BE:
$data .= implode("\0\0", $this->_text);
break;
default:
$data .= implode("\0", $this->_text);
}
return $data;
}
}

View File

@@ -1,254 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Encoding.php");
require_once("ID3/Language.php");
require_once("ID3/Exception.php");
/**#@-*/
/**
* The <i>Comments</i> frame is intended for any kind of full text information
* that does not fit in any other frame. It consists of a frame header followed
* by encoding, language and content descriptors and is ended with the actual
* comment as a text string. Newline characters are allowed in the comment text
* string. There may be more than one comment frame in each tag, but only one
* with the same language and content descriptor.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_COMM extends ID3_Frame
implements ID3_Encoding, ID3_Language
{
/** @var integer */
private $_encoding;
/** @var string */
private $_language = "und";
/** @var string */
private $_description;
/** @var string */
private $_text;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
$this->_encoding = $this->getOption("encoding", ID3_Encoding::UTF8);
if ($reader === null)
return;
$encoding = Transform::fromUInt8($this->_data[0]);
$this->_language = substr($this->_data, 1, 3);
if ($this->_language == "XXX")
$this->_language = "und";
$this->_data = substr($this->_data, 4);
switch ($encoding) {
case self::UTF16:
list ($this->_description, $this->_text) =
$this->_explodeString16($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16");
$this->_text = $this->_convertString
(Transform::fromString16($this->_text), "utf-16");
break;
case self::UTF16BE:
list ($this->_description, $this->_text) =
$this->_explodeString16($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16be");
$this->_text = $this->_convertString
(Transform::fromString16($this->_text), "utf-16be");
break;
case self::UTF8:
list ($this->_description, $this->_text) =
$this->_explodeString8($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString8($this->_description), "utf-8");
$this->_text = $this->_convertString
(Transform::fromString8($this->_text), "utf-8");
break;
default:
list ($this->_description, $this->_text) =
$this->_explodeString8($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString8($this->_description), "iso-8859-1");
$this->_text = $this->_convertString
(Transform::fromString8($this->_text), "iso-8859-1");
}
}
/**
* Returns the text encoding.
*
* All the strings read from a file are automatically converted to the
* character encoding specified with the <var>encoding</var> option. See
* {@link ID3v2} for details. This method returns the original text encoding
* used to write the frame.
*
* @return integer
*/
public function getEncoding() { return $this->_encoding; }
/**
* Sets the text encoding.
*
* All the string written to the frame are done so using given character
* encoding. No conversions of existing data take place upon the call to this
* method thus all texts must be given in given character encoding.
*
* The default character encoding used to write the frame is UTF-8.
*
* @see ID3_Encoding
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding) { $this->_encoding = $encoding; }
/**
* Returns the language code as specified in the
* {@link http://www.loc.gov/standards/iso639-2/ ISO-639-2} standard.
*
* @return string
*/
public function getLanguage() { return $this->_language; }
/**
* Sets the text language code as specified in the
* {@link http://www.loc.gov/standards/iso639-2/ ISO-639-2} standard.
*
* @see ID3_Language
* @param string $language The language code.
*/
public function setLanguage($language)
{
if ($language == "XXX")
$language = "und";
$this->_language = substr($language, 0, 3);
}
/**
* Returns the short content description.
*
* @return string
*/
public function getDescription() { return $this->_description; }
/**
* Sets the content description text using given encoding. The description
* language and encoding must be that of the actual text.
*
* @param string $description The content description text.
* @param string $language The language code.
* @param integer $encoding The text encoding.
*/
public function setDescription($description, $language = false,
$encoding = false)
{
$this->_description = $description;
if ($language !== false)
$this->setLanguage($language);
if ($encoding !== false)
$this->setEncoding($encoding);
}
/**
* Returns the comment text.
*
* @return string
*/
public function getText() { return $this->_text; }
/**
* Sets the text using given encoding. The text language and encoding must be
* that of the description text.
*
* @param mixed $text The test string.
* @param string $language The language code.
* @param integer $encoding The text encoding.
*/
public function setText($text, $language = false, $encoding = false)
{
$this->_text = $text;
if ($language !== false)
$this->setLanguage($language);
if ($encoding !== false)
$this->setEncoding($encoding);
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_encoding) . $this->_language;
switch ($this->_encoding) {
case self::UTF16LE:
$data .= Transform::toString16
($this->_description, Transform::LITTLE_ENDIAN_ORDER, 1) .
Transform::toString16($this->_text, Transform::LITTLE_ENDIAN_ORDER);
break;
case self::UTF16:
case self::UTF16BE:
$data .= Transform::toString16($this->_description, false, 1) .
Transform::toString16($this->_text);
break;
default:
$data .= $this->_description . "\0" . $this->_text;
}
return $data;
}
}

View File

@@ -1,400 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Encoding.php");
/**#@-*/
/**
* The <i>Commercial frame</i> enables several competing offers in the same tag
* by bundling all needed information. That makes this frame rather complex but
* it's an easier solution than if one tries to achieve the same result with
* several frames.
*
* There may be more than one commercial frame in a tag, but no two may be
* identical.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_COMR extends ID3_Frame
implements ID3_Encoding
{
/**
* The delivery types.
*
* @var Array
*/
public static $types = array
("Other", "Standard CD album with other songs", "Compressed audio on CD",
"File over the Internet", "Stream over the Internet", "As note sheets",
"As note sheets in a book with other sheets", "Music on other media",
"Non-musical merchandise");
/** @var integer */
private $_encoding;
/** @var string */
private $_currency = "EUR";
/** @var string */
private $_price;
/** @var string */
private $_date;
/** @var string */
private $_contact;
/** @var integer */
private $_delivery = 0;
/** @var string */
private $_seller;
/** @var string */
private $_description;
/** @var string */
private $_mimeType = false;
/** @var string */
private $_imageData;
/** @var integer */
private $_imageSize = 0;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
$this->_encoding = $this->getOption("encoding", ID3_Encoding::UTF8);
if ($reader === null)
return;
$encoding = Transform::fromUInt8($this->_data[0]);
list($pricing, $this->_data) =
$this->_explodeString8(substr($this->_data, 1), 2);
$this->_currency = substr($pricing, 0, 3);
$this->_price = substr($pricing, 3);
$this->_date = substr($this->_data, 0, 8);
list($this->_contact, $this->_data) =
$this->_explodeString8(substr($this->_data, 8), 2);
$this->_delivery = Transform::fromUInt8($this->_data[0]);
$this->_data = substr($this->_data, 1);
switch ($encoding) {
case self::UTF16:
list ($this->_seller, $this->_description, $this->_data) =
$this->_explodeString16($this->_data, 3);
$this->_seller = $this->_convertString
(Transform::fromString16($this->_seller), "utf-16");
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16");
break;
case self::UTF16BE:
list ($this->_seller, $this->_description, $this->_data) =
$this->_explodeString16($this->_data, 3);
$this->_seller = $this->_convertString
(Transform::fromString16($this->_seller), "utf-16be");
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16be");
break;
case self::UTF8:
list ($this->_seller, $this->_description, $this->_data) =
$this->_explodeString8($this->_data, 3);
$this->_seller = $this->_convertString
(Transform::fromString8($this->_seller), "utf-8");
$this->_description = $this->_convertString
(Transform::fromString8($this->_description), "utf-8");
break;
default:
list ($this->_seller, $this->_description, $this->_data) =
$this->_explodeString8($this->_data, 3);
$this->_seller = $this->_convertString
(Transform::fromString8($this->_seller), "iso-8859-1");
$this->_description = $this->_convertString
(Transform::fromString8($this->_description), "iso-8859-1");
}
if (strlen($this->_data) == 0)
return;
list($this->_mimeType, $this->_imageData) =
$this->_explodeString8($this->_data, 2);
$this->_imageSize = strlen($this->_imageData);
}
/**
* Returns the text encoding.
*
* All the strings read from a file are automatically converted to the
* character encoding specified with the <var>encoding</var> option. See
* {@link ID3v2} for details. This method returns the original text encoding
* used to write the frame.
*
* @return integer
*/
public function getEncoding() { return $this->_encoding; }
/**
* Sets the text encoding.
*
* All the string written to the frame are done so using given character
* encoding. No conversions of existing data take place upon the call to this
* method thus all texts must be given in given character encoding.
*
* The default character encoding used to write the frame is UTF-8.
*
* @see ID3_Encoding
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding) { $this->_encoding = $encoding; }
/**
* Returns the currency code, encoded according to
* {@link http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/currency_codes/currency_codes_list-1.htm
* ISO 4217} alphabetic currency code.
*
* @return string
*/
public function getCurrency() { return $this->_currency; }
/**
* Sets the currency used in transaction, encoded according to
* {@link http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/currency_codes/currency_codes_list-1.htm
* ISO 4217} alphabetic currency code.
*
* @param string $currency The currency code.
*/
public function setCurrency($currency) { $this->_currency = $currency; }
/**
* Returns the price as a numerical string using "." as the decimal separator.
*
* In the price string several prices may be concatenated, separated by a "/"
* character, but there may only be one currency of each type.
*
* @return string
*/
public function getPrice() { return $this->_price; }
/**
* Sets the price. The price must use "." as the decimal separator and have
* multiple values be separated by a "/" character.
*
* @param string $price The price.
*/
public function setPrice($price)
{
$this->_price = $price;
}
/**
* Returns the date as an 8 character date string (YYYYMMDD), describing for
* how long the price is valid.
*
* @return string
*/
public function getDate() { return $this->_date; }
/**
* Sets the date describing for how long the price is valid for. The date must
* be an 8 character date string (YYYYMMDD).
*
* @param string $date The date string.
*/
public function setDate($date) { $this->_date = $date; }
/**
* Returns the contact URL, with which the user can contact the seller.
*
* @return string
*/
public function getContact() { return $this->_contact; }
/**
* Sets the contact URL, with which the user can contact the seller.
*
* @param string $contact The contact URL.
*/
public function setContact($contact) { $this->_contact = $contact; }
/**
* Returns the delivery type with whitch the audio was delivered when bought.
*
* @return integer
*/
public function getDelivery() { return $this->_delivery; }
/**
* Sets the delivery type with whitch the audio was delivered when bought.
*
* @param integer $delivery The delivery type code.
*/
public function setDelivery($delivery) { $this->_delivery = $delivery; }
/**
* Returns the name of the seller.
*
* @return string
*/
public function getSeller() { return $this->_seller; }
/**
* Sets the name of the seller using given encoding. The seller text encoding
* must be that of the description text.
*
* @param string $seller The name of the seller.
* @param integer $encoding The text encoding.
*/
public function setSeller($seller, $encoding = false)
{
$this->_seller = $seller;
if ($encoding !== false)
$this->_encoding = $encoding;
}
/**
* Returns the short description of the product.
*
* @return string
*/
public function getDescription() { return $this->_description; }
/**
* Sets the content description text using given encoding. The description
* encoding must be that of the seller text.
*
* @param string $description The content description text.
* @param integer $encoding The text encoding.
*/
public function setDescription($description, $encoding = false)
{
$this->_description = $description;
if ($encoding !== false)
$this->_encoding = $encoding;
}
/**
* Returns the MIME type of the seller's company logo, if attached, or
* <var>false</var> otherwise. Currently only "image/png" and "image/jpeg"
* are allowed.
*
* @return string
*/
public function getMimeType() { return $this->_mimeType; }
/**
* Sets the MIME type. Currently only "image/png" and "image/jpeg" are
* allowed. The MIME type is always ISO-8859-1 encoded.
*
* @param string $mimeType The MIME type.
*/
public function setMimeType($mimeType) { $this->_mimeType = $mimeType; }
/**
* Returns the embedded image binary data.
*
* @return string
*/
public function getImageData() { return $this->_imageData; }
/**
* Sets the embedded image data. Also updates the image size to correspond the
* new data.
*
* @param string $imageData The image data.
*/
public function setImageData($imageData)
{
$this->_imageData = $imageData;
$this->_imageSize = strlen($imageData);
}
/**
* Returns the size of the embedded image data.
*
* @return integer
*/
public function getImageSize() { return $this->_imageSize; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_encoding) . $this->_currency .
$this->_price . "\0" . $this->_date . $this->_contact . "\0" .
Transform::toUInt8($this->_delivery);
switch ($this->_encoding) {
case self::UTF16LE:
$data .= Transform::toString16
($this->_seller, Transform::LITTLE_ENDIAN_ORDER, 1) .
Transform::toString16
($this->_description, Transform::LITTLE_ENDIAN_ORDER, 1);
break;
case self::UTF16:
case self::UTF16BE:
$data .= Transform::toString16($this->_seller, false, 1) .
Transform::toString16($this->_description, false, 1);
break;
default:
$data .= $this->_seller . "\0" . $this->_description . "\0";
}
return
$data . ($this->_mimeType ?
$this->_mimeType . "\0" . $this->_imageData : "");
}
}

View File

@@ -1,156 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* To identify with which method a frame has been encrypted the encryption
* method must be registered in the tag with the <i>Encryption method
* registration</i> frame.
*
* The owner identifier a URL containing an email address, or a link to a
* location where an email address can be found, that belongs to the
* organisation responsible for this specific encryption method. Questions
* regarding the encryption method should be sent to the indicated email
* address.
*
* The method symbol contains a value that is associated with this method
* throughout the whole tag, in the range $80-F0. All other values are reserved.
* The method symbol may optionally be followed by encryption specific data.
*
* There may be several ENCR frames in a tag but only one containing the same
* symbol and only one containing the same owner identifier. The method must be
* used somewhere in the tag. See {@link ID3_Frame#ENCRYPTION} for more
* information.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_ENCR extends ID3_Frame
{
/** @var string */
private $_owner;
/** @var integer */
private $_method;
/** @var string */
private $_encryptionData;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
list($this->_owner, $this->_data) = $this->_explodeString8($this->_data, 2);
$this->_method = Transform::fromInt8($this->_data[0]);
$this->_encryptionData = substr($this->_data, 1);
}
/**
* Returns the owner identifier string.
*
* @return string
*/
public function getOwner() { return $this->_owner; }
/**
* Sets the owner identifier string.
*
* @param string $owner The owner identifier string.
*/
public function setOwner($owner) { $this->_owner = $owner; }
/**
* Returns the method symbol.
*
* @return integer
*/
public function getMethod() { return $this->_method; }
/**
* Sets the method symbol.
*
* @param integer $method The method symbol byte.
*/
public function setMethod($method) { $this->_method = $method; }
/**
* Returns the encryption data.
*
* @return string
*/
public function getEncryptionData() { return $this->_encryptionData; }
/**
* Sets the encryption data.
*
* @param string $encryptionData The encryption data string.
*/
public function setEncryptionData($encryptionData)
{
$this->_encryptionData = $encryptionData;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
$this->_owner . "\0" . Transform::toInt8($this->_method) .
$this->_encryptionData;
}
}

View File

@@ -1,193 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Equalisation (2)</i> is another subjective, alignment frame. It allows
* the user to predefine an equalisation curve within the audio file. There may
* be more than one EQU2 frame in each tag, but only one with the same
* identification string.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
* @since ID3v2.4.0
*/
final class ID3_Frame_EQU2 extends ID3_Frame
{
/**
* Interpolation type that defines that no interpolation is made. A jump from
* one adjustment level to another occurs in the middle between two adjustment
* points.
*/
const BAND = 0;
/**
* Interpolation type that defines that interpolation between adjustment
* points is linear.
*/
const LINEAR = 1;
/** @var integer */
private $_interpolation;
/** @var string */
private $_device;
/** @var Array */
private $_adjustments;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_interpolation = Transform::fromInt8($this->_data[0]);
list ($this->_device, $this->_data) =
$this->_explodeString8(substr($this->_data, 1), 2);
for ($i = 0; $i < strlen($this->_data); $i += 4)
$this->_adjustments
[(int)(Transform::fromUInt16BE(substr($this->_data, $i, 2)) / 2)] =
Transform::fromInt16BE(substr($this->_data, $i + 2, 2)) / 512.0;
ksort($this->_adjustments);
}
/**
* Returns the interpolation method. The interpolation method describes which
* method is preferred when an interpolation between the adjustment point that
* follows.
*
* @return integer
*/
public function getInterpolation() { return $this->_interpolation; }
/**
* Sets the interpolation method. The interpolation method describes which
* method is preferred when an interpolation between the adjustment point that
* follows.
*
* @param integer $interpolation The interpolation method code.
*/
public function setInterpolation($interpolation)
{
$this->_interpolation = $interpolation;
}
/**
* Returns the device where the adjustments should apply.
*
* @return string
*/
public function getDevice() { return $this->_device; }
/**
* Sets the device where the adjustments should apply.
*
* @param string $device The device.
*/
public function setDevice($device) { $this->_device = $device; }
/**
* Returns the array containing adjustments having frequencies as keys and
* their corresponding adjustments as values.
*
* Adjustment points are ordered by frequency.
*
* @return Array
*/
public function getAdjustments() { return $this->_adjustments; }
/**
* Adds a volume adjustment setting for given frequency. The frequency can
* have a value from 0 to 32767 Hz, and the adjustment </> +/- 64 dB with a
* precision of 0.001953125 dB.
*
* @param integer $frequency The frequency, in hertz.
* @param integer $adjustment The adjustment, in dB.
*/
public function addAdjustment($frequency, $adjustment)
{
$this->_adjustments[$frequency] = $adjustment;
ksort($this->_adjustments);
}
/**
* Sets the adjustments array. The array must have frequencies as keys and
* their corresponding adjustments as values. The frequency can have a value
* from 0 to 32767 Hz, and the adjustment </> +/- 64 dB with a precision of
* 0.001953125 dB. One frequency should only be described once in the frame.
*
* @param Array $adjustments The adjustments array.
*/
public function setAdjustments($adjustments)
{
$this->_adjustments = $adjustments;
ksort($this->_adjustments);
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toInt8($this->_interpolation) . $this->_device . "\0";
foreach ($this->_adjustments as $frequency => $adjustment)
$data .= Transform::toUInt16BE($frequency * 2) .
Transform::toInt16BE($adjustment * 512);
return $data;
}
}

View File

@@ -1,142 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @deprecated ID3v2.3.0
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Equalisation</i> frame is another subjective, alignment frame. It
* allows the user to predefine an equalisation curve within the audio file.
* There may only be one EQUA frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
* @deprecated ID3v2.3.0
*/
final class ID3_Frame_EQUA extends ID3_Frame
{
/** @var Array */
private $_adjustments;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$adjustmentBits = Transform::fromInt8($this->_data[0]);
if ($adjustmentBits <= 8 || $adjustmentBits > 16) {
require_once("ID3/Exception.php");
throw new ID3_Exception
("Unsupported adjustment bit size of: " . $adjustmentBits);
}
for ($i = 1; $i < strlen($this->_data); $i += 4) {
$frequency = Transform::fromUInt16BE(substr($this->_data, $i, 2));
$this->_adjustments[($frequency & 0x7fff)] =
($frequency & 0x8000) == 0x8000 ?
Transform::fromUInt16BE(substr($this->_data, $i + 2, 2)) :
-Transform::fromUInt16BE(substr($this->_data, $i + 2, 2));
}
ksort($this->_adjustments);
}
/**
* Returns the array containing adjustments having frequencies as keys and
* their corresponding adjustments as values.
*
* @return Array
*/
public function getAdjustments() { return $this->_adjustments; }
/**
* Adds a volume adjustment setting for given frequency. The frequency can
* have a value from 0 to 32767 Hz.
*
* @param integer $frequency The frequency, in hertz.
* @param integer $adjustment The adjustment, in dB.
*/
public function addAdjustment($frequency, $adjustment)
{
$this->_adjustments[$frequency] = $adjustment;
ksort($this->_adjustments);
}
/**
* Sets the adjustments array. The array must have frequencies as keys and
* their corresponding adjustments as values. The frequency can have a value
* from 0 to 32767 Hz. One frequency should only be described once in the
* frame.
*
* @param Array $adjustments The adjustments array.
*/
public function setAdjustments($adjustments)
{
$this->_adjustments = $adjustments;
ksort($this->_adjustments);
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toInt8(16);
foreach ($this->_adjustments as $frequency => $adjustment)
$data .= Transform::toUInt16BE
($adjustment > 0 ? $frequency | 0x8000 : $frequency & ~0x8000) .
Transform::toUInt16BE(abs($adjustment));
return $data;
}
}

View File

@@ -1,168 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Timing.php");
/**#@-*/
/**
* The <i>Event timing codes</i> allows synchronisation with key events in the
* audio.
*
* The events are an array of timestamp and type pairs. The time stamp is set to
* zero if directly at the beginning of the sound or after the previous event.
* All events are sorted in chronological order.
*
* The events $E0-EF are for user events. You might want to synchronise your
* music to something, like setting off an explosion on-stage, activating a
* screensaver etc.
*
* There may only be one ETCO frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_ETCO extends ID3_Frame
implements ID3_Timing
{
/**
* The list of event types.
*
* @var Array
*/
public static $types = array
("Padding", "End of initial silence", "Intro start", "Main part start",
"Outro start", "Outro end", "Verse start","Refrain start",
"Interlude start", "Theme start", "Variation start", "Key change",
"Time change", "Momentary unwanted noise", "Sustained noise",
"Sustained noise end", "Intro end", "Main part end", "Verse end",
"Refrain end", "Theme end", "Profanity", "Profanity end",
0xe0 => "User event", "User event", "User event", "User event",
"User event", "User event", "User event", "User event", "User event",
"User event", "User event", "User event", "User event", "User event",
0xfd => "Audio end (start of silence)", "Audio file ends",
"One more byte of events follows");
/** @var integer */
private $_format = ID3_Timing::MPEG_FRAMES;
/** @var Array */
private $_events = array();
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_format = Transform::fromUInt8($this->_data[0]);
for ($i = 1; $i < $this->getSize(); $i += 5) {
$this->_events[Transform::fromUInt32BE(substr($this->_data, $i + 1, 4))] =
$data = Transform::fromUInt8($this->_data[$i]);
if ($data == 0xff)
break;
}
ksort($this->_events);
}
/**
* Returns the timing format.
*
* @return integer
*/
public function getFormat() { return $this->_format; }
/**
* Sets the timing format.
*
* @see ID3_Timing
* @param integer $format The timing format.
*/
public function setFormat($format) { $this->_format = $format; }
/**
* Returns the events as an associated array having the timestamps as keys and
* the event types as values.
*
* @return Array
*/
public function getEvents() { return $this->_events; }
/**
* Sets the events using given format. The value must be an associated array
* having the timestamps as keys and the event types as values.
*
* @param Array $events The events array.
* @param integer $format The timing format.
*/
public function setEvents($events, $format = false)
{
$this->_events = $events;
if ($format !== false)
$this->_format = $format;
ksort($this->_events);
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_format);
foreach ($this->_events as $timestamp => $type)
$data .= Transform::toUInt8($type) . Transform::toUInt32BE($timestamp);
return $data;
}
}

View File

@@ -1,253 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Encoding.php");
/**#@-*/
/**
* In the <i>General encapsulated object</i> frame any type of file can be
* encapsulated.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_GEOB extends ID3_Frame
implements ID3_Encoding
{
/** @var integer */
private $_encoding;
/** @var string */
private $_mimeType;
/** @var string */
private $_filename;
/** @var string */
private $_description;
/** @var string */
private $_objectData;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
$this->_encoding = $this->getOption("encoding", ID3_Encoding::UTF8);
if ($reader === null)
return;
$encoding = Transform::fromUInt8($this->_data[0]);
$this->_mimeType = substr
($this->_data, 1, ($pos = strpos($this->_data, "\0", 1)) - 1);
$this->_data = substr($this->_data, $pos + 1);
switch ($encoding) {
case self::UTF16:
list ($this->_filename, $this->_description, $this->_objectData) =
$this->_explodeString16($this->_data, 3);
$this->_filename = $this->_convertString
(Transform::fromString16($this->_filename), "utf-16");
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16");
break;
case self::UTF16BE:
list ($this->_filename, $this->_description, $this->_objectData) =
$this->_explodeString16($this->_data, 3);
$this->_filename = $this->_convertString
(Transform::fromString16($this->_filename), "utf-16be");
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16be");
break;
case self::UTF8:
list ($this->_filename, $this->_description, $this->_objectData) =
$this->_explodeString8($this->_data, 3);
$this->_filename = $this->_convertString
(Transform::fromString8($this->_filename), "utf-8");
$this->_description = $this->_convertString
(Transform::fromString8($this->_description), "utf-8");
break;
default:
list ($this->_filename, $this->_description, $this->_objectData) =
$this->_explodeString8($this->_data, 3);
$this->_filename = $this->_convertString
(Transform::fromString8($this->_filename), "iso-8859-1");
$this->_description = $this->_convertString
(Transform::fromString8($this->_description), "iso-8859-1");
}
}
/**
* Returns the text encoding.
*
* All the strings read from a file are automatically converted to the
* character encoding specified with the <var>encoding</var> option. See
* {@link ID3v2} for details. This method returns the original text encoding
* used to write the frame.
*
* @return integer
*/
public function getEncoding() { return $this->_encoding; }
/**
* Sets the text encoding.
*
* All the string written to the frame are done so using given character
* encoding. No conversions of existing data take place upon the call to this
* method thus all texts must be given in given character encoding.
*
* The default character encoding used to write the frame is UTF-8.
*
* @see ID3_Encoding
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding) { $this->_encoding = $encoding; }
/**
* Returns the MIME type. The MIME type is always encoded with ISO-8859-1.
*
* @return string
*/
public function getMimeType() { return $this->_mimeType; }
/**
* Sets the MIME type. The MIME type is always ISO-8859-1 encoded.
*
* @param string $mimeType The MIME type.
*/
public function setMimeType($mimeType) { $this->_mimeType = $mimeType; }
/**
* Returns the file name.
*
* @return string
*/
public function getFilename() { return $this->_filename; }
/**
* Sets the file name using given encoding. The file name encoding must be
* that of the description text.
*
* @param string $description The file description text.
* @param integer $encoding The text encoding.
*/
public function setFilename($filename, $encoding = false)
{
$this->_filename = $filename;
if ($encoding !== false)
$this->_encoding = $encoding;
}
/**
* Returns the file description.
*
* @return string
*/
public function getDescription() { return $this->_description; }
/**
* Sets the file description text using given encoding. The description
* encoding must be that of the file name.
*
* @param string $description The file description text.
* @param integer $encoding The text encoding.
*/
public function setDescription($description, $encoding = false)
{
$this->_description = $description;
if ($encoding !== false)
$this->_encoding = $encoding;
}
/**
* Returns the embedded object binary data.
*
* @return string
*/
public function getObjectData() { return $this->_objectData; }
/**
* Sets the embedded object binary data.
*
* @param string $objectData The object data.
*/
public function setObjectData($objectData)
{
$this->_objectData = $objectData;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_encoding) . $this->_mimeType . "\0";
switch ($this->_encoding) {
case self::UTF16LE:
$data .= Transform::toString16
($this->_filename, Transform::LITTLE_ENDIAN_ORDER, 1) .
Transform::toString16
($this->_description, Transform::LITTLE_ENDIAN_ORDER, 1);
break;
case self::UTF16:
case self::UTF16BE:
$data .= Transform::toString16($this->_filename, false, 1) .
Transform::toString16($this->_description, false, 1);
break;
default:
$data .= $this->_filename . "\0" . $this->_description . "\0";
}
return $data . $this->_objectData;
}
}

View File

@@ -1,152 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Group identification registration</i> frame enables grouping of
* otherwise unrelated frames. This can be used when some frames are to be
* signed. To identify which frames belongs to a set of frames a group
* identifier must be registered in the tag with this frame.
*
* The owner identifier is a URL containing an email address, or a link to a
* location where an email address can be found, that belongs to the
* organisation responsible for this grouping. Questions regarding the grouping
* should be sent to the indicated email address.
*
* The group symbol contains a value that associates the frame with this group
* throughout the whole tag, in the range $80-F0. All other values are reserved.
* The group symbol may optionally be followed by some group specific data, e.g.
* a digital signature. There may be several GRID frames in a tag but only one
* containing the same symbol and only one containing the same owner identifier.
* The group symbol must be used somewhere in the tag. See
* {@link ID3_Frame#GROUPING_ownerENTITY} for more information.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_GRID extends ID3_Frame
{
/** @var string */
private $_owner;
/** @var integer */
private $_group;
/** @var string */
private $_groupData;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
list($this->_owner, $this->_data) = $this->_explodeString8($this->_data, 2);
$this->_group = Transform::fromUInt8($this->_data[0]);
$this->_groupData = substr($this->_data, 1);
}
/**
* Returns the owner identifier string.
*
* @return string
*/
public function getOwner() { return $this->_owner; }
/**
* Sets the owner identifier string.
*
* @param string $owner The owner identifier string.
*/
public function setOwner($owner) { $this->_owner = $owner; }
/**
* Returns the group symbol.
*
* @return integer
*/
public function getGroup() { return $this->_group; }
/**
* Sets the group symbol.
*
* @param integer $group The group symbol.
*/
public function setGroup($group) { $this->_group = $group; }
/**
* Returns the group dependent data.
*
* @return string
*/
public function getGroupData() { return $this->_groupData; }
/**
* Sets the group dependent data.
*
* @param string $groupData The data.
*/
public function setGroupData($groupData) { $this->_groupData = $groupData; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
$this->_owner . "\0" . Transform::toUInt8($this->_group) .
$this->_groupData;
}
}

View File

@@ -1,191 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @deprecated ID3v2.3.0
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Encoding.php");
/**#@-*/
/**
* The <i>Involved people list</i> is a frame containing the names of those
* involved, and how they were involved. There may only be one IPLS frame in
* each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
* @deprecated ID3v2.3.0
*/
final class ID3_Frame_IPLS extends ID3_Frame
implements ID3_Encoding
{
/** @var integer */
private $_encoding;
/** @var Array */
private $_people = array();
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
$this->_encoding = $this->getOption("encoding", ID3_Encoding::UTF8);
if ($reader === null)
return;
$encoding = Transform::fromUInt8($this->_data[0]);
$data = substr($this->_data, 1);
$order = Transform::MACHINE_ENDIAN_ORDER;
switch ($encoding) {
case self::UTF16:
$data = $this->_explodeString16($data);
foreach ($data as &$str)
$str = $this->_convertString
(Transform::fromString16($str, $order), "utf-16");
break;
case self::UTF16BE:
$data = $this->_explodeString16($data);
foreach ($data as &$str)
$str = $this->_convertString
(Transform::fromString16($str), "utf-16be");
break;
case self::UTF8:
$data = $this->_convertString($this->_explodeString8($data), "utf-8");
break;
default:
$data = $this->_convertString($this->_explodeString8($data), "iso-8859-1");
}
for ($i = 0; $i < count($data) - 1; $i += 2)
$this->_people[] = array($data[$i] => @$data[$i + 1]);
}
/**
* Returns the text encoding.
*
* All the strings read from a file are automatically converted to the
* character encoding specified with the <var>encoding</var> option. See
* {@link ID3v2} for details. This method returns the original text encoding
* used to write the frame.
*
* @return integer
*/
public function getEncoding() { return $this->_encoding; }
/**
* Sets the text encoding.
*
* All the string written to the frame are done so using given character
* encoding. No conversions of existing data take place upon the call to this
* method thus all texts must be given in given character encoding.
*
* The default character encoding used to write the frame is UTF-8.
*
* @see ID3_Encoding
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding) { $this->_encoding = $encoding; }
/**
* Returns the involved people list as an array. For each person, the array
* contains an entry, which too is an associate array with involvement as its
* key and involvee as its value.
*
* @return Array
*/
public function getPeople() { return $this->_people; }
/**
* Adds a person with his involvement.
*
* @return string
*/
public function addPerson($involvement, $person)
{
$this->_people[] = array($involvement => $person);
}
/**
* Sets the involved people list array. For each person, the array must
* contain an associate array with involvement as its key and involvee as its
* value.
*
* @param Array $people The involved people list.
*/
public function setPeople($people) { $this->_people = $people; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_encoding);
foreach ($this->_people as $entry) {
foreach ($entry as $key => $val) {
switch ($this->_encoding) {
case self::UTF16LE:
$data .= Transform::toString16
($key, Transform::LITTLE_ENDIAN_ORDER, 1) .
Transform::toString16($val, Transform::LITTLE_ENDIAN_ORDER, 1);
case self::UTF16:
case self::UTF16BE:
$data .= Transform::toString16($key, false, 1) .
Transform::toString16($val, false, 1);
break;
default:
$data .= $key . "\0" . $val . "\0";
}
}
}
return $data;
}
}

View File

@@ -1,173 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Linked information</i> frame is used to keep information duplication
* as low as possible by linking information from another ID3v2 tag that might
* reside in another audio file or alone in a binary file. It is recommended
* that this method is only used when the files are stored on a CD-ROM or other
* circumstances when the risk of file separation is low.
*
* Data should be retrieved from the first tag found in the file to which this
* link points. There may be more than one LINK frame in a tag, but only one
* with the same contents.
*
* A linked frame is to be considered as part of the tag and has the same
* restrictions as if it was a physical part of the tag (i.e. only one
* {@link ID3_Frame_RVRB} frame allowed, whether it's linked or not).
*
* Frames that may be linked and need no additional data are
* {@link ID3_Frame_ASPI}, {@link ID3_Frame_ETCO}, {@link ID3_Frame_EQU2},
* {@link ID3_Frame_MCDI}, {@link ID3_Frame_MLLT}, {@link ID3_Frame_OWNE},
* {@link ID3_Frame_RVA2}, {@link ID3_Frame_RVRB}, {@link ID3_Frame_SYTC}, the
* text information frames (ie frames descendats of
* {@link ID3_Frame_AbstractText}) and the URL link frames (ie frames descendants
* of {@link ID3_Frame_AbstractLink}).
*
* The {@link ID3_Frame_AENC}, {@link ID3_Frame_APIC}, {@link ID3_Frame_GEOB}
* and {@link ID3_Frame_TXXX} frames may be linked with the content descriptor
* as additional ID data.
*
* The {@link ID3_Frame_USER} frame may be linked with the language field as
* additional ID data.
*
* The {@link ID3_Frame_PRIV} frame may be linked with the owner identifier as
* additional ID data.
*
* The {@link ID3_Frame_COMM}, {@link ID3_Frame_SYLT} and {@link ID3_Frame_USLT}
* frames may be linked with three bytes of language descriptor directly
* followed by a content descriptor as additional ID data.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_LINK extends ID3_Frame
{
/** @var string */
private $_target;
/** @var string */
private $_url;
/** @var string */
private $_qualifier;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_target = substr($this->_data, 0, 4);
list($this->_url, $this->_qualifier) =
$this->_explodeString8(substr($this->_data, 4), 2);
}
/**
* Returns the target tag identifier.
*
* @return string
*/
public function getTarget() { return $this->_target; }
/**
* Sets the target tag identifier.
*
* @param string $target The target tag identifier.
*/
public function setTarget($target) { $this->_target = $target; }
/**
* Returns the target tag URL.
*
* @return string
*/
public function getUrl() { return $this->_url; }
/**
* Sets the target tag URL.
*
* @param string $url The target URL.
*/
public function setUrl($url) { $this->_url = $url; }
/**
* Returns the additional data to identify further the tag.
*
* @return string
*/
public function getQualifier() { return $this->_qualifier; }
/**
* Sets the additional data to be used in tag identification.
*
* @param string $identifier The qualifier.
*/
public function setQualifier($qualifier)
{
$this->_qualifier = $qualifier;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
Transform::toString8(substr($this->_target, 0, 4), 4) .
$this->_url . "\0" . $this->_qualifier;
}
}

View File

@@ -1,86 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* This frame is intended for music that comes from a CD, so that the CD can be
* identified in databases such as the CDDB. The frame consists of a binary dump
* of the Table Of Contents, TOC, from the CD, which is a header of 4 bytes and
* then 8 bytes/track on the CD plus 8 bytes for the lead out, making a
* maximum of 804 bytes. The offset to the beginning of every track on the CD
* should be described with a four bytes absolute CD-frame address per track,
* and not with absolute time. When this frame is used the presence of a valid
* {@link ID3_Frame_TRCK} frame is required, even if the CD's only got one
* track. It is recommended that this frame is always added to tags originating
* from CDs.
*
* There may only be one MCDI frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_MCDI extends ID3_Frame
{
/**
* Returns the CD TOC binary dump.
*
* @return string
*/
public function getData() { return $this->_data; }
/**
* Sets the CD TOC binary dump.
*
* @param string $data The CD TOC binary dump string.
*/
public function setData($data) { $this->_data = $data; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData() { return $this->_data; }
}

View File

@@ -1,172 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* To increase performance and accuracy of jumps within a MPEG audio file,
* frames with time codes in different locations in the file might be useful.
* The <i>MPEG location lookup table</i> frame includes references that the
* software can use to calculate positions in the file.
*
* The MPEG frames between reference describes how much the frame counter should
* be increased for every reference. If this value is two then the first
* reference points out the second frame, the 2nd reference the 4th frame, the
* 3rd reference the 6th frame etc. In a similar way the bytes between reference
* and milliseconds between reference points out bytes and milliseconds
* respectively.
*
* Each reference consists of two parts; a certain number of bits that describes
* the difference between what is said in bytes between reference and the
* reality and a certain number of bits that describes the difference between
* what is said in milliseconds between reference and the reality.
*
* There may only be one MLLT frame in each tag.
*
* @todo Data parsing and write support
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_MLLT extends ID3_Frame
{
/** @var integer */
private $_frames;
/** @var integer */
private $_bytes;
/** @var integer */
private $_milliseconds;
/** @var Array */
private $_deviation = array();
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null) {
require_once("ID3/Exception.php");
throw new ID3_Exception("Write not supported yet");
}
$this->_frames = Transform::fromInt16BE(substr($this->_data, 0, 2));
$this->_bytes = Transform::fromInt32BE(substr($this->_data, 2, 3));
$this->_milliseconds = Transform::fromInt32BE(substr($this->_data, 5, 3));
$byteDevBits = Transform::fromInt8($this->_data[8]);
$millisDevBits = Transform::fromInt8($this->_data[9]);
// $data = substr($this->_data, 10);
}
/**
* Returns the number of MPEG frames between reference.
*
* @return integer
*/
public function getFrames() { return $this->_frames; }
/**
* Sets the number of MPEG frames between reference.
*
* @param integer $frames The number of MPEG frames.
*/
public function setFrames($frames) { $this->_frames = $frames; }
/**
* Returns the number of bytes between reference.
*
* @return integer
*/
public function getBytes() { return $this->_bytes; }
/**
* Sets the number of bytes between reference.
*
* @param integer $bytes The number of bytes.
*/
public function setBytes($bytes) { $this->_bytes = $bytes; }
/**
* Returns the number of milliseconds between references.
*
* @return integer
*/
public function getMilliseconds() { return $this->_milliseconds; }
/**
* Sets the number of milliseconds between references.
*
* @param integer $milliseconds The number of milliseconds.
*/
public function setMilliseconds($milliseconds)
{
return $this->_milliseconds;
}
/**
* Returns the deviations as an array. Each value is an array containing two
* values, ie the deviation in bytes, and the deviation in milliseconds,
* respectively.
*
* @return Array
*/
public function getDeviation() { return $this->_deviation; }
/**
* Sets the deviations array. The array must consist of arrays, each of which
* having two values, the deviation in bytes, and the deviation in
* milliseconds, respectively.
*
* @param Array $deviation The deviations array.
*/
public function setDeviation($deviation) { $this->_deviation = $deviation; }
}

View File

@@ -1,238 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Encoding.php");
/**#@-*/
/**
* The <i>Ownership frame</i> might be used as a reminder of a made transaction
* or, if signed, as proof. Note that the {@link ID3_Frame_USER} and
* {@link ID3_Frame_TOWN} frames are good to use in conjunction with this one.
*
* There may only be one OWNE frame in a tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_OWNE extends ID3_Frame
implements ID3_Encoding
{
/** @var integer */
private $_encoding;
/** @var string */
private $_currency = "EUR";
/** @var string */
private $_price;
/** @var string */
private $_date;
/** @var string */
private $_seller;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
$this->_encoding = $this->getOption("encoding", ID3_Encoding::UTF8);
if ($reader === null)
return;
$encoding = Transform::fromUInt8($this->_data[0]);
list($tmp, $this->_data) =
$this->_explodeString8(substr($this->_data, 1), 2);
$this->_currency = substr($tmp, 0, 3);
$this->_price = substr($tmp, 3);
$this->_date = substr($this->_data, 0, 8);
$this->_data = substr($this->_data, 8);
switch ($encoding) {
case self::UTF16:
$this->_seller = $this->_convertString
(Transform::fromString16($this->_data), "utf-16");
break;
case self::UTF16BE:
$this->_seller = $this->_convertString
(Transform::fromString16($this->_data), "utf-16be");
break;
case self::UTF8:
$this->_seller = $this->_convertString
(Transform::fromString8($this->_data), "utf-8");
break;
default:
$this->_seller = $this->_convertString
(Transform::fromString8($this->_data), "iso-8859-1");
}
}
/**
* Returns the text encoding.
*
* All the strings read from a file are automatically converted to the
* character encoding specified with the <var>encoding</var> option. See
* {@link ID3v2} for details. This method returns the original text encoding
* used to write the frame.
*
* @return integer
*/
public function getEncoding() { return $this->_encoding; }
/**
* Sets the text encoding.
*
* All the string written to the frame are done so using given character
* encoding. No conversions of existing data take place upon the call to this
* method thus all texts must be given in given character encoding.
*
* The default character encoding used to write the frame is UTF-8.
*
* @see ID3_Encoding
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding) { $this->_encoding = $encoding; }
/**
* Returns the currency used in transaction, encoded according to
* {@link http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/currency_codes/currency_codes_list-1.htm
* ISO 4217} alphabetic currency code.
*
* @return string
*/
public function getCurrency() { return $this->_currency; }
/**
* Sets the currency used in transaction, encoded according to
* {@link http://www.iso.org/iso/support/faqs/faqs_widely_used_standards/widely_used_standards_other/currency_codes/currency_codes_list-1.htm
* ISO 4217} alphabetic currency code.
*
* @param string $currency The currency code.
*/
public function setCurrency($currency) { $this->_currency = $currency; }
/**
* Returns the price as a numerical string using "." as the decimal separator.
*
* @return string
*/
public function getPrice() { return $this->_price; }
/**
* Sets the price.
*
* @param integer $price The price.
*/
public function setPrice($price)
{
$this->_price = number_format($price, 2, ".", "");
}
/**
* Returns the date of purchase as an 8 character date string (YYYYMMDD).
*
* @return string
*/
public function getDate() { return $this->_date; }
/**
* Sets the date of purchase. The date must be an 8 character date string
* (YYYYMMDD).
*
* @param string $date The date string.
*/
public function setDate($date) { $this->_date = $date; }
/**
* Returns the name of the seller.
*
* @return string
*/
public function getSeller() { return $this->_seller; }
/**
* Sets the name of the seller using given encoding.
*
* @param string $seller The name of the seller.
* @param integer $encoding The text encoding.
*/
public function setSeller($seller, $encoding = false)
{
$this->_seller = $seller;
if ($encoding !== false)
$this->_encoding = $encoding;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_encoding) . $this->_currency .
$this->_price . "\0" . $this->_date;
switch ($this->_encoding) {
case self::UTF16LE:
$data .= Transform::toString16
($this->_seller, Transform::LITTLE_ENDIAN_ORDER);
break;
case self::UTF16:
case self::UTF16BE:
$data .= Transform::toString16($this->_seller);
break;
default:
$data .= Transform::toString8($this->_seller);
}
return $data;
}
}

View File

@@ -1,111 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Play counter</i> is simply a counter of the number of times a file has
* been played. The value is increased by one every time the file begins to
* play. There may only be one PCNT frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_PCNT extends ID3_Frame
{
/** @var integer */
private $_counter = 0;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
if (strlen($this->_data) > 4)
$this->_counter = Transform::fromInt64BE($this->_data); // UInt64
else
$this->_counter = Transform::fromUInt32BE($this->_data);
}
/**
* Returns the counter.
*
* @return integer
*/
public function getCounter() { return $this->_counter; }
/**
* Adds counter by one.
*/
public function addCounter() { $this->_counter++; }
/**
* Sets the counter value.
*
* @param integer $counter The counter value.
*/
public function setCounter($counter) { $this->_counter = $counter; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
$this->_counter > 4294967295 ?
Transform::toInt64BE($this->_counter) : // UInt64
Transform::toUInt32BE($this->_counter);
}
}

View File

@@ -1,161 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The purpose of the <i>Popularimeter</i> frame is to specify how good an audio
* file is. Many interesting applications could be found to this frame such as a
* playlist that features better audio files more often than others or it could
* be used to profile a person's taste and find other good files by comparing
* people's profiles. The frame contains the email address to the user, one
* rating byte and a four byte play counter, intended to be increased with one
* for every time the file is played.
*
* The rating is 1-255 where 1 is worst and 255 is best. 0 is unknown. If no
* personal counter is wanted it may be omitted. When the counter reaches all
* one's, one byte is inserted in front of the counter thus making the counter
* eight bits bigger in the same away as the play counter
* {@link ID3_Frame_PCNT}. There may be more than one POPM frame in each tag,
* but only one with the same email address.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_POPM extends ID3_Frame
{
/** @var string */
private $_owner;
/** @var integer */
private $_rating = 0;
/** @var integer */
private $_counter = 0;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
list($this->_owner, $this->_data) = $this->_explodeString8($this->_data, 2);
$this->_rating = Transform::fromUInt8($this->_data[0]);
$this->_data = substr($this->_data, 1);
if (strlen($this->_data) > 4)
$this->_counter = Transform::fromInt64BE($this->_data); // UInt64
else if (strlen($this->_data) > 0)
$this->_counter = Transform::fromUInt32BE($this->_data);
}
/**
* Returns the owner identifier string.
*
* @return string
*/
public function getOwner() { return $this->_owner; }
/**
* Sets the owner identifier string.
*
* @param string $owner The owner identifier string.
*/
public function setOwner($owner) { return $this->_owner = $owner; }
/**
* Returns the user rating.
*
* @return integer
*/
public function getRating() { return $this->_rating; }
/**
* Sets the user rating.
*
* @param integer $rating The user rating.
*/
public function setRating($rating) { $this->_rating = $rating; }
/**
* Returns the counter.
*
* @return integer
*/
public function getCounter() { return $this->_counter; }
/**
* Adds counter by one.
*/
public function addCounter() { $this->_counter++; }
/**
* Sets the counter value.
*
* @param integer $counter The counter value.
*/
public function setCounter($counter) { $this->_counter = $counter; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
$this->_owner . "\0" . Transform::toInt8($this->_rating) .
($this->_counter > 0xffffffff ?
Transform::toInt64BE($this->_counter) :
($this->_counter > 0 ? Transform::toUInt32BE($this->_counter) : 0));
}
}

View File

@@ -1,132 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Timing.php");
/**#@-*/
/**
* The <i>Position synchronisation frame</i> delivers information to the
* listener of how far into the audio stream he picked up; in effect, it states
* the time offset from the first frame in the stream. There may only be one
* POSS frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_POSS extends ID3_Frame
implements ID3_Timing
{
/** @var integer */
private $_format = ID3_Timing::MPEG_FRAMES;
/** @var integer */
private $_position;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_format = Transform::fromUInt8($this->_data[0]);
$this->_position = Transform::fromUInt32BE(substr($this->_data, 1, 4));
}
/**
* Returns the timing format.
*
* @return integer
*/
public function getFormat() { return $this->_format; }
/**
* Sets the timing format.
*
* @see ID3_Timing
* @param integer $format The timing format.
*/
public function setFormat($format) { $this->_format = $format; }
/**
* Returns the position where in the audio the listener starts to receive,
* i.e. the beginning of the next frame.
*
* @return integer
*/
public function getPosition() { return $this->_position; }
/**
* Sets the position where in the audio the listener starts to receive,
* i.e. the beginning of the next frame, using given format.
*
* @param integer $position The position.
* @param integer $format The timing format.
*/
public function setPosition($position, $format = false)
{
$this->_position = $position;
if ($format !== false)
$this->_format = $format;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
Transform::toUInt8($this->_format) .
Transform::toUInt32BE($this->_position);
}
}

View File

@@ -1,126 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Private frame</i> is used to contain information from a software
* producer that its program uses and does not fit into the other frames. The
* frame consists of an owner identifier string and the binary data. The owner
* identifier is URL containing an email address, or a link to a location where
* an email address can be found, that belongs to the organisation responsible
* for the frame. Questions regarding the frame should be sent to the indicated
* email address. The tag may contain more than one PRIV frame but only with
* different contents.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_PRIV extends ID3_Frame
{
/** @var string */
private $_owner;
/** @var string */
private $_privateData;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
list($this->_owner, $this->_privateData) =
$this->_explodeString8($this->_data, 2);
}
/**
* Returns the owner identifier string.
*
* @return string
*/
public function getOwner() { return $this->_owner; }
/**
* Sets the owner identifier string.
*
* @param string $owner The owner identifier string.
*/
public function setOwner($owner) { $this->_owner = $owner; }
/**
* Returns the private binary data associated with the frame.
*
* @return string
*/
public function getPrivateData() { return $this->_privateData; }
/**
* Sets the private binary data associated with the frame.
*
* @param string $privateData The private binary data string.
*/
public function setPrivateData($privateData)
{
$this->_privateData = $privateData;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return $this->_owner . "\0" . $this->_privateData;
}
}

View File

@@ -1,181 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* Sometimes the server from which an audio file is streamed is aware of
* transmission or coding problems resulting in interruptions in the audio
* stream. In these cases, the size of the buffer can be recommended by the
* server using the <i>Recommended buffer size</i> frame. If the embedded info
* flag is set then this indicates that an ID3 tag with the maximum size
* described in buffer size may occur in the audio stream. In such case the tag
* should reside between two MPEG frames, if the audio is MPEG encoded. If the
* position of the next tag is known, offset to next tag may be used. The offset
* is calculated from the end of tag in which this frame resides to the first
* byte of the header in the next. This field may be omitted. Embedded tags are
* generally not recommended since this could render unpredictable behaviour
* from present software/hardware.
*
* For applications like streaming audio it might be an idea to embed tags into
* the audio stream though. If the clients connects to individual connections
* like HTTP and there is a possibility to begin every transmission with a tag,
* then this tag should include a recommended buffer size frame. If the client
* is connected to a arbitrary point in the stream, such as radio or multicast,
* then the recommended buffer size frame should be included in every tag.
*
* The buffer size should be kept to a minimum. There may only be one RBUF
* frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_RBUF extends ID3_Frame
{
/**
* A flag to denote that an ID3 tag with the maximum size described in buffer
* size may occur in the audio stream.
*/
const EMBEDDED = 0x1;
/** @var integer */
private $_bufferSize;
/** @var integer */
private $_infoFlags;
/** @var integer */
private $_offset = 0;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_bufferSize =
Transform::fromUInt32BE("\0" . substr($this->_data, 0, 3));
$this->_infoFlags = Transform::fromInt8($this->_data[3]);
if ($this->getSize() > 4)
$this->_offset = Transform::fromInt32BE(substr($this->_data, 4, 4));
}
/**
* Returns the buffer size.
*
* @return integer
*/
public function getBufferSize() { return $this->_bufferSize; }
/**
* Sets the buffer size.
*
* @param integer $size The buffer size.
*/
public function setBufferSize($bufferSize)
{
$this->_bufferSize = $bufferSize;
}
/**
* 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 hasInfoFlag($flag)
{
return ($this->_infoFlags & $flag) == $flag;
}
/**
* Returns the flags byte.
*
* @return integer
*/
public function getInfoFlags() { return $this->_infoFlags; }
/**
* Sets the flags byte.
*
* @param string $flags The flags byte.
*/
public function setInfoFlags($infoFlags) { $this->_infoFlags = $infoFlags; }
/**
* Returns the offset to next tag.
*
* @return integer
*/
public function getOffset() { return $this->_offset; }
/**
* Sets the offset to next tag.
*
* @param integer $offset The offset.
*/
public function setOffset($offset) { $this->_offset = $offset; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
substr(Transform::toUInt32BE($this->_bufferSize), 1, 3) .
Transform::toInt8($this->_infoFlags) .
Transform::toInt32BE($this->_offset);
}
}

View File

@@ -1,217 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Relative volume adjustment (2)</i> frame is a more subjective frame than
* the previous ones. It allows the user to say how much he wants to
* increase/decrease the volume on each channel when the file is played. The
* purpose is to be able to align all files to a reference volume, so that you
* don't have to change the volume constantly. This frame may also be used to
* balance adjust the audio. The volume adjustment is encoded as a fixed point
* decibel value, 16 bit signed integer representing (adjustment*512), giving
* +/- 64 dB with a precision of 0.001953125 dB. E.g. +2 dB is stored as $04 00
* and -2 dB is $FC 00.
*
* There may be more than one RVA2 frame in each tag, but only one with the same
* identification string.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
* @since ID3v2.4.0
*/
final class ID3_Frame_RVA2 extends ID3_Frame
{
/**
* The channel type key.
*
* @see $types
* @var string
*/
const channelType = "channelType";
/**
* The volume adjustment key. Adjustments are +/- 64 dB with a precision of
* 0.001953125 dB.
*
* @var string
*/
const volumeAdjustment = "volumeAdjustment";
/**
* The peak volume key.
*
* @var string
*/
const peakVolume = "peakVolume";
/**
* The list of channel types.
*
* @var Array
*/
public static $types = array
("Other", "Master volume", "Front right", "Front left", "Back right",
"Back left", "Front centre", "Back centre", "Subwoofer");
/** @var string */
private $_device;
/** @var Array */
private $_adjustments;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
list ($this->_device, $this->_data) =
$this->_explodeString8($this->_data, 2);
for ($i = $j = 0; $i < 9; $i++) {
$this->_adjustments[$i] = array
(self::channelType => Transform::fromInt8($this->_data[$j++]),
self::volumeAdjustment =>
Transform::fromInt16BE(substr($this->_data, $j++, 2)) / 512.0);
$j++;
$bitsInPeak = Transform::fromInt8($this->_data[$j++]);
$bytesInPeak = $bitsInPeak > 0 ? ceil($bitsInPeak / 8) : 0;
switch ($bytesInPeak) {
case 8:
case 7:
case 6:
case 5:
$this->_adjustments[$i][self::peakVolume] =
Transform::fromInt64BE(substr($this->_data, $j, $bytesInPeak));
break;
case 4:
case 3:
$this->_adjustments[$i][self::peakVolume] =
Transform::fromUInt32BE(substr($this->_data, $j, $bytesInPeak));
break;
case 2:
$this->_adjustments[$i][self::peakVolume] =
Transform::fromUInt16BE(substr($this->_data, $j, $bytesInPeak));
break;
case 1:
$this->_adjustments[$i][self::peakVolume] =
Transform::fromUInt8(substr($this->_data, $j, $bytesInPeak));
}
$j += $bytesInPeak;
}
}
/**
* Returns the device where the adjustments should apply.
*
* @return string
*/
public function getDevice() { return $this->_device; }
/**
* Sets the device where the adjustments should apply.
*
* @param string $device The device.
*/
public function setDevice($device) { $this->_device = $device; }
/**
* Returns the array containing volume adjustments for each channel. Volume
* adjustments are arrays themselves containing the following keys:
* channelType, volumeAdjustment, peakVolume.
*
* @return Array
*/
public function getAdjustments() { return $this->_adjustments; }
/**
* Sets the array of volume adjustments for each channel. Each volume
* adjustment is an array too containing the following keys: channelType,
* volumeAdjustment, peakVolume.
*
* @param Array $adjustments The volume adjustments array.
*/
public function setAdjustments($adjustments)
{
$this->_adjustments = $adjustments;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = $this->_device . "\0";
foreach ($this->_adjustments as $channel) {
$data .= Transform::toInt8($channel[self::channelType]) .
Transform::toInt16BE($channel[self::volumeAdjustment] * 512);
if (abs($channel[self::peakVolume]) <= 0xff)
$data .= Transform::toInt8(8) .
Transform::toUInt8($channel[self::peakVolume]);
else if (abs($channel[self::peakVolume]) <= 0xffff)
$data .= Transform::toInt8(16) .
Transform::toUInt16BE($channel[self::peakVolume]);
else if (abs($channel[self::peakVolume]) <= 0xffffffff)
$data .= Transform::toInt8(32) .
Transform::toUInt32BE($channel[self::peakVolume]);
else
$data .= Transform::toInt8(64) .
Transform::toInt64BE($channel[self::peakVolume]); // UInt64
}
return $data;
}
}

View File

@@ -1,254 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @deprecated ID3v2.3.0
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Relative volume adjustment</i> frame is a more subjective function
* than the previous ones. It allows the user to say how much he wants to
* increase/decrease the volume on each channel while the file is played. The
* purpose is to be able to align all files to a reference volume, so that you
* don't have to change the volume constantly. This frame may also be used to
* balance adjust the audio.
*
* There may only be one RVAD frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
* @deprecated ID3v2.3.0
*/
final class ID3_Frame_RVAD extends ID3_Frame
{
/* The required keys. */
/** @var string */
const right = "right";
/** @var string */
const left = "left";
/** @var string */
const peakRight = "peakRight";
/** @var string */
const peakLeft = "peakLeft";
/* The optional keys. */
/** @var string */
const rightBack = "rightBack";
/** @var string */
const leftBack = "leftBack";
/** @var string */
const peakRightBack = "peakRightBack";
/** @var string */
const peakLeftBack = "peakLeftBack";
/** @var string */
const center = "center";
/** @var string */
const peakCenter = "peakCenter";
/** @var string */
const bass = "bass";
/** @var string */
const peakBass = "peakBass";
/** @var Array */
private $_adjustments;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$flags = Transform::fromInt8($this->_data[0]);
$descriptionBits = Transform::fromInt8($this->_data[1]);
if ($descriptionBits <= 8 || $descriptionBits > 16) {
require_once("ID3/Exception.php");
throw new ID3_Exception
("Unsupported description bit size of: " . $descriptionBits);
}
$this->_adjustments[self::right] =
($flags & 0x1) == 0x1 ?
Transform::fromUInt16BE(substr($this->_data, 2, 2)) :
-Transform::fromUInt16BE(substr($this->_data, 2, 2));
$this->_adjustments[self::left] =
($flags & 0x2) == 0x2 ?
Transform::fromUInt16BE(substr($this->_data, 4, 2)) :
-Transform::fromUInt16BE(substr($this->_data, 4, 2));
$this->_adjustments[self::peakRight] =
Transform::fromUInt16BE(substr($this->_data, 6, 2));
$this->_adjustments[self::peakLeft] =
Transform::fromUInt16BE(substr($this->_data, 8, 2));
if ($this->getSize() <= 10)
return;
$this->_adjustments[self::rightBack] =
($flags & 0x4) == 0x4 ?
Transform::fromUInt16BE(substr($this->_data, 10, 2)) :
-Transform::fromUInt16BE(substr($this->_data, 10, 2));
$this->_adjustments[self::leftBack] =
($flags & 0x8) == 0x8 ?
Transform::fromUInt16BE(substr($this->_data, 12, 2)) :
-Transform::fromUInt16BE(substr($this->_data, 12, 2));
$this->_adjustments[self::peakRightBack] =
Transform::fromUInt16BE(substr($this->_data, 14, 2));
$this->_adjustments[self::peakLeftBack] =
Transform::fromUInt16BE(substr($this->_data, 16, 2));
if ($this->getSize() <= 18)
return;
$this->_adjustments[self::center] =
($flags & 0x10) == 0x10 ?
Transform::fromUInt16BE(substr($this->_data, 18, 2)) :
-Transform::fromUInt16BE(substr($this->_data, 18, 2));
$this->_adjustments[self::peakCenter] =
Transform::fromUInt16BE(substr($this->_data, 20, 2));
if ($this->getSize() <= 22)
return;
$this->_adjustments[self::bass] =
($flags & 0x20) == 0x20 ?
Transform::fromUInt16BE(substr($this->_data, 22, 2)) :
-Transform::fromUInt16BE(substr($this->_data, 22, 2));
$this->_adjustments[self::peakBass] =
Transform::fromUInt16BE(substr($this->_data, 24, 2));
}
/**
* Returns the array containing the volume adjustments. The array must contain
* the following keys: right, left, peakRight, peakLeft. It may optionally
* contain the following keys: rightBack, leftBack, peakRightBack,
* peakLeftBack, center, peakCenter, bass, and peakBass.
*
* @return Array
*/
public function getAdjustments() { return $this->_adjustments; }
/**
* Sets the array of volume adjustments. The array must contain the following
* keys: right, left, peakRight, peakLeft. It may optionally contain the
* following keys: rightBack, leftBack, peakRightBack, peakLeftBack, center,
* peakCenter, bass, and peakBass.
*
* @param Array $adjustments The volume adjustments array.
*/
public function setAdjustments($adjustments)
{
$this->_adjustments = $adjustments;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$flags = 0;
if ($this->_adjustments[self::right] > 0)
$flags = $flags | 0x1;
if ($this->_adjustments[self::left] > 0)
$flags = $flags | 0x2;
$data = Transform::toInt8(16) .
Transform::toUInt16BE(abs($this->_adjustments[self::right])) .
Transform::toUInt16BE(abs($this->_adjustments[self::left])) .
Transform::toUInt16BE(abs($this->_adjustments[self::peakRight])) .
Transform::toUInt16BE(abs($this->_adjustments[self::peakLeft]));
if (isset($this->_adjustments[self::rightBack]) &&
isset($this->_adjustments[self::leftBack]) &&
isset($this->_adjustments[self::peakRightBack]) &&
isset($this->_adjustments[self::peakLeftBack])) {
if ($this->_adjustments[self::rightBack] > 0)
$flags = $flags | 0x4;
if ($this->_adjustments[self::leftBack] > 0)
$flags = $flags | 0x8;
$data .=
Transform::toUInt16BE(abs($this->_adjustments[self::rightBack])) .
Transform::toUInt16BE(abs($this->_adjustments[self::leftBack])) .
Transform::toUInt16BE(abs($this->_adjustments[self::peakRightBack])) .
Transform::toUInt16BE(abs($this->_adjustments[self::peakLeftBack]));
}
if (isset($this->_adjustments[self::center]) &&
isset($this->_adjustments[self::peakCenter])) {
if ($this->_adjustments[self::center] > 0)
$flags = $flags | 0x10;
$data .=
Transform::toUInt16BE(abs($this->_adjustments[self::center])) .
Transform::toUInt16BE(abs($this->_adjustments[self::peakCenter]));
}
if (isset($this->_adjustments[self::bass]) &&
isset($this->_adjustments[self::peakBass])) {
if ($this->_adjustments[self::bass] > 0)
$flags = $flags | 0x20;
$data .=
Transform::toUInt16BE(abs($this->_adjustments[self::bass])) .
Transform::toUInt16BE(abs($this->_adjustments[self::peakBass]));
}
return Transform::toInt8($flags) . $data;
}
}

View File

@@ -1,314 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Reverb</i> is yet another subjective frame, with which you can adjust
* echoes of different kinds. Reverb left/right is the delay between every
* bounce in milliseconds. Reverb bounces left/right is the number of bounces
* that should be made. $FF equals an infinite number of bounces. Feedback is
* the amount of volume that should be returned to the next echo bounce. $00 is
* 0%, $FF is 100%. If this value were $7F, there would be 50% volume reduction
* on the first bounce, 50% of that on the second and so on. Left to left means
* the sound from the left bounce to be played in the left speaker, while left
* to right means sound from the left bounce to be played in the right speaker.
*
* Premix left to right is the amount of left sound to be mixed in the right
* before any reverb is applied, where $00 id 0% and $FF is 100%. Premix right
* to left does the same thing, but right to left. Setting both premix to $FF
* would result in a mono output (if the reverb is applied symmetric). There may
* only be one RVRB frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_RVRB extends ID3_Frame
{
/** @var integer */
private $_reverbLeft;
/** @var integer */
private $_reverbRight;
/** @var integer */
private $_reverbBouncesLeft;
/** @var integer */
private $_reverbBouncesRight;
/** @var integer */
private $_reverbFeedbackLtoL;
/** @var integer */
private $_reverbFeedbackLtoR;
/** @var integer */
private $_reverbFeedbackRtoR;
/** @var integer */
private $_reverbFeedbackRtoL;
/** @var integer */
private $_premixLtoR;
/** @var integer */
private $_premixRtoL;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_reverbLeft = Transform::fromUInt16BE(substr($this->_data, 0, 2));
$this->_reverbRight = Transform::fromUInt16BE(substr($this->_data, 2, 2));
$this->_reverbBouncesLeft = Transform::fromUInt8($this->_data[4]);
$this->_reverbBouncesRight = Transform::fromUInt8($this->_data[5]);
$this->_reverbFeedbackLtoL = Transform::fromUInt8($this->_data[6]);
$this->_reverbFeedbackLtoR = Transform::fromUInt8($this->_data[7]);
$this->_reverbFeedbackRtoR = Transform::fromUInt8($this->_data[8]);
$this->_reverbFeedbackRtoL = Transform::fromUInt8($this->_data[9]);
$this->_premixLtoR = Transform::fromUInt8($this->_data[10]);
$this->_premixRtoL = Transform::fromUInt8($this->_data[11]);
}
/**
* Returns the left reverb.
*
* @return integer
*/
public function getReverbLeft() { return $this->_reverbLeft; }
/**
* Sets the left reverb.
*
* @param integer $reverbLeft The left reverb.
*/
public function setReverbLeft($reverbLeft)
{
return $this->_reverbLeft = $reverbLeft;
}
/**
* Returns the right reverb.
*
* @return integer
*/
public function getReverbRight() { return $this->_reverbRight; }
/**
* Sets the right reverb.
*
* @param integer $reverbRight The right reverb.
*/
public function setReverbRight($reverbRight)
{
return $this->_reverbRight = $reverbRight;
}
/**
* Returns the left reverb bounces.
*
* @return integer
*/
public function getReverbBouncesLeft() { return $this->_reverbBouncesLeft; }
/**
* Sets the left reverb bounces.
*
* @param integer $reverbBouncesLeft The left reverb bounces.
*/
public function setReverbBouncesLeft($reverbBouncesLeft)
{
$this->_reverbBouncesLeft = $reverbBouncesLeft;
}
/**
* Returns the right reverb bounces.
*
* @return integer
*/
public function getReverbBouncesRight() { return $this->_reverbBouncesRight; }
/**
* Sets the right reverb bounces.
*
* @param integer $reverbBouncesRight The right reverb bounces.
*/
public function setReverbBouncesRight($reverbBouncesRight)
{
$this->_reverbBouncesRight = $reverbBouncesRight;
}
/**
* Returns the left-to-left reverb feedback.
*
* @return integer
*/
public function getReverbFeedbackLtoL() { return $this->_reverbFeedbackLtoL; }
/**
* Sets the left-to-left reverb feedback.
*
* @param integer $reverbFeedbackLtoL The left-to-left reverb feedback.
*/
public function setReverbFeedbackLtoL($reverbFeedbackLtoL)
{
$this->_reverbFeedbackLtoL = $reverbFeedbackLtoL;
}
/**
* Returns the left-to-right reverb feedback.
*
* @return integer
*/
public function getReverbFeedbackLtoR() { return $this->_reverbFeedbackLtoR; }
/**
* Sets the left-to-right reverb feedback.
*
* @param integer $reverbFeedbackLtoR The left-to-right reverb feedback.
*/
public function setReverbFeedbackLtoR($reverbFeedbackLtoR)
{
$this->_reverbFeedbackLtoR = $reverbFeedbackLtoR;
}
/**
* Returns the right-to-right reverb feedback.
*
* @return integer
*/
public function getReverbFeedbackRtoR() { return $this->_reverbFeedbackRtoR; }
/**
* Sets the right-to-right reverb feedback.
*
* @param integer $reverbFeedbackRtoR The right-to-right reverb feedback.
*/
public function setReverbFeedbackRtoR($reverbFeedbackRtoR)
{
$this->_reverbFeedbackRtoR = $reverbFeedbackRtoR;
}
/**
* Returns the right-to-left reverb feedback.
*
* @return integer
*/
public function getReverbFeedbackRtoL() { return $this->_reverbFeedbackRtoL; }
/**
* Sets the right-to-left reverb feedback.
*
* @param integer $reverbFeedbackRtoL The right-to-left reverb feedback.
*/
public function setReverbFeedbackRtoL($reverbFeedbackRtoL)
{
$this->_reverbFeedbackRtoL = $reverbFeedbackRtoL;
}
/**
* Returns the left-to-right premix.
*
* @return integer
*/
public function getPremixLtoR() { return $this->_premixLtoR; }
/**
* Sets the left-to-right premix.
*
* @param integer $premixLtoR The left-to-right premix.
*/
public function setPremixLtoR($premixLtoR)
{
$this->_premixLtoR = $premixLtoR;
}
/**
* Returns the right-to-left premix.
*
* @return integer
*/
public function getPremixRtoL() { return $this->_premixRtoL; }
/**
* Sets the right-to-left premix.
*
* @param integer $premixRtoL The right-to-left premix.
*/
public function setPremixRtoL($premixRtoL)
{
$this->_premixRtoL = $premixRtoL;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return
Transform::toUInt16BE($this->_reverbLeft) .
Transform::toUInt16BE($this->_reverbRight) .
Transform::toUInt8($this->_reverbBouncesLeft) .
Transform::toUInt8($this->_reverbBouncesRight) .
Transform::toUInt8($this->_reverbFeedbackLtoL) .
Transform::toUInt8($this->_reverbFeedbackLtoR) .
Transform::toUInt8($this->_reverbFeedbackRtoR) .
Transform::toUInt8($this->_reverbFeedbackRtoL) .
Transform::toUInt8($this->_premixLtoR) .
Transform::toUInt8($this->_premixRtoL);
}
}

View File

@@ -1,104 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* The <i>Seek</i> frame indicates where other tags in a file/stream can be
* found. The minimum offset to next tag is calculated from the end of this tag
* to the beginning of the next. There may only be one seek frame in a tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
* @since ID3v2.4.0
*/
final class ID3_Frame_SEEK extends ID3_Frame
{
/** @var integer */
private $_minOffset;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_minOffset = Transform::fromInt32BE($this->_data);
}
/**
* Returns the minimum offset to next tag in bytes.
*
* @return integer
*/
public function getMinimumOffset() { return $this->_minOffset; }
/**
* Sets the minimum offset to next tag in bytes.
*
* @param integer $minOffset The minimum offset.
*/
public function setMinimumOffset($minOffset)
{
$this->_minOffset = $minOffset;
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return Transform::toInt32BE($this->_minOffset);
}
}

View File

@@ -1,122 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
/**#@-*/
/**
* This frame enables a group of frames, grouped with the
* <i>Group identification registration</i>, to be signed. Although signatures
* can reside inside the registration frame, it might be desired to store the
* signature elsewhere, e.g. in watermarks. There may be more than one signature
* frame in a tag, but no two may be identical.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
* @since ID3v2.4.0
*/
final class ID3_Frame_SIGN extends ID3_Frame
{
/** @var integer */
private $_group;
/** @var string */
private $_signature;
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$this->_group = Transform::fromUInt8(substr($this->_data, 0, 1));
$this->_signature = substr($this->_data, 1);
}
/**
* Returns the group symbol byte.
*
* @return integer
*/
public function getGroup() { return $this->_group; }
/**
* Sets the group symbol byte.
*
* @param integer $group The group symbol byte.
*/
public function setGroup($group) { $this->_group = $group; }
/**
* Returns the signature binary data.
*
* @return string
*/
public function getSignature() { return $this->_signature; }
/**
* Sets the signature binary data.
*
* @param string $signature The signature binary data string.
*/
public function setSignature($signature) { $this->_signature = $signature; }
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
return Transform::toUInt8($this->_group) . $this->_signature;
}
}

View File

@@ -1,340 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Encoding.php");
require_once("ID3/Language.php");
require_once("ID3/Timing.php");
/**#@-*/
/**
* The <i>Synchronised lyrics/text</i> frame is another way of incorporating the
* words, said or sung lyrics, in the audio file as text, this time, however,
* in sync with the audio. It might also be used to describing events e.g.
* occurring on a stage or on the screen in sync with the audio.
*
* There may be more than one SYLT frame in each tag, but only one with the
* same language and content descriptor.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_SYLT extends ID3_Frame
implements ID3_Encoding, ID3_Language, ID3_Timing
{
/**
* The list of content types.
*
* @var Array
*/
public static $types = array
("Other", "Lyrics", "Text transcription", "Movement/Part name", "Events",
"Chord", "Trivia", "URLs to webpages", "URLs to images");
/** @var integer */
private $_encoding;
/** @var string */
private $_language = "und";
/** @var integer */
private $_format = ID3_Timing::MPEG_FRAMES;
/** @var integer */
private $_type = 0;
/** @var string */
private $_description;
/** @var Array */
private $_events = array();
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
$this->_encoding = $this->getOption("encoding", ID3_Encoding::UTF8);
if ($reader === null)
return;
$encoding = Transform::fromUInt8($this->_data[0]);
$this->_language = substr($this->_data, 1, 3);
if ($this->_language == "XXX")
$this->_language = "und";
$this->_format = Transform::fromUInt8($this->_data[4]);
$this->_type = Transform::fromUInt8($this->_data[5]);
$this->_data = substr($this->_data, 6);
switch ($encoding) {
case self::UTF16:
list($this->_description, $this->_data) =
$this->_explodeString16($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16");
break;
case self::UTF16BE:
list($this->_description, $this->_data) =
$this->_explodeString16($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString16($this->_description), "utf-16be");
break;
case self::UTF8:
list($this->_description, $this->_data) =
$this->_explodeString8($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString8($this->_description), "utf-8");
break;
default:
list($this->_description, $this->_data) =
$this->_explodeString8($this->_data, 2);
$this->_description = $this->_convertString
(Transform::fromString8($this->_description), "iso-8859-1");
}
while (strlen($this->_data) > 0) {
switch ($encoding) {
case self::UTF16:
list($syllable, $this->_data) =
$this->_explodeString16($this->_data, 2);
$syllable = $this->_convertString
(Transform::fromString16($syllable), "utf-16");
break;
case self::UTF16BE:
list($syllable, $this->_data) =
$this->_explodeString16($this->_data, 2);
$syllable = $this->_convertString
(Transform::fromString16($syllable), "utf-16be");
break;
case self::UTF8:
list($syllable, $this->_data) =
$this->_explodeString8($this->_data, 2);
$syllable = $this->_convertString
(Transform::fromString8($syllable), "utf-8");
break;
default:
list($syllable, $this->_data) =
$this->_explodeString8($this->_data, 2);
$syllable = $this->_convertString
(Transform::fromString8($syllable), "iso-8859-1");
}
$this->_events[Transform::fromUInt32BE(substr($this->_data, 0, 4))] =
$syllable;
$this->_data = substr($this->_data, 4);
}
ksort($this->_events);
}
/**
* Returns the text encoding.
*
* All the strings read from a file are automatically converted to the
* character encoding specified with the <var>encoding</var> option. See
* {@link ID3v2} for details. This method returns the original text encoding
* used to write the frame.
*
* @return integer
*/
public function getEncoding() { return $this->_encoding; }
/**
* Sets the text encoding.
*
* All the string written to the frame are done so using given character
* encoding. No conversions of existing data take place upon the call to this
* method thus all texts must be given in given character encoding.
*
* The default character encoding used to write the frame is UTF-8.
*
* @see ID3_Encoding
* @param integer $encoding The text encoding.
*/
public function setEncoding($encoding) { $this->_encoding = $encoding; }
/**
* Returns the language code as specified in the
* {@link http://www.loc.gov/standards/iso639-2/ ISO-639-2} standard.
*
* @return string
*/
public function getLanguage() { return $this->_language; }
/**
* Sets the text language code as specified in the
* {@link http://www.loc.gov/standards/iso639-2/ ISO-639-2} standard.
*
* @see ID3_Language
* @param string $language The language code.
*/
public function setLanguage($language)
{
if ($language == "XXX")
$language = "und";
$this->_language = substr($language, 0, 3);
}
/**
* Returns the timing format.
*
* @return integer
*/
public function getFormat() { return $this->_format; }
/**
* Sets the timing format.
*
* @see ID3_Timing
* @param integer $format The timing format.
*/
public function setFormat($format) { $this->_format = $format; }
/**
* Returns the content type code.
*
* @return integer
*/
public function getType() { return $this->_type; }
/**
* Sets the content type code.
*
* @param integer $type The content type code.
*/
public function setType($type) { $this->_type = $type; }
/**
* Returns the content description.
*
* @return string
*/
public function getDescription() { return $this->_description; }
/**
* Sets the content description text using given encoding. The description
* language and encoding must be that of the actual text.
*
* @param string $description The content description text.
* @param string $language The language code.
* @param integer $encoding The text encoding.
*/
public function setDescription($description, $language = false,
$encoding = false)
{
$this->_description = $description;
if ($language !== false)
$this->setLanguage($language);
if ($encoding !== false)
$this->setEncoding($encoding);
}
/**
* Returns the syllable events with their timestamps.
*
* @return Array
*/
public function getEvents() { return $this->_events; }
/**
* Sets the syllable events with their timestamps using given encoding.
* The text language and encoding must be that of the description text.
*
* @param Array $text The test string.
* @param string $language The language code.
* @param integer $encoding The text encoding.
*/
public function setEvents($events, $language = false, $encoding = false)
{
$this->_events = $events;
if ($language !== false)
$this->setLanguage($language);
if ($encoding !== false)
$this->setEncoding($encoding);
ksort($this->_events);
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_encoding) . $this->_language .
Transform::toUInt8($this->_format) . Transform::toUInt8($this->_type);
switch ($this->_encoding) {
case self::UTF16LE:
$data .= Transform::toString16
($this->_description, Transform::LITTLE_ENDIAN_ORDER, 1);
break;
case self::UTF16:
case self::UTF16BE:
$data .= Transform::toString16($this->_description, false, 1);
break;
default:
$data .= $this->_description . "\0";
}
foreach ($this->_events as $timestamp => $syllable) {
switch ($this->_encoding) {
case self::UTF16LE:
$data .= Transform::toString16
($syllable, Transform::LITTLE_ENDIAN_ORDER, 1);
break;
case self::UTF16:
case self::UTF16BE:
$data .= Transform::toString16($syllable, false, 1);
break;
default:
$data .= $syllable . "\0";
}
$data .= Transform::toUInt32BE($timestamp);
}
return $data;
}
}

View File

@@ -1,161 +0,0 @@
<?php
/**
* PHP Reader Library
*
* Copyright (c) 2008-2009 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 ID3
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame.php");
require_once("ID3/Timing.php");
/**#@-*/
/**
* For a more accurate description of the tempo of a musical piece, the
* <i>Synchronised tempo codes</i> frame might be used.
*
* The tempo data consists of one or more tempo codes. Each tempo code consists
* of one tempo part and one time part. The tempo is in BPM described with one
* or two bytes. If the first byte has the value $FF, one more byte follows,
* which is added to the first giving a range from 2 - 510 BPM, since $00 and
* $01 is reserved. $00 is used to describe a beat-free time period, which is
* not the same as a music-free time period. $01 is used to indicate one single
* beat-stroke followed by a beat-free period.
*
* The tempo descriptor is followed by a time stamp. Every time the tempo in the
* music changes, a tempo descriptor may indicate this for the player. All tempo
* descriptors must be sorted in chronological order. The first beat-stroke in
* a time-period is at the same time as the beat description occurs. There may
* only be one SYTC frame in each tag.
*
* @package php-reader
* @subpackage ID3
* @author Sven Vollbehr <svollbehr@gmail.com>
* @author Ryan Butterfield <buttza@gmail.com>
* @copyright Copyright (c) 2008-2009 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Rev$
*/
final class ID3_Frame_SYTC extends ID3_Frame
implements ID3_Timing
{
/** Describes a beat-free time period. */
const BEAT_FREE = 0x00;
/** Indicate one single beat-stroke followed by a beat-free period. */
const SINGLE_BEAT = 0x01;
/** @var integer */
private $_format = ID3_Timing::MPEG_FRAMES;
/** @var Array */
private $_events = array();
/**
* Constructs the class with given parameters and parses object related data.
*
* @param Reader $reader The reader object.
* @param Array $options The options array.
*/
public function __construct($reader = null, &$options = array())
{
parent::__construct($reader, $options);
if ($reader === null)
return;
$offset = 0;
$this->_format = Transform::fromUInt8($this->_data[$offset++]);
while ($offset < strlen($this->_data)) {
$tempo = Transform::fromUInt8($this->_data[$offset++]);
if ($tempo == 0xff)
$tempo += Transform::fromUInt8($this->_data[$offset++]);
$this->_events
[Transform::fromUInt32BE(substr($this->_data, $offset, 4))] = $tempo;
$offset += 4;
}
ksort($this->_events);
}
/**
* Returns the timing format.
*
* @return integer
*/
public function getFormat() { return $this->_format; }
/**
* Sets the timing format.
*
* @see ID3_Timing
* @param integer $format The timing format.
*/
public function setFormat($format) { $this->_format = $format; }
/**
* Returns the time-bpm tempo events.
*
* @return Array
*/
public function getEvents() { return $this->_events; }
/**
* Sets the time-bpm tempo events.
*
* @param Array $events The time-bpm tempo events.
*/
public function setEvents($events)
{
$this->_events = $events;
ksort($this->_events);
}
/**
* Returns the frame raw data without the header.
*
* @return string
*/
protected function _getData()
{
$data = Transform::toUInt8($this->_format);
foreach ($this->_events as $timestamp => $tempo) {
if ($tempo >= 0xff)
$data .= Transform::toUInt8(0xff) . Transform::toUInt8($tempo - 0xff);
else
$data .= Transform::toUInt8($tempo);
$data .= Transform::toUInt32BE($timestamp);
}
return $data;
}
}

View File

@@ -1,53 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Album/Movie/Show title</i> frame is intended for the title of the
* recording (or source of sound) from which the audio in the file is taken.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TALB extends ID3_Frame_AbstractText {}

View File

@@ -1,53 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>BPM</i> frame contains the number of beats per minute in the main part
* of the audio. The BPM is an integer and represented as a numerical string.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TBPM extends ID3_Frame_AbstractText {}

View File

@@ -1,52 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Composer</i> frame is intended for the name of the composer.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TCOM extends ID3_Frame_AbstractText {}

View File

@@ -1,62 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Content type</i>, which ID3v1 was stored as a one byte numeric value
* only, is now a string. You may use one or several of the ID3v1 types as
* numerical strings, or, since the category list would be impossible to
* maintain with accurate and up to date categories, define your own.
*
* You may also use any of the following keywords:
*
* <pre>
* RX Remix
* CR Cover
* </pre>
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TCON extends ID3_Frame_AbstractText {}

View File

@@ -1,59 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Copyright message</i> frame, in which the string must begin with a
* year and a space character (making five characters), is intended for the
* copyright holder of the original sound, not the audio file itself. The
* absence of this frame means only that the copyright information is
* unavailable or has been removed, and must not be interpreted to mean that the
* audio is public domain. Every time this field is displayed the field must be
* preceded with "Copyright " (C) " ", where (C) is one character showing a C in
* a circle.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TCOP extends ID3_Frame_AbstractText {}

View File

@@ -1,55 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @deprecated ID3v2.3.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Date</i> frame is a numeric string in the DDMM format containing the
* date for the recording. This field is always four characters long.
*
* @package php-reader
* @subpackage ID3
* @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$
* @deprecated ID3v2.3.0
*/
final class ID3_Frame_TDAT extends ID3_Frame_AbstractText {}

View File

@@ -1,56 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Encoding time</i> frame contains a timestamp describing when the audio
* was encoded. Timestamp format is described in the
* {@link http://www.id3.org/id3v2.4.0-structure ID3v2 structure document}.
*
* @package php-reader
* @subpackage ID3
* @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$
* @since ID3v2.4.0
*/
final class ID3_Frame_TDEN extends ID3_Frame_AbstractText {}

View File

@@ -1,54 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Playlist delay</i> defines the numbers of milliseconds of silence that
* should be inserted before this audio. The value zero indicates that this is a
* part of a multifile audio track that should be played continuously.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TDLY extends ID3_Frame_AbstractText {}

View File

@@ -1,57 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Original release time</i> frame contains a timestamp describing when
* the original recording of the audio was released. Timestamp format is
* described in the {@link http://www.id3.org/id3v2.4.0-structure ID3v2
* structure document}.
*
* @package php-reader
* @subpackage ID3
* @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$
* @since ID3v2.4.0
*/
final class ID3_Frame_TDOR extends ID3_Frame_AbstractText {}

View File

@@ -1,56 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Recording time</i> frame contains a timestamp describing when the
* audio was recorded. Timestamp format is described in the
* {@link http://www.id3.org/id3v2.4.0-structure ID3v2 structure document}.
*
* @package php-reader
* @subpackage ID3
* @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$
* @since ID3v2.4.0
*/
final class ID3_Frame_TDRC extends ID3_Frame_AbstractText {}

View File

@@ -1,56 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Release time</i> frame contains a timestamp describing when the audio
* was first released. Timestamp format is described in the
* {@link http://www.id3.org/id3v2.4.0-structure ID3v2 structure document}.
*
* @package php-reader
* @subpackage ID3
* @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$
* @since ID3v2.4.0
*/
final class ID3_Frame_TDRL extends ID3_Frame_AbstractText {}

View File

@@ -1,56 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Tagging time</i> frame contains a timestamp describing then the audio
* was tagged. Timestamp format is described in the
* {@link http://www.id3.org/id3v2.4.0-structure ID3v2 structure document}.
*
* @package php-reader
* @subpackage ID3
* @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$
* @since ID3v2.4.0
*/
final class ID3_Frame_TDTG extends ID3_Frame_AbstractText {}

View File

@@ -1,54 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Encoded by</i> frame contains the name of the person or organisation
* that encoded the audio file. This field may contain a copyright message, if
* the audio file also is copyrighted by the encoder.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TENC extends ID3_Frame_AbstractText {}

View File

@@ -1,53 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Lyricist/Text writer</i> frame is intended for the writer of the text
* or lyrics in the recording.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TEXT extends ID3_Frame_AbstractText {}

View File

@@ -1,69 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>File type</i> frame indicates which type of audio this tag defines.
* The following types and refinements are defined:
*
* <pre>
* MIME MIME type follows
* MPG MPEG Audio
* /1 MPEG 1/2 layer I
* /2 MPEG 1/2 layer II
* /3 MPEG 1/2 layer III
* /2.5 MPEG 2.5
* /AAC Advanced audio compression
* VQF Transform-domain Weighted Interleave Vector Quantisation
* PCM Pulse Code Modulated audio
* </pre>
*
* but other types may be used, but not for these types though. This is used in
* a similar way to the predefined types in the {@link ID3_Frame_TMED}
* frame. If this frame is not present audio type is assumed to be MPG.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TFLT extends ID3_Frame_AbstractText {}

View File

@@ -1,55 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @deprecated ID3v2.3.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Time</i> frame is a numeric string in the HHMM format containing the
* time for the recording. This field is always four characters long.
*
* @package php-reader
* @subpackage ID3
* @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$
* @deprecated ID3v2.3.0
*/
final class ID3_Frame_TIME extends ID3_Frame_AbstractText {}

View File

@@ -1,55 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Involved people list</i> is very similar to the musician credits list,
* but maps between functions, like producer, and names.
*
* @package php-reader
* @subpackage ID3
* @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$
* @since ID3v2.4.0
*/
final class ID3_Frame_TIPL extends ID3_Frame_AbstractText {}

View File

@@ -1,54 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Content group description</i> frame is used if the sound belongs to a
* larger category of sounds/music. For example, classical music is often sorted
* in different musical sections (e.g. "Piano Concerto", "Weather - Hurricane").
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TIT1 extends ID3_Frame_AbstractText {}

View File

@@ -1,53 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Title/Songname/Content description</i> frame is the actual name of the
* piece (e.g. "Adagio", "Hurricane Donna").
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TIT2 extends ID3_Frame_AbstractText {}

View File

@@ -1,54 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Subtitle/Description refinement</i> frame is used for information
* directly related to the contents title (e.g. "Op. 16" or "Performed live at
* Wembley").
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TIT3 extends ID3_Frame_AbstractText {}

View File

@@ -1,56 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Initial key</i> frame contains the musical key in which the sound
* starts. It is represented as a string with a maximum length of three
* characters. The ground keys are represented with "A", "B", "C", "D", "E", "F"
* and "G" and halfkeys represented with "b" and "#". Minor is represented as
* "m", e.g. "Dbm" $00. Off key is represented with an "o" only.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TKEY extends ID3_Frame_AbstractText {}

View File

@@ -1,57 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Language</i> frame should contain the languages of the text or lyrics
* spoken or sung in the audio. The language is represented with three
* characters according to {@link http://www.loc.gov/standards/iso639-2/
* ISO-639-2}. If more than one language is used in the text their language
* codes should follow according to the amount of their usage, e.g.
* "eng" $00 "sve" $00.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TLAN extends ID3_Frame_AbstractText {}

View File

@@ -1,53 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Length</i> frame contains the length of the audio file in
* milliseconds, represented as a numeric string.
*
* @package php-reader
* @subpackage ID3
* @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$
*/
final class ID3_Frame_TLEN extends ID3_Frame_AbstractText {}

View File

@@ -1,56 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Musician credits list</i> is intended as a mapping between instruments
* and the musician that played it. Every odd field is an instrument and every
* even is an artist or a comma delimited list of artists.
*
* @package php-reader
* @subpackage ID3
* @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$
* @since ID3v2.4.0
*/
final class ID3_Frame_TMCL extends ID3_Frame_AbstractText {}

View File

@@ -1,55 +0,0 @@
<?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 ID3
* @copyright Copyright (c) 2008 The PHP Reader Project Workgroup
* @license http://code.google.com/p/php-reader/wiki/License New BSD License
* @version $Id$
* @since ID3v2.4.0
*/
/**#@+ @ignore */
require_once("ID3/Frame/AbstractText.php");
/**#@-*/
/**
* The <i>Mood</i> frame is intended to reflect the mood of the audio with a few
* keywords, e.g. "Romantic" or "Sad".
*
* @package php-reader
* @subpackage ID3
* @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$
* @since ID3v2.4.0
*/
final class ID3_Frame_TMOO extends ID3_Frame_AbstractText {}

Some files were not shown because too many files have changed in this diff Show More