Mercurial > mplayer.hg
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; |