summaryrefslogtreecommitdiff
path: root/matroska.php
diff options
context:
space:
mode:
authorccd0 <admin@containerchan.org>2013-11-29 21:47:36 -0800
committerccd0 <admin@containerchan.org>2013-11-29 21:47:36 -0800
commit2175e848343084f985e2eaaea056b6be6244cb63 (patch)
treeeaa9d64a2829d624ead7c862438aacd9c026ade6 /matroska.php
parent539a5062ea1a8930334024bc8adcb08a7f29c15c (diff)
make element type list global
Diffstat (limited to 'matroska.php')
-rw-r--r--matroska.php29
1 files changed, 16 insertions, 13 deletions
diff --git a/matroska.php b/matroska.php
index 6e70d995..aad18c08 100644
--- a/matroska.php
+++ b/matroska.php
@@ -52,6 +52,10 @@ class EBMLElementTypeList {
}
}
+// Matroska element types
+global $EBML_ELEMENTS;
+$EBML_ELEMENTS = new EBMLElementTypeList(dirname(__FILE__) . '/matroska-elements.txt');
+
// Decode big-endian integer
function ebmlDecodeInt($data, $signed=FALSE, $carryIn=0) {
$n = $carryIn;
@@ -260,15 +264,14 @@ class EBMLElement {
private $_datatype;
private $_content;
private $_headSize;
- protected $_elementTypeList;
- public function __construct($id, $content, $headSize, $elementTypeList) {
+ public function __construct($id, $content, $headSize) {
+ global $EBML_ELEMENTS;
$this->_id = $id;
- $this->_name = $elementTypeList->name($this->_id);
- $this->_datatype = $elementTypeList->datatype($this->_id);
+ $this->_name = $EBML_ELEMENTS->name($this->_id);
+ $this->_datatype = $EBML_ELEMENTS->datatype($this->_id);
$this->_content = $content;
$this->_headSize = $headSize;
- $this->_elementTypeList = $elementTypeList;
}
public function id() {return $this->_id;}
@@ -298,8 +301,8 @@ class EBMLElementList extends EBMLElement implements Iterator {
private $_position;
private static $MAX_ELEMENTS = 10000;
- public function __construct($id, $content, $headSize, $elementTypeList) {
- parent::__construct($id, $content, $headSize, $elementTypeList);
+ public function __construct($id, $content, $headSize) {
+ parent::__construct($id, $content, $headSize);
$this->_cache = array();
$this->_position = 0;
}
@@ -328,25 +331,26 @@ class EBMLElementList extends EBMLElement implements Iterator {
}
public function valid() {
+ global $EBML_ELEMENTS;
if (isset($this->_cache[$this->_position])) return TRUE;
$this->content()->setPosition($this->_position);
if ($this->content()->endOfData()) return FALSE;
$id = $this->content()->readVarInt();
if ($id === NULL) throw new Exception('invalid ID');
- if ($this->content()->size() === NULL && !$this->_elementTypeList->validChild($this->id(), $id)) {
+ if ($this->content()->size() === NULL && !$EBML_ELEMENTS->validChild($this->id(), $id)) {
$this->content()->setSize($this->_position);
return FALSE;
}
$size = $this->content()->readVarInt();
$headSize = $this->content()->position() - $this->_position;
$content = $this->content()->nextSlice($size);
- if ($this->_elementTypeList->datatype($id) == 'container') {
- $element = new EBMLElementList($id, $content, $headSize, $this->_elementTypeList);
+ if ($EBML_ELEMENTS->datatype($id) == 'container') {
+ $element = new EBMLElementList($id, $content, $headSize);
} else {
if ($size === NULL) {
throw new Exception('non-container element of unknown size');
}
- $element = new EBMLElement($id, $content, $headSize, $this->_elementTypeList);
+ $element = new EBMLElement($id, $content, $headSize);
}
$this->_cache[$this->_position] = $element;
return TRUE;
@@ -468,8 +472,7 @@ function readMatroska($fileHandle) {
if ($reader->read(4) != "\x1a\x45\xdf\xa3") {
throw new Exception('not an EBML file');
}
- $matroskaElementTypeList = new EBMLElementTypeList(dirname(__FILE__) . '/matroska-elements.txt');
- $root = new EBMLElementList('root', $reader, 0, $matroskaElementTypeList);
+ $root = new EBMLElementList('root', $reader, 0);
$header = $root->get('EBML');
$ebmlVersion = $header->get('EBMLReadVersion', 1);
$docType = $header->get('DocType');