Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/clone/wp-inclu.../ID3
File: module.audio-video.matroska.php
}
[1000] Fix | Delete
}
[1001] Fix | Delete
$tag_entry[$sub_subelement['id_name']] = $targets_entry;
[1002] Fix | Delete
break;
[1003] Fix | Delete
[1004] Fix | Delete
case EBML_ID_SIMPLETAG:
[1005] Fix | Delete
$tag_entry[$sub_subelement['id_name']][] = $this->HandleEMBLSimpleTag($sub_subelement['end']);
[1006] Fix | Delete
break;
[1007] Fix | Delete
[1008] Fix | Delete
default:
[1009] Fix | Delete
$this->unhandledElement('tags.tag', __LINE__, $sub_subelement);
[1010] Fix | Delete
break;
[1011] Fix | Delete
}
[1012] Fix | Delete
}
[1013] Fix | Delete
$tags_entry[] = $tag_entry;
[1014] Fix | Delete
break;
[1015] Fix | Delete
[1016] Fix | Delete
default:
[1017] Fix | Delete
$this->unhandledElement('tags', __LINE__, $subelement);
[1018] Fix | Delete
break;
[1019] Fix | Delete
}
[1020] Fix | Delete
}
[1021] Fix | Delete
$info['matroska']['tags'] = $tags_entry;
[1022] Fix | Delete
break;
[1023] Fix | Delete
[1024] Fix | Delete
case EBML_ID_ATTACHMENTS: // Contain attached files.
[1025] Fix | Delete
[1026] Fix | Delete
while ($this->getEBMLelement($subelement, $element_data['end'])) {
[1027] Fix | Delete
switch ($subelement['id']) {
[1028] Fix | Delete
[1029] Fix | Delete
case EBML_ID_ATTACHEDFILE:
[1030] Fix | Delete
$attachedfile_entry = array();
[1031] Fix | Delete
[1032] Fix | Delete
while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_FILEDATA))) {
[1033] Fix | Delete
switch ($sub_subelement['id']) {
[1034] Fix | Delete
[1035] Fix | Delete
case EBML_ID_FILEDESCRIPTION:
[1036] Fix | Delete
case EBML_ID_FILENAME:
[1037] Fix | Delete
case EBML_ID_FILEMIMETYPE:
[1038] Fix | Delete
$attachedfile_entry[$sub_subelement['id_name']] = $sub_subelement['data'];
[1039] Fix | Delete
break;
[1040] Fix | Delete
[1041] Fix | Delete
case EBML_ID_FILEDATA:
[1042] Fix | Delete
$attachedfile_entry['data_offset'] = $this->current_offset;
[1043] Fix | Delete
$attachedfile_entry['data_length'] = $sub_subelement['length'];
[1044] Fix | Delete
[1045] Fix | Delete
$attachedfile_entry[$sub_subelement['id_name']] = $this->saveAttachment(
[1046] Fix | Delete
$attachedfile_entry['FileName'],
[1047] Fix | Delete
$attachedfile_entry['data_offset'],
[1048] Fix | Delete
$attachedfile_entry['data_length']);
[1049] Fix | Delete
[1050] Fix | Delete
$this->current_offset = $sub_subelement['end'];
[1051] Fix | Delete
break;
[1052] Fix | Delete
[1053] Fix | Delete
case EBML_ID_FILEUID:
[1054] Fix | Delete
$attachedfile_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
[1055] Fix | Delete
break;
[1056] Fix | Delete
[1057] Fix | Delete
default:
[1058] Fix | Delete
$this->unhandledElement('attachments.attachedfile', __LINE__, $sub_subelement);
[1059] Fix | Delete
break;
[1060] Fix | Delete
}
[1061] Fix | Delete
}
[1062] Fix | Delete
$info['matroska']['attachments'][] = $attachedfile_entry;
[1063] Fix | Delete
break;
[1064] Fix | Delete
[1065] Fix | Delete
default:
[1066] Fix | Delete
$this->unhandledElement('attachments', __LINE__, $subelement);
[1067] Fix | Delete
break;
[1068] Fix | Delete
}
[1069] Fix | Delete
}
[1070] Fix | Delete
break;
[1071] Fix | Delete
[1072] Fix | Delete
case EBML_ID_CHAPTERS:
[1073] Fix | Delete
[1074] Fix | Delete
while ($this->getEBMLelement($subelement, $element_data['end'])) {
[1075] Fix | Delete
switch ($subelement['id']) {
[1076] Fix | Delete
[1077] Fix | Delete
case EBML_ID_EDITIONENTRY:
[1078] Fix | Delete
$editionentry_entry = array();
[1079] Fix | Delete
[1080] Fix | Delete
while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CHAPTERATOM))) {
[1081] Fix | Delete
switch ($sub_subelement['id']) {
[1082] Fix | Delete
[1083] Fix | Delete
case EBML_ID_EDITIONUID:
[1084] Fix | Delete
$editionentry_entry[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
[1085] Fix | Delete
break;
[1086] Fix | Delete
[1087] Fix | Delete
case EBML_ID_EDITIONFLAGHIDDEN:
[1088] Fix | Delete
case EBML_ID_EDITIONFLAGDEFAULT:
[1089] Fix | Delete
case EBML_ID_EDITIONFLAGORDERED:
[1090] Fix | Delete
$editionentry_entry[$sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_subelement['data']);
[1091] Fix | Delete
break;
[1092] Fix | Delete
[1093] Fix | Delete
case EBML_ID_CHAPTERATOM:
[1094] Fix | Delete
$chapteratom_entry = array();
[1095] Fix | Delete
[1096] Fix | Delete
while ($this->getEBMLelement($sub_sub_subelement, $sub_subelement['end'], array(EBML_ID_CHAPTERTRACK, EBML_ID_CHAPTERDISPLAY))) {
[1097] Fix | Delete
switch ($sub_sub_subelement['id']) {
[1098] Fix | Delete
[1099] Fix | Delete
case EBML_ID_CHAPTERSEGMENTUID:
[1100] Fix | Delete
case EBML_ID_CHAPTERSEGMENTEDITIONUID:
[1101] Fix | Delete
$chapteratom_entry[$sub_sub_subelement['id_name']] = $sub_sub_subelement['data'];
[1102] Fix | Delete
break;
[1103] Fix | Delete
[1104] Fix | Delete
case EBML_ID_CHAPTERFLAGENABLED:
[1105] Fix | Delete
case EBML_ID_CHAPTERFLAGHIDDEN:
[1106] Fix | Delete
$chapteratom_entry[$sub_sub_subelement['id_name']] = (bool)getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
[1107] Fix | Delete
break;
[1108] Fix | Delete
[1109] Fix | Delete
case EBML_ID_CHAPTERUID:
[1110] Fix | Delete
case EBML_ID_CHAPTERTIMESTART:
[1111] Fix | Delete
case EBML_ID_CHAPTERTIMEEND:
[1112] Fix | Delete
$chapteratom_entry[$sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_subelement['data']);
[1113] Fix | Delete
break;
[1114] Fix | Delete
[1115] Fix | Delete
case EBML_ID_CHAPTERTRACK:
[1116] Fix | Delete
$chaptertrack_entry = array();
[1117] Fix | Delete
[1118] Fix | Delete
while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
[1119] Fix | Delete
switch ($sub_sub_sub_subelement['id']) {
[1120] Fix | Delete
[1121] Fix | Delete
case EBML_ID_CHAPTERTRACKNUMBER:
[1122] Fix | Delete
$chaptertrack_entry[$sub_sub_sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_sub_sub_subelement['data']);
[1123] Fix | Delete
break;
[1124] Fix | Delete
[1125] Fix | Delete
default:
[1126] Fix | Delete
$this->unhandledElement('chapters.editionentry.chapteratom.chaptertrack', __LINE__, $sub_sub_sub_subelement);
[1127] Fix | Delete
break;
[1128] Fix | Delete
}
[1129] Fix | Delete
}
[1130] Fix | Delete
$chapteratom_entry[$sub_sub_subelement['id_name']][] = $chaptertrack_entry;
[1131] Fix | Delete
break;
[1132] Fix | Delete
[1133] Fix | Delete
case EBML_ID_CHAPTERDISPLAY:
[1134] Fix | Delete
$chapterdisplay_entry = array();
[1135] Fix | Delete
[1136] Fix | Delete
while ($this->getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement['end'], true)) {
[1137] Fix | Delete
switch ($sub_sub_sub_subelement['id']) {
[1138] Fix | Delete
[1139] Fix | Delete
case EBML_ID_CHAPSTRING:
[1140] Fix | Delete
case EBML_ID_CHAPLANGUAGE:
[1141] Fix | Delete
case EBML_ID_CHAPCOUNTRY:
[1142] Fix | Delete
$chapterdisplay_entry[$sub_sub_sub_subelement['id_name']] = $sub_sub_sub_subelement['data'];
[1143] Fix | Delete
break;
[1144] Fix | Delete
[1145] Fix | Delete
default:
[1146] Fix | Delete
$this->unhandledElement('chapters.editionentry.chapteratom.chapterdisplay', __LINE__, $sub_sub_sub_subelement);
[1147] Fix | Delete
break;
[1148] Fix | Delete
}
[1149] Fix | Delete
}
[1150] Fix | Delete
$chapteratom_entry[$sub_sub_subelement['id_name']][] = $chapterdisplay_entry;
[1151] Fix | Delete
break;
[1152] Fix | Delete
[1153] Fix | Delete
default:
[1154] Fix | Delete
$this->unhandledElement('chapters.editionentry.chapteratom', __LINE__, $sub_sub_subelement);
[1155] Fix | Delete
break;
[1156] Fix | Delete
}
[1157] Fix | Delete
}
[1158] Fix | Delete
$editionentry_entry[$sub_subelement['id_name']][] = $chapteratom_entry;
[1159] Fix | Delete
break;
[1160] Fix | Delete
[1161] Fix | Delete
default:
[1162] Fix | Delete
$this->unhandledElement('chapters.editionentry', __LINE__, $sub_subelement);
[1163] Fix | Delete
break;
[1164] Fix | Delete
}
[1165] Fix | Delete
}
[1166] Fix | Delete
$info['matroska']['chapters'][] = $editionentry_entry;
[1167] Fix | Delete
break;
[1168] Fix | Delete
[1169] Fix | Delete
default:
[1170] Fix | Delete
$this->unhandledElement('chapters', __LINE__, $subelement);
[1171] Fix | Delete
break;
[1172] Fix | Delete
}
[1173] Fix | Delete
}
[1174] Fix | Delete
break;
[1175] Fix | Delete
[1176] Fix | Delete
case EBML_ID_CLUSTER: // The lower level element containing the (monolithic) Block structure.
[1177] Fix | Delete
$cluster_entry = array();
[1178] Fix | Delete
[1179] Fix | Delete
while ($this->getEBMLelement($subelement, $element_data['end'], array(EBML_ID_CLUSTERSILENTTRACKS, EBML_ID_CLUSTERBLOCKGROUP, EBML_ID_CLUSTERSIMPLEBLOCK))) {
[1180] Fix | Delete
switch ($subelement['id']) {
[1181] Fix | Delete
[1182] Fix | Delete
case EBML_ID_CLUSTERTIMECODE:
[1183] Fix | Delete
case EBML_ID_CLUSTERPOSITION:
[1184] Fix | Delete
case EBML_ID_CLUSTERPREVSIZE:
[1185] Fix | Delete
$cluster_entry[$subelement['id_name']] = getid3_lib::BigEndian2Int($subelement['data']);
[1186] Fix | Delete
break;
[1187] Fix | Delete
[1188] Fix | Delete
case EBML_ID_CLUSTERSILENTTRACKS:
[1189] Fix | Delete
$cluster_silent_tracks = array();
[1190] Fix | Delete
[1191] Fix | Delete
while ($this->getEBMLelement($sub_subelement, $subelement['end'], true)) {
[1192] Fix | Delete
switch ($sub_subelement['id']) {
[1193] Fix | Delete
[1194] Fix | Delete
case EBML_ID_CLUSTERSILENTTRACKNUMBER:
[1195] Fix | Delete
$cluster_silent_tracks[] = getid3_lib::BigEndian2Int($sub_subelement['data']);
[1196] Fix | Delete
break;
[1197] Fix | Delete
[1198] Fix | Delete
default:
[1199] Fix | Delete
$this->unhandledElement('cluster.silenttracks', __LINE__, $sub_subelement);
[1200] Fix | Delete
break;
[1201] Fix | Delete
}
[1202] Fix | Delete
}
[1203] Fix | Delete
$cluster_entry[$subelement['id_name']][] = $cluster_silent_tracks;
[1204] Fix | Delete
break;
[1205] Fix | Delete
[1206] Fix | Delete
case EBML_ID_CLUSTERBLOCKGROUP:
[1207] Fix | Delete
$cluster_block_group = array('offset' => $this->current_offset);
[1208] Fix | Delete
[1209] Fix | Delete
while ($this->getEBMLelement($sub_subelement, $subelement['end'], array(EBML_ID_CLUSTERBLOCK))) {
[1210] Fix | Delete
switch ($sub_subelement['id']) {
[1211] Fix | Delete
[1212] Fix | Delete
case EBML_ID_CLUSTERBLOCK:
[1213] Fix | Delete
$cluster_block_group[$sub_subelement['id_name']] = $this->HandleEMBLClusterBlock($sub_subelement, EBML_ID_CLUSTERBLOCK, $info);
[1214] Fix | Delete
break;
[1215] Fix | Delete
[1216] Fix | Delete
case EBML_ID_CLUSTERREFERENCEPRIORITY: // unsigned-int
[1217] Fix | Delete
case EBML_ID_CLUSTERBLOCKDURATION: // unsigned-int
[1218] Fix | Delete
$cluster_block_group[$sub_subelement['id_name']] = getid3_lib::BigEndian2Int($sub_subelement['data']);
[1219] Fix | Delete
break;
[1220] Fix | Delete
[1221] Fix | Delete
case EBML_ID_CLUSTERREFERENCEBLOCK: // signed-int
[1222] Fix | Delete
$cluster_block_group[$sub_subelement['id_name']][] = getid3_lib::BigEndian2Int($sub_subelement['data'], false, true);
[1223] Fix | Delete
break;
[1224] Fix | Delete
[1225] Fix | Delete
case EBML_ID_CLUSTERCODECSTATE:
[1226] Fix | Delete
$cluster_block_group[$sub_subelement['id_name']] = getid3_lib::trimNullByte($sub_subelement['data']);
[1227] Fix | Delete
break;
[1228] Fix | Delete
[1229] Fix | Delete
default:
[1230] Fix | Delete
$this->unhandledElement('clusters.blockgroup', __LINE__, $sub_subelement);
[1231] Fix | Delete
break;
[1232] Fix | Delete
}
[1233] Fix | Delete
}
[1234] Fix | Delete
$cluster_entry[$subelement['id_name']][] = $cluster_block_group;
[1235] Fix | Delete
break;
[1236] Fix | Delete
[1237] Fix | Delete
case EBML_ID_CLUSTERSIMPLEBLOCK:
[1238] Fix | Delete
$cluster_entry[$subelement['id_name']][] = $this->HandleEMBLClusterBlock($subelement, EBML_ID_CLUSTERSIMPLEBLOCK, $info);
[1239] Fix | Delete
break;
[1240] Fix | Delete
[1241] Fix | Delete
default:
[1242] Fix | Delete
$this->unhandledElement('cluster', __LINE__, $subelement);
[1243] Fix | Delete
break;
[1244] Fix | Delete
}
[1245] Fix | Delete
$this->current_offset = $subelement['end'];
[1246] Fix | Delete
}
[1247] Fix | Delete
if (!$this->hide_clusters) {
[1248] Fix | Delete
$info['matroska']['cluster'][] = $cluster_entry;
[1249] Fix | Delete
}
[1250] Fix | Delete
[1251] Fix | Delete
// check to see if all the data we need exists already, if so, break out of the loop
[1252] Fix | Delete
if (!$this->parse_whole_file) {
[1253] Fix | Delete
if (isset($info['matroska']['info']) && is_array($info['matroska']['info'])) {
[1254] Fix | Delete
if (isset($info['matroska']['tracks']['tracks']) && is_array($info['matroska']['tracks']['tracks'])) {
[1255] Fix | Delete
if (count($info['matroska']['track_data_offsets']) == count($info['matroska']['tracks']['tracks'])) {
[1256] Fix | Delete
return;
[1257] Fix | Delete
}
[1258] Fix | Delete
}
[1259] Fix | Delete
}
[1260] Fix | Delete
}
[1261] Fix | Delete
break;
[1262] Fix | Delete
[1263] Fix | Delete
default:
[1264] Fix | Delete
$this->unhandledElement('segment', __LINE__, $element_data);
[1265] Fix | Delete
break;
[1266] Fix | Delete
}
[1267] Fix | Delete
}
[1268] Fix | Delete
break;
[1269] Fix | Delete
[1270] Fix | Delete
default:
[1271] Fix | Delete
$this->unhandledElement('root', __LINE__, $top_element);
[1272] Fix | Delete
break;
[1273] Fix | Delete
}
[1274] Fix | Delete
}
[1275] Fix | Delete
}
[1276] Fix | Delete
[1277] Fix | Delete
/**
[1278] Fix | Delete
* @param int $min_data
[1279] Fix | Delete
*
[1280] Fix | Delete
* @return bool
[1281] Fix | Delete
*/
[1282] Fix | Delete
private function EnsureBufferHasEnoughData($min_data=1024) {
[1283] Fix | Delete
if (($this->current_offset - $this->EBMLbuffer_offset) >= ($this->EBMLbuffer_length - $min_data)) {
[1284] Fix | Delete
$read_bytes = max($min_data, $this->getid3->fread_buffer_size());
[1285] Fix | Delete
[1286] Fix | Delete
try {
[1287] Fix | Delete
$this->fseek($this->current_offset);
[1288] Fix | Delete
$this->EBMLbuffer_offset = $this->current_offset;
[1289] Fix | Delete
$this->EBMLbuffer = $this->fread($read_bytes);
[1290] Fix | Delete
$this->EBMLbuffer_length = strlen($this->EBMLbuffer);
[1291] Fix | Delete
} catch (getid3_exception $e) {
[1292] Fix | Delete
$this->warning('EBML parser: '.$e->getMessage());
[1293] Fix | Delete
return false;
[1294] Fix | Delete
}
[1295] Fix | Delete
[1296] Fix | Delete
if ($this->EBMLbuffer_length == 0 && $this->feof()) {
[1297] Fix | Delete
return $this->error('EBML parser: ran out of file at offset '.$this->current_offset);
[1298] Fix | Delete
}
[1299] Fix | Delete
}
[1300] Fix | Delete
return true;
[1301] Fix | Delete
}
[1302] Fix | Delete
[1303] Fix | Delete
/**
[1304] Fix | Delete
* @return int|float|false
[1305] Fix | Delete
*/
[1306] Fix | Delete
private function readEBMLint() {
[1307] Fix | Delete
$actual_offset = $this->current_offset - $this->EBMLbuffer_offset;
[1308] Fix | Delete
[1309] Fix | Delete
// get length of integer
[1310] Fix | Delete
$first_byte_int = ord($this->EBMLbuffer[$actual_offset]);
[1311] Fix | Delete
if (0x80 & $first_byte_int) {
[1312] Fix | Delete
$length = 1;
[1313] Fix | Delete
} elseif (0x40 & $first_byte_int) {
[1314] Fix | Delete
$length = 2;
[1315] Fix | Delete
} elseif (0x20 & $first_byte_int) {
[1316] Fix | Delete
$length = 3;
[1317] Fix | Delete
} elseif (0x10 & $first_byte_int) {
[1318] Fix | Delete
$length = 4;
[1319] Fix | Delete
} elseif (0x08 & $first_byte_int) {
[1320] Fix | Delete
$length = 5;
[1321] Fix | Delete
} elseif (0x04 & $first_byte_int) {
[1322] Fix | Delete
$length = 6;
[1323] Fix | Delete
} elseif (0x02 & $first_byte_int) {
[1324] Fix | Delete
$length = 7;
[1325] Fix | Delete
} elseif (0x01 & $first_byte_int) {
[1326] Fix | Delete
$length = 8;
[1327] Fix | Delete
} else {
[1328] Fix | Delete
throw new Exception('invalid EBML integer (leading 0x00) at '.$this->current_offset);
[1329] Fix | Delete
}
[1330] Fix | Delete
[1331] Fix | Delete
// read
[1332] Fix | Delete
$int_value = self::EBML2Int(substr($this->EBMLbuffer, $actual_offset, $length));
[1333] Fix | Delete
$this->current_offset += $length;
[1334] Fix | Delete
[1335] Fix | Delete
return $int_value;
[1336] Fix | Delete
}
[1337] Fix | Delete
[1338] Fix | Delete
/**
[1339] Fix | Delete
* @param int $length
[1340] Fix | Delete
* @param bool $check_buffer
[1341] Fix | Delete
*
[1342] Fix | Delete
* @return string|false
[1343] Fix | Delete
*/
[1344] Fix | Delete
private function readEBMLelementData($length, $check_buffer=false) {
[1345] Fix | Delete
if ($check_buffer && !$this->EnsureBufferHasEnoughData($length)) {
[1346] Fix | Delete
return false;
[1347] Fix | Delete
}
[1348] Fix | Delete
$data = substr($this->EBMLbuffer, $this->current_offset - $this->EBMLbuffer_offset, $length);
[1349] Fix | Delete
$this->current_offset += $length;
[1350] Fix | Delete
return $data;
[1351] Fix | Delete
}
[1352] Fix | Delete
[1353] Fix | Delete
/**
[1354] Fix | Delete
* @param array $element
[1355] Fix | Delete
* @param int $parent_end
[1356] Fix | Delete
* @param array|bool $get_data
[1357] Fix | Delete
*
[1358] Fix | Delete
* @return bool
[1359] Fix | Delete
*/
[1360] Fix | Delete
private function getEBMLelement(&$element, $parent_end, $get_data=false) {
[1361] Fix | Delete
if ($this->current_offset >= $parent_end) {
[1362] Fix | Delete
return false;
[1363] Fix | Delete
}
[1364] Fix | Delete
[1365] Fix | Delete
if (!$this->EnsureBufferHasEnoughData()) {
[1366] Fix | Delete
$this->current_offset = PHP_INT_MAX; // do not exit parser right now, allow to finish current loop to gather maximum information
[1367] Fix | Delete
return false;
[1368] Fix | Delete
}
[1369] Fix | Delete
[1370] Fix | Delete
$element = array();
[1371] Fix | Delete
[1372] Fix | Delete
// set offset
[1373] Fix | Delete
$element['offset'] = $this->current_offset;
[1374] Fix | Delete
[1375] Fix | Delete
// get ID
[1376] Fix | Delete
$element['id'] = $this->readEBMLint();
[1377] Fix | Delete
[1378] Fix | Delete
// get name
[1379] Fix | Delete
$element['id_name'] = self::EBMLidName($element['id']);
[1380] Fix | Delete
[1381] Fix | Delete
// get length
[1382] Fix | Delete
$element['length'] = $this->readEBMLint();
[1383] Fix | Delete
[1384] Fix | Delete
// get end offset
[1385] Fix | Delete
$element['end'] = $this->current_offset + $element['length'];
[1386] Fix | Delete
[1387] Fix | Delete
// get raw data
[1388] Fix | Delete
$dont_parse = (in_array($element['id'], $this->unuseful_elements) || $element['id_name'] == dechex($element['id']));
[1389] Fix | Delete
if (($get_data === true || (is_array($get_data) && !in_array($element['id'], $get_data))) && !$dont_parse) {
[1390] Fix | Delete
$element['data'] = $this->readEBMLelementData($element['length'], $element);
[1391] Fix | Delete
}
[1392] Fix | Delete
[1393] Fix | Delete
return true;
[1394] Fix | Delete
}
[1395] Fix | Delete
[1396] Fix | Delete
/**
[1397] Fix | Delete
* @param string $type
[1398] Fix | Delete
* @param int $line
[1399] Fix | Delete
* @param array $element
[1400] Fix | Delete
*/
[1401] Fix | Delete
private function unhandledElement($type, $line, $element) {
[1402] Fix | Delete
// warn only about unknown and missed elements, not about unuseful
[1403] Fix | Delete
if (!in_array($element['id'], $this->unuseful_elements)) {
[1404] Fix | Delete
$this->warning('Unhandled '.$type.' element ['.basename(__FILE__).':'.$line.'] ('.$element['id'].'::'.$element['id_name'].' ['.$element['length'].' bytes]) at '.$element['offset']);
[1405] Fix | Delete
}
[1406] Fix | Delete
[1407] Fix | Delete
// increase offset for unparsed elements
[1408] Fix | Delete
if (!isset($element['data'])) {
[1409] Fix | Delete
$this->current_offset = $element['end'];
[1410] Fix | Delete
}
[1411] Fix | Delete
}
[1412] Fix | Delete
[1413] Fix | Delete
/**
[1414] Fix | Delete
* @param array $SimpleTagArray
[1415] Fix | Delete
*
[1416] Fix | Delete
* @return bool
[1417] Fix | Delete
*/
[1418] Fix | Delete
private function ExtractCommentsSimpleTag($SimpleTagArray) {
[1419] Fix | Delete
if (!empty($SimpleTagArray['SimpleTag'])) {
[1420] Fix | Delete
foreach ($SimpleTagArray['SimpleTag'] as $SimpleTagKey => $SimpleTagData) {
[1421] Fix | Delete
if (!empty($SimpleTagData['TagName']) && !empty($SimpleTagData['TagString'])) {
[1422] Fix | Delete
$this->getid3->info['matroska']['comments'][strtolower($SimpleTagData['TagName'])][] = $SimpleTagData['TagString'];
[1423] Fix | Delete
}
[1424] Fix | Delete
if (!empty($SimpleTagData['SimpleTag'])) {
[1425] Fix | Delete
$this->ExtractCommentsSimpleTag($SimpleTagData);
[1426] Fix | Delete
}
[1427] Fix | Delete
}
[1428] Fix | Delete
}
[1429] Fix | Delete
[1430] Fix | Delete
return true;
[1431] Fix | Delete
}
[1432] Fix | Delete
[1433] Fix | Delete
/**
[1434] Fix | Delete
* @param int $parent_end
[1435] Fix | Delete
*
[1436] Fix | Delete
* @return array
[1437] Fix | Delete
*/
[1438] Fix | Delete
private function HandleEMBLSimpleTag($parent_end) {
[1439] Fix | Delete
$simpletag_entry = array();
[1440] Fix | Delete
[1441] Fix | Delete
while ($this->getEBMLelement($element, $parent_end, array(EBML_ID_SIMPLETAG))) {
[1442] Fix | Delete
switch ($element['id']) {
[1443] Fix | Delete
[1444] Fix | Delete
case EBML_ID_TAGNAME:
[1445] Fix | Delete
case EBML_ID_TAGLANGUAGE:
[1446] Fix | Delete
case EBML_ID_TAGSTRING:
[1447] Fix | Delete
case EBML_ID_TAGBINARY:
[1448] Fix | Delete
$simpletag_entry[$element['id_name']] = $element['data'];
[1449] Fix | Delete
break;
[1450] Fix | Delete
[1451] Fix | Delete
case EBML_ID_SIMPLETAG:
[1452] Fix | Delete
$simpletag_entry[$element['id_name']][] = $this->HandleEMBLSimpleTag($element['end']);
[1453] Fix | Delete
break;
[1454] Fix | Delete
[1455] Fix | Delete
case EBML_ID_TAGDEFAULT:
[1456] Fix | Delete
$simpletag_entry[$element['id_name']] = (bool)getid3_lib::BigEndian2Int($element['data']);
[1457] Fix | Delete
break;
[1458] Fix | Delete
[1459] Fix | Delete
default:
[1460] Fix | Delete
$this->unhandledElement('tag.simpletag', __LINE__, $element);
[1461] Fix | Delete
break;
[1462] Fix | Delete
}
[1463] Fix | Delete
}
[1464] Fix | Delete
[1465] Fix | Delete
return $simpletag_entry;
[1466] Fix | Delete
}
[1467] Fix | Delete
[1468] Fix | Delete
/**
[1469] Fix | Delete
* @param array $element
[1470] Fix | Delete
* @param int $block_type
[1471] Fix | Delete
* @param array $info
[1472] Fix | Delete
*
[1473] Fix | Delete
* @return array
[1474] Fix | Delete
*/
[1475] Fix | Delete
private function HandleEMBLClusterBlock($element, $block_type, &$info) {
[1476] Fix | Delete
// http://www.matroska.org/technical/specs/index.html#block_structure
[1477] Fix | Delete
// http://www.matroska.org/technical/specs/index.html#simpleblock_structure
[1478] Fix | Delete
[1479] Fix | Delete
$block_data = array();
[1480] Fix | Delete
$block_data['tracknumber'] = $this->readEBMLint();
[1481] Fix | Delete
$block_data['timecode'] = getid3_lib::BigEndian2Int($this->readEBMLelementData(2), false, true);
[1482] Fix | Delete
$block_data['flags_raw'] = getid3_lib::BigEndian2Int($this->readEBMLelementData(1));
[1483] Fix | Delete
[1484] Fix | Delete
if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) {
[1485] Fix | Delete
$block_data['flags']['keyframe'] = (($block_data['flags_raw'] & 0x80) >> 7);
[1486] Fix | Delete
//$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0x70) >> 4);
[1487] Fix | Delete
}
[1488] Fix | Delete
else {
[1489] Fix | Delete
//$block_data['flags']['reserved1'] = (($block_data['flags_raw'] & 0xF0) >> 4);
[1490] Fix | Delete
}
[1491] Fix | Delete
$block_data['flags']['invisible'] = (bool)(($block_data['flags_raw'] & 0x08) >> 3);
[1492] Fix | Delete
$block_data['flags']['lacing'] = (($block_data['flags_raw'] & 0x06) >> 1); // 00=no lacing; 01=Xiph lacing; 11=EBML lacing; 10=fixed-size lacing
[1493] Fix | Delete
if ($block_type == EBML_ID_CLUSTERSIMPLEBLOCK) {
[1494] Fix | Delete
$block_data['flags']['discardable'] = (($block_data['flags_raw'] & 0x01));
[1495] Fix | Delete
}
[1496] Fix | Delete
else {
[1497] Fix | Delete
//$block_data['flags']['reserved2'] = (($block_data['flags_raw'] & 0x01) >> 0);
[1498] Fix | Delete
}
[1499] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function