diff options
author | Jean-Francois Mauguit <jfmauguit@mac.com> | 2024-09-24 09:03:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-24 09:03:25 -0400 |
commit | bab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/nsmkv/Cues.h | |
parent | 4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff) | |
parent | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff) | |
download | winamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz |
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/nsmkv/Cues.h')
-rw-r--r-- | Src/nsmkv/Cues.h | 76 |
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); +} |