542 $this->current_offset =
$info[
'avdataoffset'];
545 switch ($top_element[
'id']) {
547 case self::EBML_ID_EBML:
548 $info[
'fileformat'] =
'matroska';
549 $info[
'matroska'][
'header'][
'offset'] = $top_element[
'offset'];
550 $info[
'matroska'][
'header'][
'length'] = $top_element[
'length'];
552 while ($this->
getEBMLelement($element_data, $top_element[
'end'],
true)) {
553 switch ($element_data[
'id']) {
555 case self::EBML_ID_EBMLVERSION:
556 case self::EBML_ID_EBMLREADVERSION:
557 case self::EBML_ID_EBMLMAXIDLENGTH:
558 case self::EBML_ID_EBMLMAXSIZELENGTH:
559 case self::EBML_ID_DOCTYPEVERSION:
560 case self::EBML_ID_DOCTYPEREADVERSION:
564 case self::EBML_ID_DOCTYPE:
566 $info[
'matroska'][
'doctype'] = $element_data[
'data'];
569 case self::EBML_ID_CRC32:
570 $this->current_offset = $element_data[
'end'];
571 unset($element_data);
577 if (!empty($element_data)) {
578 unset($element_data[
'offset'], $element_data[
'end']);
579 $info[
'matroska'][
'header'][
'elements'][] = $element_data;
584 case self::EBML_ID_SEGMENT:
585 $info[
'matroska'][
'segment'][0][
'offset'] = $top_element[
'offset'];
586 $info[
'matroska'][
'segment'][0][
'length'] = $top_element[
'length'];
588 while ($this->
getEBMLelement($element_data, $top_element[
'end'])) {
589 if ($element_data[
'id'] != self::EBML_ID_CLUSTER || !self::$hide_clusters) {
590 $info[
'matroska'][
'segments'][] = $element_data;
592 switch ($element_data[
'id']) {
594 case self::EBML_ID_SEEKHEAD:
596 while ($this->
getEBMLelement($seek_entry, $element_data[
'end'])) {
597 switch ($seek_entry[
'id']) {
599 case self::EBML_ID_SEEK:
600 while ($this->
getEBMLelement($sub_seek_entry, $seek_entry[
'end'],
true)) {
602 switch ($sub_seek_entry[
'id']) {
604 case self::EBML_ID_SEEKID:
605 $seek_entry[
'target_id'] = self::EBML2Int($sub_seek_entry[
'data']);
606 $seek_entry[
'target_name'] = self::EBMLidName($seek_entry[
'target_id']);
609 case self::EBML_ID_SEEKPOSITION:
610 $seek_entry[
'target_offset'] = $element_data[
'offset'] +
Helper::BigEndian2Int($sub_seek_entry[
'data']);
617 if ($seek_entry[
'target_id'] != self::EBML_ID_CLUSTER || !self::$hide_clusters) {
618 $info[
'matroska'][
'seek'][] = $seek_entry;
628 case self::EBML_ID_TRACKS:
629 $info[
'matroska'][
'tracks'] = $element_data;
631 while ($this->
getEBMLelement($track_entry, $element_data[
'end'])) {
632 switch ($track_entry[
'id']) {
634 case self::EBML_ID_TRACKENTRY:
636 while ($this->
getEBMLelement($subelement, $track_entry[
'end'],
array(self::EBML_ID_VIDEO, self::EBML_ID_AUDIO, self::EBML_ID_CONTENTENCODINGS))) {
637 switch ($subelement[
'id']) {
639 case self::EBML_ID_TRACKNUMBER:
640 case self::EBML_ID_TRACKUID:
641 case self::EBML_ID_TRACKTYPE:
642 case self::EBML_ID_MINCACHE:
643 case self::EBML_ID_MAXCACHE:
644 case self::EBML_ID_MAXBLOCKADDITIONID:
645 case self::EBML_ID_DEFAULTDURATION:
649 case self::EBML_ID_TRACKTIMECODESCALE:
653 case self::EBML_ID_CODECID:
654 case self::EBML_ID_LANGUAGE:
655 case self::EBML_ID_NAME:
656 case self::EBML_ID_CODECNAME:
660 case self::EBML_ID_CODECPRIVATE:
661 $track_entry[$subelement[
'id_name']] = $subelement[
'data'];
664 case self::EBML_ID_FLAGENABLED:
665 case self::EBML_ID_FLAGDEFAULT:
666 case self::EBML_ID_FLAGFORCED:
667 case self::EBML_ID_FLAGLACING:
668 case self::EBML_ID_CODECDECODEALL:
672 case self::EBML_ID_VIDEO:
674 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
true)) {
675 switch ($sub_subelement[
'id']) {
677 case self::EBML_ID_PIXELWIDTH:
678 case self::EBML_ID_PIXELHEIGHT:
679 case self::EBML_ID_STEREOMODE:
680 case self::EBML_ID_PIXELCROPBOTTOM:
681 case self::EBML_ID_PIXELCROPTOP:
682 case self::EBML_ID_PIXELCROPLEFT:
683 case self::EBML_ID_PIXELCROPRIGHT:
684 case self::EBML_ID_DISPLAYWIDTH:
685 case self::EBML_ID_DISPLAYHEIGHT:
686 case self::EBML_ID_DISPLAYUNIT:
687 case self::EBML_ID_ASPECTRATIOTYPE:
691 case self::EBML_ID_FLAGINTERLACED:
695 case self::EBML_ID_GAMMAVALUE:
699 case self::EBML_ID_COLOURSPACE:
709 case self::EBML_ID_AUDIO:
711 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
true)) {
712 switch ($sub_subelement[
'id']) {
714 case self::EBML_ID_CHANNELS:
715 case self::EBML_ID_BITDEPTH:
719 case self::EBML_ID_SAMPLINGFREQUENCY:
720 case self::EBML_ID_OUTPUTSAMPLINGFREQUENCY:
724 case self::EBML_ID_CHANNELPOSITIONS:
734 case self::EBML_ID_CONTENTENCODINGS:
736 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'])) {
737 switch ($sub_subelement[
'id']) {
739 case self::EBML_ID_CONTENTENCODING:
741 while ($this->
getEBMLelement($sub_sub_subelement, $sub_subelement[
'end'],
array(self::EBML_ID_CONTENTCOMPRESSION, self::EBML_ID_CONTENTENCRYPTION))) {
742 switch ($sub_sub_subelement[
'id']) {
744 case self::EBML_ID_CONTENTENCODINGORDER:
745 case self::EBML_ID_CONTENTENCODINGSCOPE:
746 case self::EBML_ID_CONTENTENCODINGTYPE:
747 $track_entry[$sub_subelement[
'id_name']][$sub_sub_subelement[
'id_name']] =
Helper::BigEndian2Int($sub_sub_subelement[
'data']);
750 case self::EBML_ID_CONTENTCOMPRESSION:
752 while ($this->
getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement[
'end'],
true)) {
753 switch ($sub_sub_sub_subelement[
'id']) {
755 case self::EBML_ID_CONTENTCOMPALGO:
756 $track_entry[$sub_subelement[
'id_name']][$sub_sub_subelement[
'id_name']][$sub_sub_sub_subelement[
'id_name']] =
Helper::BigEndian2Int($sub_sub_sub_subelement[
'data']);
759 case self::EBML_ID_CONTENTCOMPSETTINGS:
760 $track_entry[$sub_subelement[
'id_name']][$sub_sub_subelement[
'id_name']][$sub_sub_sub_subelement[
'id_name']] = $sub_sub_sub_subelement[
'data'];
764 $this->
unhandledElement(
'track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement);
769 case self::EBML_ID_CONTENTENCRYPTION:
771 while ($this->
getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement[
'end'],
true)) {
772 switch ($sub_sub_sub_subelement[
'id']) {
774 case self::EBML_ID_CONTENTENCALGO:
775 case self::EBML_ID_CONTENTSIGALGO:
776 case self::EBML_ID_CONTENTSIGHASHALGO:
777 $track_entry[$sub_subelement[
'id_name']][$sub_sub_subelement[
'id_name']][$sub_sub_sub_subelement[
'id_name']] =
Helper::BigEndian2Int($sub_sub_sub_subelement[
'data']);
780 case self::EBML_ID_CONTENTENCKEYID:
781 case self::EBML_ID_CONTENTSIGNATURE:
782 case self::EBML_ID_CONTENTSIGKEYID:
783 $track_entry[$sub_subelement[
'id_name']][$sub_sub_subelement[
'id_name']][$sub_sub_sub_subelement[
'id_name']] = $sub_sub_sub_subelement[
'data'];
787 $this->
unhandledElement(
'track.contentencodings.contentencoding.contentcompression', __LINE__, $sub_sub_sub_subelement);
793 $this->
unhandledElement(
'track.contentencodings.contentencoding', __LINE__, $sub_sub_subelement);
799 $this->
unhandledElement(
'track.contentencodings', __LINE__, $sub_subelement);
809 $info[
'matroska'][
'tracks'][
'tracks'][] = $track_entry;
818 case self::EBML_ID_INFO:
819 $info_entry =
array();
821 while ($this->
getEBMLelement($subelement, $element_data[
'end'],
true)) {
822 switch ($subelement[
'id']) {
824 case self::EBML_ID_TIMECODESCALE:
828 case self::EBML_ID_DURATION:
832 case self::EBML_ID_DATEUTC:
834 $info_entry[$subelement[
'id_name'].
'_unix'] = self::EBMLdate2unix($info_entry[$subelement[
'id_name']]);
837 case self::EBML_ID_SEGMENTUID:
838 case self::EBML_ID_PREVUID:
839 case self::EBML_ID_NEXTUID:
843 case self::EBML_ID_SEGMENTFAMILY:
847 case self::EBML_ID_SEGMENTFILENAME:
848 case self::EBML_ID_PREVFILENAME:
849 case self::EBML_ID_NEXTFILENAME:
850 case self::EBML_ID_TITLE:
851 case self::EBML_ID_MUXINGAPP:
852 case self::EBML_ID_WRITINGAPP:
854 $info[
'matroska'][
'comments'][strtolower($subelement[
'id_name'])][] = $info_entry[$subelement[
'id_name']];
857 case self::EBML_ID_CHAPTERTRANSLATE:
858 $chaptertranslate_entry =
array();
860 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
true)) {
861 switch ($sub_subelement[
'id']) {
863 case self::EBML_ID_CHAPTERTRANSLATEEDITIONUID:
864 $chaptertranslate_entry[$sub_subelement[
'id_name']][] =
Helper::BigEndian2Int($sub_subelement[
'data']);
867 case self::EBML_ID_CHAPTERTRANSLATECODEC:
868 $chaptertranslate_entry[$sub_subelement[
'id_name']] =
Helper::BigEndian2Int($sub_subelement[
'data']);
871 case self::EBML_ID_CHAPTERTRANSLATEID:
872 $chaptertranslate_entry[$sub_subelement[
'id_name']] =
Helper::trimNullByte($sub_subelement[
'data']);
876 $this->
unhandledElement(
'info.chaptertranslate', __LINE__, $sub_subelement);
879 $info_entry[$subelement[
'id_name']] = $chaptertranslate_entry;
886 $info[
'matroska'][
'info'][] = $info_entry;
889 case self::EBML_ID_CUES:
890 if (self::$hide_clusters) {
891 $this->current_offset = $element_data[
'end'];
894 $cues_entry =
array();
896 while ($this->
getEBMLelement($subelement, $element_data[
'end'])) {
897 switch ($subelement[
'id']) {
899 case self::EBML_ID_CUEPOINT:
900 $cuepoint_entry =
array();
902 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
array(self::EBML_ID_CUETRACKPOSITIONS))) {
903 switch ($sub_subelement[
'id']) {
905 case self::EBML_ID_CUETRACKPOSITIONS:
906 $cuetrackpositions_entry =
array();
908 while ($this->
getEBMLelement($sub_sub_subelement, $sub_subelement[
'end'],
true)) {
909 switch ($sub_sub_subelement[
'id']) {
911 case self::EBML_ID_CUETRACK:
912 case self::EBML_ID_CUECLUSTERPOSITION:
913 case self::EBML_ID_CUEBLOCKNUMBER:
914 case self::EBML_ID_CUECODECSTATE:
915 $cuetrackpositions_entry[$sub_sub_subelement[
'id_name']] =
Helper::BigEndian2Int($sub_sub_subelement[
'data']);
919 $this->
unhandledElement(
'cues.cuepoint.cuetrackpositions', __LINE__, $sub_sub_subelement);
922 $cuepoint_entry[$sub_subelement[
'id_name']][] = $cuetrackpositions_entry;
925 case self::EBML_ID_CUETIME:
933 $cues_entry[] = $cuepoint_entry;
940 $info[
'matroska'][
'cues'] = $cues_entry;
943 case self::EBML_ID_TAGS:
944 $tags_entry =
array();
946 while ($this->
getEBMLelement($subelement, $element_data[
'end'],
false)) {
947 switch ($subelement[
'id']) {
949 case self::EBML_ID_TAG:
950 $tag_entry =
array();
952 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
false)) {
953 switch ($sub_subelement[
'id']) {
955 case self::EBML_ID_TARGETS:
956 $targets_entry =
array();
958 while ($this->
getEBMLelement($sub_sub_subelement, $sub_subelement[
'end'],
true)) {
959 switch ($sub_sub_subelement[
'id']) {
961 case self::EBML_ID_TARGETTYPEVALUE:
963 $targets_entry[strtolower($sub_sub_subelement[
'id_name']).
'_long'] = self::MatroskaTargetTypeValue($targets_entry[$sub_sub_subelement[
'id_name']]);
966 case self::EBML_ID_TARGETTYPE:
967 $targets_entry[$sub_sub_subelement[
'id_name']] = $sub_sub_subelement[
'data'];
970 case self::EBML_ID_TAGTRACKUID:
971 case self::EBML_ID_TAGEDITIONUID:
972 case self::EBML_ID_TAGCHAPTERUID:
973 case self::EBML_ID_TAGATTACHMENTUID:
974 $targets_entry[$sub_sub_subelement[
'id_name']][] =
Helper::BigEndian2Int($sub_sub_subelement[
'data']);
981 $tag_entry[$sub_subelement[
'id_name']] = $targets_entry;
984 case self::EBML_ID_SIMPLETAG:
985 $tag_entry[$sub_subelement[
'id_name']][] = $this->
HandleEMBLSimpleTag($sub_subelement[
'end']);
992 $tags_entry[] = $tag_entry;
999 $info[
'matroska'][
'tags'] = $tags_entry;
1002 case self::EBML_ID_ATTACHMENTS:
1004 while ($this->
getEBMLelement($subelement, $element_data[
'end'])) {
1005 switch ($subelement[
'id']) {
1007 case self::EBML_ID_ATTACHEDFILE:
1008 $attachedfile_entry =
array();
1010 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
array(self::EBML_ID_FILEDATA))) {
1011 switch ($sub_subelement[
'id']) {
1013 case self::EBML_ID_FILEDESCRIPTION:
1014 case self::EBML_ID_FILENAME:
1015 case self::EBML_ID_FILEMIMETYPE:
1016 $attachedfile_entry[$sub_subelement[
'id_name']] = $sub_subelement[
'data'];
1019 case self::EBML_ID_FILEDATA:
1021 $attachedfile_entry[
'data_length'] = $sub_subelement[
'length'];
1024 $attachedfile_entry[$sub_subelement[
'id_name']],
1025 $attachedfile_entry[
'FileName'],
1026 $attachedfile_entry[
'data_offset'],
1027 $attachedfile_entry[
'data_length']);
1029 $this->current_offset = $sub_subelement[
'end'];
1032 case self::EBML_ID_FILEUID:
1037 $this->
unhandledElement(
'attachments.attachedfile', __LINE__, $sub_subelement);
1040 if (!empty($attachedfile_entry[
'FileData']) && !empty($attachedfile_entry[
'FileMimeType']) && preg_match(
'#^image/#i', $attachedfile_entry[
'FileMimeType'])) {
1042 $attachedfile_entry[
'data'] = $attachedfile_entry[
'FileData'];
1043 $attachedfile_entry[
'image_mime'] = $attachedfile_entry[
'FileMimeType'];
1044 $info[
'matroska'][
'comments'][
'picture'][] =
array(
'data' => $attachedfile_entry[
'data'],
'image_mime' => $attachedfile_entry[
'image_mime'],
'filename' => $attachedfile_entry[
'FileName']);
1045 unset($attachedfile_entry[
'FileData'], $attachedfile_entry[
'FileMimeType']);
1048 if (!empty($attachedfile_entry[
'image_mime']) && preg_match(
'#^image/#i', $attachedfile_entry[
'image_mime'])) {
1051 $info[
'matroska'][
'attachments'][] = $attachedfile_entry;
1061 case self::EBML_ID_CHAPTERS:
1063 while ($this->
getEBMLelement($subelement, $element_data[
'end'])) {
1064 switch ($subelement[
'id']) {
1066 case self::EBML_ID_EDITIONENTRY:
1067 $editionentry_entry =
array();
1069 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
array(self::EBML_ID_CHAPTERATOM))) {
1070 switch ($sub_subelement[
'id']) {
1072 case self::EBML_ID_EDITIONUID:
1076 case self::EBML_ID_EDITIONFLAGHIDDEN:
1077 case self::EBML_ID_EDITIONFLAGDEFAULT:
1078 case self::EBML_ID_EDITIONFLAGORDERED:
1079 $editionentry_entry[$sub_subelement[
'id_name']] = (bool)
Helper::BigEndian2Int($sub_subelement[
'data']);
1082 case self::EBML_ID_CHAPTERATOM:
1083 $chapteratom_entry =
array();
1085 while ($this->
getEBMLelement($sub_sub_subelement, $sub_subelement[
'end'],
array(self::EBML_ID_CHAPTERTRACK, self::EBML_ID_CHAPTERDISPLAY))) {
1086 switch ($sub_sub_subelement[
'id']) {
1088 case self::EBML_ID_CHAPTERSEGMENTUID:
1089 case self::EBML_ID_CHAPTERSEGMENTEDITIONUID:
1090 $chapteratom_entry[$sub_sub_subelement[
'id_name']] = $sub_sub_subelement[
'data'];
1093 case self::EBML_ID_CHAPTERFLAGENABLED:
1094 case self::EBML_ID_CHAPTERFLAGHIDDEN:
1095 $chapteratom_entry[$sub_sub_subelement[
'id_name']] = (bool)
Helper::BigEndian2Int($sub_sub_subelement[
'data']);
1098 case self::EBML_ID_CHAPTERUID:
1099 case self::EBML_ID_CHAPTERTIMESTART:
1100 case self::EBML_ID_CHAPTERTIMEEND:
1101 $chapteratom_entry[$sub_sub_subelement[
'id_name']] =
Helper::BigEndian2Int($sub_sub_subelement[
'data']);
1104 case self::EBML_ID_CHAPTERTRACK:
1105 $chaptertrack_entry =
array();
1107 while ($this->
getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement[
'end'],
true)) {
1108 switch ($sub_sub_sub_subelement[
'id']) {
1110 case self::EBML_ID_CHAPTERTRACKNUMBER:
1111 $chaptertrack_entry[$sub_sub_sub_subelement[
'id_name']] =
Helper::BigEndian2Int($sub_sub_sub_subelement[
'data']);
1115 $this->
unhandledElement(
'chapters.editionentry.chapteratom.chaptertrack', __LINE__, $sub_sub_sub_subelement);
1118 $chapteratom_entry[$sub_sub_subelement[
'id_name']][] = $chaptertrack_entry;
1121 case self::EBML_ID_CHAPTERDISPLAY:
1122 $chapterdisplay_entry =
array();
1124 while ($this->
getEBMLelement($sub_sub_sub_subelement, $sub_sub_subelement[
'end'],
true)) {
1125 switch ($sub_sub_sub_subelement[
'id']) {
1127 case self::EBML_ID_CHAPSTRING:
1128 case self::EBML_ID_CHAPLANGUAGE:
1129 case self::EBML_ID_CHAPCOUNTRY:
1130 $chapterdisplay_entry[$sub_sub_sub_subelement[
'id_name']] = $sub_sub_sub_subelement[
'data'];
1134 $this->
unhandledElement(
'chapters.editionentry.chapteratom.chapterdisplay', __LINE__, $sub_sub_sub_subelement);
1137 $chapteratom_entry[$sub_sub_subelement[
'id_name']][] = $chapterdisplay_entry;
1141 $this->
unhandledElement(
'chapters.editionentry.chapteratom', __LINE__, $sub_sub_subelement);
1144 $editionentry_entry[$sub_subelement[
'id_name']][] = $chapteratom_entry;
1148 $this->
unhandledElement(
'chapters.editionentry', __LINE__, $sub_subelement);
1151 $info[
'matroska'][
'chapters'][] = $editionentry_entry;
1160 case self::EBML_ID_CLUSTER:
1161 $cluster_entry =
array();
1163 while ($this->
getEBMLelement($subelement, $element_data[
'end'],
array(self::EBML_ID_CLUSTERSILENTTRACKS, self::EBML_ID_CLUSTERBLOCKGROUP, self::EBML_ID_CLUSTERSIMPLEBLOCK))) {
1164 switch ($subelement[
'id']) {
1166 case self::EBML_ID_CLUSTERTIMECODE:
1167 case self::EBML_ID_CLUSTERPOSITION:
1168 case self::EBML_ID_CLUSTERPREVSIZE:
1172 case self::EBML_ID_CLUSTERSILENTTRACKS:
1173 $cluster_silent_tracks =
array();
1175 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
true)) {
1176 switch ($sub_subelement[
'id']) {
1178 case self::EBML_ID_CLUSTERSILENTTRACKNUMBER:
1183 $this->
unhandledElement(
'cluster.silenttracks', __LINE__, $sub_subelement);
1186 $cluster_entry[$subelement[
'id_name']][] = $cluster_silent_tracks;
1189 case self::EBML_ID_CLUSTERBLOCKGROUP:
1190 $cluster_block_group =
array(
'offset' => $this->current_offset);
1192 while ($this->
getEBMLelement($sub_subelement, $subelement[
'end'],
array(self::EBML_ID_CLUSTERBLOCK))) {
1193 switch ($sub_subelement[
'id']) {
1195 case self::EBML_ID_CLUSTERBLOCK:
1196 $cluster_block_group[$sub_subelement[
'id_name']] = $this->
HandleEMBLClusterBlock($sub_subelement, self::EBML_ID_CLUSTERBLOCK,
$info);
1199 case self::EBML_ID_CLUSTERREFERENCEPRIORITY:
1200 case self::EBML_ID_CLUSTERBLOCKDURATION:
1204 case self::EBML_ID_CLUSTERREFERENCEBLOCK:
1205 $cluster_block_group[$sub_subelement[
'id_name']][] =
Helper::BigEndian2Int($sub_subelement[
'data'],
false,
true);
1208 case self::EBML_ID_CLUSTERCODECSTATE:
1209 $cluster_block_group[$sub_subelement[
'id_name']] =
Helper::trimNullByte($sub_subelement[
'data']);
1216 $cluster_entry[$subelement[
'id_name']][] = $cluster_block_group;
1219 case self::EBML_ID_CLUSTERSIMPLEBLOCK:
1226 $this->current_offset = $subelement[
'end'];
1228 if (!self::$hide_clusters) {
1229 $info[
'matroska'][
'cluster'][] = $cluster_entry;
1233 if (!self::$parse_whole_file) {
1234 if (isset(
$info[
'matroska'][
'info']) && is_array(
$info[
'matroska'][
'info'])) {
1235 if (isset(
$info[
'matroska'][
'tracks'][
'tracks']) && is_array(
$info[
'matroska'][
'tracks'][
'tracks'])) {
1236 if (count(
$info[
'matroska'][
'track_data_offsets']) == count(
$info[
'matroska'][
'tracks'][
'tracks'])) {
HandleEMBLClusterBlock($element, $block_type, &$info)
HandleEMBLSimpleTag($parent_end)
static BigEndian2Float($byteword)
ANSI/IEEE Standard 754-1985, Standard for Binary Floating Point Arithmetic.
unhandledElement($type, $line, $element)
Create styles array
The data for the language used.
getEBMLelement(&$element, $parent_end, $get_data=false)
static trimNullByte($string)
static BigEndian2Int($byteword, $synchsafe=false, $signed=false)
saveAttachment(&$ThisFileInfoIndex, $filename, $offset, $length)