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:
@@ -1,2 +1,7 @@
|
||||
source.encoding=UTF-8
|
||||
version=4
|
||||
include.path=${php.global.include.path}
|
||||
source.encoding=UTF-8
|
||||
src.dir=src
|
||||
tags.asp=false
|
||||
tags.short=true
|
||||
test.src.dir=tests
|
||||
web.root=.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>org.netbeans.modules.php.project</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/php-project/1">
|
||||
<name>php-reader</name>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://www.netbeans.org/ns/project/1">
|
||||
<type>org.netbeans.modules.php.project</type>
|
||||
<configuration>
|
||||
<data xmlns="http://www.netbeans.org/ns/php-project/1">
|
||||
<name>php-reader</name>
|
||||
</data>
|
||||
</configuration>
|
||||
</project>
|
||||
|
||||
216
src/ASF.php
216
src/ASF.php
@@ -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; }
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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); }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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
|
||||
{
|
||||
}
|
||||
@@ -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) : "");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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 : "");
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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; }
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
@@ -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 {}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user