comparison libmpdemux/demux_mkv.cpp @ 10273:02c2c05b7da6

Updates needed for libebml/libmatroska 0.4.4
author mosu
date Mon, 09 Jun 2003 16:48:02 +0000
parents 531b00ad6f2d
children 21972de8631d
comparison
equal deleted inserted replaced
10272:7b0bc557987b 10273:02c2c05b7da6
25 25
26 #include "EbmlHead.h" 26 #include "EbmlHead.h"
27 #include "EbmlSubHead.h" 27 #include "EbmlSubHead.h"
28 #include "EbmlStream.h" 28 #include "EbmlStream.h"
29 #include "EbmlContexts.h" 29 #include "EbmlContexts.h"
30 #include "EbmlVersion.h"
30 #include "FileKax.h" 31 #include "FileKax.h"
31 32
32 #include "KaxAttachements.h" 33 #include "KaxAttachements.h"
33 #include "KaxBlock.h" 34 #include "KaxBlock.h"
34 #include "KaxBlockData.h" 35 #include "KaxBlockData.h"
50 51
51 #include "matroska.h" 52 #include "matroska.h"
52 53
53 using namespace LIBMATROSKA_NAMESPACE; 54 using namespace LIBMATROSKA_NAMESPACE;
54 using namespace std; 55 using namespace std;
56
57 #ifndef LIBEBML_VERSION
58 #define LIBEBML_VERSION 000000
59 #endif // LIBEBML_VERSION
55 60
56 // for e.g. "-slang ger" 61 // for e.g. "-slang ger"
57 extern char *dvdsub_lang; 62 extern char *dvdsub_lang;
58 extern char *audio_lang; 63 extern char *audio_lang;
59 64
1051 KaxTrackUID &tuid = *static_cast<KaxTrackUID *>(l3); 1056 KaxTrackUID &tuid = *static_cast<KaxTrackUID *>(l3);
1052 tuid.ReadData(es->I_O()); 1057 tuid.ReadData(es->I_O());
1053 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Track UID: %u\n", 1058 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Track UID: %u\n",
1054 uint32(tuid)); 1059 uint32(tuid));
1055 1060
1061 #if LIBEBML_VERSION >= 000404
1062 } else if (EbmlId(*l3) ==
1063 KaxTrackDefaultDuration::ClassInfos.GlobalId) {
1064 KaxTrackDefaultDuration &def_duration =
1065 *static_cast<KaxTrackDefaultDuration *>(l3);
1066 def_duration.ReadData(es->I_O());
1067 track->v_frate = 1000000000.0 / (float)uint64(def_duration);
1068 fprintf(stdout, "[mkv] | + Default duration: %.3fms ( = %.3f "
1069 "fps)\n", (float)uint64(def_duration) / 1000000.0,
1070 track->v_frate);
1071 #endif // LIBEBML_VERSION
1072
1056 } else if (EbmlId(*l3) == KaxTrackType::ClassInfos.GlobalId) { 1073 } else if (EbmlId(*l3) == KaxTrackType::ClassInfos.GlobalId) {
1057 KaxTrackType &ttype = *static_cast<KaxTrackType *>(l3); 1074 KaxTrackType &ttype = *static_cast<KaxTrackType *>(l3);
1058 ttype.ReadData(es->I_O()); 1075 ttype.ReadData(es->I_O());
1059 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Track type: "); 1076 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Track type: ");
1060 1077
1166 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Display height: " 1183 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Display height: "
1167 "%u\n", track->v_dheight); 1184 "%u\n", track->v_dheight);
1168 1185
1169 } else if (EbmlId(*l4) == 1186 } else if (EbmlId(*l4) ==
1170 KaxVideoFrameRate::ClassInfos.GlobalId) { 1187 KaxVideoFrameRate::ClassInfos.GlobalId) {
1188 // For older files.
1171 KaxVideoFrameRate &framerate = 1189 KaxVideoFrameRate &framerate =
1172 *static_cast<KaxVideoFrameRate *>(l4); 1190 *static_cast<KaxVideoFrameRate *>(l4);
1173 framerate.ReadData(es->I_O()); 1191 framerate.ReadData(es->I_O());
1174 track->v_frate = float(framerate); 1192 track->v_frate = float(framerate);
1175 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Frame rate: %f\n", 1193 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Frame rate: %f\n",
1187 } // while (l4 != NULL) 1205 } // while (l4 != NULL)
1188 1206
1189 } else if (EbmlId(*l3) == KaxCodecID::ClassInfos.GlobalId) { 1207 } else if (EbmlId(*l3) == KaxCodecID::ClassInfos.GlobalId) {
1190 KaxCodecID &codec_id = *static_cast<KaxCodecID*>(l3); 1208 KaxCodecID &codec_id = *static_cast<KaxCodecID*>(l3);
1191 codec_id.ReadData(es->I_O()); 1209 codec_id.ReadData(es->I_O());
1210 #if LIBEBML_VERSION >= 000404
1211 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Codec ID: %s\n",
1212 string(codec_id).c_str());
1213 track->codec_id = strdup(string(codec_id).c_str());
1214 #else
1192 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Codec ID: %s\n", 1215 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + Codec ID: %s\n",
1193 &binary(codec_id)); 1216 &binary(codec_id));
1194 track->codec_id = strdup((char *)&binary(codec_id)); 1217 track->codec_id = strdup((char *)&binary(codec_id));
1218 #endif // LIBEBML_VERSION
1195 1219
1196 } else if (EbmlId(*l3) == KaxCodecPrivate::ClassInfos.GlobalId) { 1220 } else if (EbmlId(*l3) == KaxCodecPrivate::ClassInfos.GlobalId) {
1197 KaxCodecPrivate &c_priv = *static_cast<KaxCodecPrivate*>(l3); 1221 KaxCodecPrivate &c_priv = *static_cast<KaxCodecPrivate*>(l3);
1198 c_priv.ReadData(es->I_O()); 1222 c_priv.ReadData(es->I_O());
1199 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + CodecPrivate, length " 1223 mp_msg(MSGT_DEMUX, MSGL_V, "[mkv] | + CodecPrivate, length "
1735 1759
1736 if (EbmlId(*l2) == KaxClusterTimecode::ClassInfos.GlobalId) { 1760 if (EbmlId(*l2) == KaxClusterTimecode::ClassInfos.GlobalId) {
1737 KaxClusterTimecode &ctc = *static_cast<KaxClusterTimecode *>(l2); 1761 KaxClusterTimecode &ctc = *static_cast<KaxClusterTimecode *>(l2);
1738 ctc.ReadData(es->I_O()); 1762 ctc.ReadData(es->I_O());
1739 mkv_d->cluster_tc = uint64(ctc); 1763 mkv_d->cluster_tc = uint64(ctc);
1764 #if LIBEBML_VERSION >= 000404
1765 mkv_d->cluster->InitTimecode(mkv_d->cluster_tc, mkv_d->tc_scale);
1766 #else
1740 mkv_d->cluster->InitTimecode(mkv_d->cluster_tc); 1767 mkv_d->cluster->InitTimecode(mkv_d->cluster_tc);
1768 #endif // LIBEBML_VERSION
1741 1769
1742 } else if (EbmlId(*l2) == KaxBlockGroup::ClassInfos.GlobalId) { 1770 } else if (EbmlId(*l2) == KaxBlockGroup::ClassInfos.GlobalId) {
1743 1771
1744 block = NULL; 1772 block = NULL;
1745 block_duration = -1; 1773 block_duration = -1;