mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-13 04:53:26 +00:00
266 lines
6.8 KiB
PHP
266 lines
6.8 KiB
PHP
<?php
|
|
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
|
|
|
|
/**
|
|
* Moovrelocator - Atom class
|
|
*
|
|
* PHP versions 5
|
|
*
|
|
* LICENSE: Moovrelocator - Copyright (c) 2009, Benjamin Carl -
|
|
* 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. * All advertising materials mentioning features or use of
|
|
* this software must display the following acknowledgement: This product includes
|
|
* software developed by Benjamin Carl and its contributors.
|
|
*
|
|
* Neither the name of Benjamin Carl 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.
|
|
* Please feel free to contact us via e-mail: phpfluesterer@googlemail.com
|
|
*
|
|
* @category Moovrelocator
|
|
* @package Moovrelocator_Lib
|
|
* @subpackage Moovrelocator_Lib_Atom
|
|
* @author Benjamin Carl <phpfluesterer@googlemail.com>
|
|
* @copyright 2009 Benjamin Carl
|
|
* @license http://www.opensource.org/licenses/bsd-license.php The BSD License
|
|
* @version SVN: $Id: Atom.class.php 2 2010-01-25 01:01:16Z phpfluesterer $
|
|
* @link http://www.benjamin-carl.de
|
|
* @see -
|
|
* @since File available since Release 1.0.0
|
|
*/
|
|
|
|
/**
|
|
* Moovrelocator - Atom class
|
|
*
|
|
* MOOV Relocator is a well documented small library written in PHP to relocate (or move)
|
|
* the MOOV-Atom of MP4-Files from the end to the beginning of a file.
|
|
*
|
|
* @category Moovrelocator
|
|
* @package Moovrelocator_Lib
|
|
* @subpackage Moovrelocator_Lib_Atom
|
|
* @author Benjamin Carl <phpfluesterer@googlemail.com>
|
|
* @copyright 2009 Benjamin Carl
|
|
* @license http://www.opensource.org/licenses/bsd-license.php The BSD License
|
|
* @version Release: @package_version@
|
|
* @link http://www.benjamin-carl.de
|
|
* @see -
|
|
* @since File available since Release 1.0.0
|
|
*/
|
|
class moov_relocator_atom
|
|
{
|
|
/**
|
|
* is 64Bit?
|
|
*
|
|
* @var boolean
|
|
* @access private
|
|
*/
|
|
private $_is64 = false;
|
|
|
|
/**
|
|
* type of atom (ISO code)
|
|
*
|
|
* @var string
|
|
* @access private
|
|
*/
|
|
private $_type = '';
|
|
|
|
/**
|
|
* size of atom in bytes
|
|
*
|
|
* @var integer
|
|
* @access private
|
|
*/
|
|
private $_size = 0;
|
|
|
|
/**
|
|
* offset of atom in the file in bytes
|
|
*
|
|
* @var integer
|
|
* @access private
|
|
*/
|
|
private $_offset = 0;
|
|
|
|
/**
|
|
* ISO family codes / atom types
|
|
*/
|
|
const FTYP_ATOM = 'ftyp';
|
|
const MOOV_ATOM = 'moov';
|
|
const CMOV_ATOM = 'cmov';
|
|
const STCO_ATOM = 'stco';
|
|
const CO64_ATOM = 'co64';
|
|
const URL_ATOM = 'url ';
|
|
const XML_ATOM = 'xml ';
|
|
|
|
protected static $validAtoms = array(
|
|
self::FTYP_ATOM,
|
|
self::MOOV_ATOM,
|
|
self::CMOV_ATOM,
|
|
self::STCO_ATOM,
|
|
self::CO64_ATOM,
|
|
self::URL_ATOM,
|
|
self::XML_ATOM,
|
|
'pdin',
|
|
'mvhd',
|
|
'trak',
|
|
'tkhd',
|
|
'tref',
|
|
'edts',
|
|
'elst',
|
|
'mdia',
|
|
'mdhd',
|
|
'hdlr',
|
|
'minf',
|
|
'vmhd',
|
|
'smhd',
|
|
'hmhd',
|
|
'nmhd',
|
|
'dinf',
|
|
'dref',
|
|
'stbl',
|
|
'stsd',
|
|
'stts',
|
|
'ctts',
|
|
'stsc',
|
|
'stsz',
|
|
'stz2',
|
|
'stss',
|
|
'stsh',
|
|
'padb',
|
|
'stdp',
|
|
'sdtp',
|
|
'sbgp',
|
|
'sgpd',
|
|
'subs',
|
|
'mvex',
|
|
'mehd',
|
|
'trex',
|
|
'ipmc',
|
|
'moof',
|
|
'mfhd',
|
|
'traf',
|
|
'tfhd',
|
|
'trun',
|
|
'mfra',
|
|
'tfra',
|
|
'mfro',
|
|
'mdat',
|
|
'free',
|
|
'skip',
|
|
'udta',
|
|
'cprt',
|
|
'meta',
|
|
'dinf',
|
|
'ipmc',
|
|
'iloc',
|
|
'ipro',
|
|
'sinf',
|
|
'frma',
|
|
'imif',
|
|
'schm',
|
|
'schi',
|
|
'iinf',
|
|
'bxml',
|
|
'pitm'
|
|
);
|
|
|
|
|
|
/**
|
|
* returns true if $fourByteString is a character string
|
|
* and atom type (ISO code of the atom) is valid ($validAtoms)
|
|
*/
|
|
public static function isValidAtom($fourByteString)
|
|
{
|
|
if (preg_match('/[@a-zA-Z][a-zA-Z0-9][a-zA-Z0-9 ][a-zA-Z0-9 ]/', $fourByteString) &&
|
|
in_array($fourByteString, self::$validAtoms)) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* returns the atom type (ISO code of the atom)
|
|
* i.e.: moov, ftyp, mdat etc...
|
|
*/
|
|
public function getType()
|
|
{
|
|
return $this->_type;
|
|
}
|
|
|
|
/**
|
|
* sets the atom type (ISO code of the atom)
|
|
* i.e.: moov, ftyp, mdat etc...
|
|
*/
|
|
public function setType($type)
|
|
{
|
|
$this->_type = $type;
|
|
}
|
|
|
|
|
|
/**
|
|
* returns the size of atom in bytes
|
|
*/
|
|
public function getSize()
|
|
{
|
|
return $this->_size;
|
|
}
|
|
|
|
/**
|
|
* sets the size of atom in bytes
|
|
*/
|
|
public function setSize($value)
|
|
{
|
|
$this->_size = $value;
|
|
if ($value == 1) {
|
|
$this->_is64 = true;
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* returns the offset of where the atom/box resides in
|
|
* the file in bytes
|
|
*/
|
|
public function getOffset()
|
|
{
|
|
return $this->_offset;
|
|
}
|
|
|
|
/**
|
|
* sets the offset of where the atom/box resides in
|
|
* the file in bytes
|
|
*/
|
|
public function setOffset($value)
|
|
{
|
|
$this->_offset = $value;
|
|
}
|
|
|
|
|
|
/**
|
|
* returns formatted informations about the instance
|
|
*/
|
|
public function toString()
|
|
{
|
|
return '[type: ' . $this->_type . ',size: ' . $this->_size . ',offset: ' . $this->_offset . ']';
|
|
}
|
|
}
|
|
|
|
?>
|