aboutsummaryrefslogtreecommitdiff
path: root/Src/nsmkv/Cues.h
diff options
context:
space:
mode:
Diffstat (limited to 'Src/nsmkv/Cues.h')
-rw-r--r--Src/nsmkv/Cues.h76
1 files changed, 76 insertions, 0 deletions
diff --git a/Src/nsmkv/Cues.h b/Src/nsmkv/Cues.h
new file mode 100644
index 00000000..31a26982
--- /dev/null
+++ b/Src/nsmkv/Cues.h
@@ -0,0 +1,76 @@
+#pragma once
+#include <bfc/platform/types.h>
+#include "mkv_reader.h"
+#include <map>
+
+const uint32_t mkv_segment_cues = 0xc53bb6b;
+const uint32_t mkv_cues_cuepoint = 0x3b;
+const uint32_t mkv_cuepoint_cuetime=0x33;
+const uint32_t mkv_cuepoint_cuetrackpositions = 0x37;
+const uint32_t mkv_cuetrackpositions_cuetrack= 0x77;
+const uint32_t mkv_cuetrackpositions_cueclusterposition=0x71;
+
+namespace nsmkv
+{
+
+ class CueTrackPosition
+ {
+ public:
+ CueTrackPosition()
+#ifdef WA_VALIDATE
+ :
+ track_found(false),
+ cluster_position_found(false)
+// block_number_found(false)
+#endif
+ {
+ track=0;
+ cluster_position=0;
+ block_number=0;
+ }
+ uint64_t track;
+ uint64_t cluster_position;
+ uint64_t block_number;
+
+#ifdef WA_VALIDATE
+ bool track_found;
+ bool cluster_position_found;
+// bool block_number_found;
+#endif
+ };
+
+ class CuePoint
+ {
+ public:
+ CuePoint()
+#ifdef WA_VALIDATE
+ :
+ cue_time_found(false)
+#endif
+ {
+ cue_time = 0;
+ }
+ CueTrackPosition *GetPosition(uint64_t track);
+ uint64_t cue_time;
+ typedef std::map<uint64_t, CueTrackPosition*> CueTrackPositions; // keyed on track number
+ CueTrackPositions cue_track_positions;
+#ifdef WA_VALIDATE
+ bool cue_time_found;
+#endif
+ };
+
+ class Cues
+ {
+ public:
+ enum
+ {
+ SEEK_WHATEVER=0,
+ SEEK_FORWARD=1,
+ SEEK_BACKWARD=2,
+ };
+ CuePoint *GetCuePoint(uint64_t when, uint64_t current_time=0, int seek_direction=SEEK_WHATEVER);
+ typedef std::map<uint64_t, CuePoint*> CuePoints; // use Map on cue_time to ensure order
+ CuePoints cue_points;
+ };
+ uint64_t ReadCues(MKVReader *reader, uint64_t size, nsmkv::Cues &cues);
+}