private function HandleEMBLClusterBlock($element, $block_type, &$info) {
$block_data = array();
$block_data['tracknumber'] = $this->getid3_matroska::readEBMLint();
$block_data['timecode'] = getid3_lib::BigEndian2Int($this->getid3_matroska::readEBMLelementData(2), false, true);
$block_data['flags_raw'] = getid3_lib::BigEndian2Int($this->getid3_matroska::readEBMLelementData(1));
if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) {
$block_data['flags']['keyframe'] = (($block_data['flags_raw'] & 0x80) >> 7);
}
else {
}
$block_data['flags']['invisible'] = (bool)(($block_data['flags_raw'] & 0x08) >> 3);
$block_data['flags']['lacing'] = (($block_data['flags_raw'] & 0x06) >> 1); if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) {
$block_data['flags']['discardable'] = (($block_data['flags_raw'] & 0x01));
}
else {
}
$block_data['flags']['lacing_type'] = self::BlockLacingType($block_data['flags']['lacing']);
if ($block_data['flags']['lacing'] > 0) {
$block_data['lace_frames'] = getid3_lib::BigEndian2Int($this->getid3_matroska::readEBMLelementData(1)) + 1; if ($block_data['flags']['lacing'] != 0x02) {
for ($i = 1; $i < $block_data['lace_frames']; $i ++) { if ($block_data['flags']['lacing'] == 0x03) { $block_data['lace_frames_size'][$i] = $this->getid3_matroska::readEBMLint(); }
else { $block_data['lace_frames_size'][$i] = 0;
do {
$size = getid3_lib::BigEndian2Int($this->getid3_matroska::readEBMLelementData(1));
$block_data['lace_frames_size'][$i] += $size;
}
while ($size == 255);
}
}
if ($block_data['flags']['lacing'] == 0x01) { $block_data['lace_frames_size'][] = $element['end'] - $this->current_offset - array_sum($block_data['lace_frames_size']);
}
}
}
if (!isset($info['matroska']['track_data_offsets'][$block_data['tracknumber']])) {
$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['offset'] = $this->current_offset;
$info['matroska']['track_data_offsets'][$block_data['tracknumber']]['length'] = $element['end'] - $this->current_offset;
}
$this->current_offset = $element['end'];
return $block_data;
}