12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #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);
- }
|