Tag Parser  10.0.1
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
matroskacues.h
Go to the documentation of this file.
1 #ifndef TAG_PARSER_MATROSKACUES_H
2 #define TAG_PARSER_MATROSKACUES_H
3 
4 #include "./ebmlelement.h"
5 
6 #include <ostream>
7 #include <unordered_map>
8 
9 namespace TagParser {
10 
12 public:
13  constexpr MatroskaOffsetStates(std::uint64_t initialValue);
14  constexpr std::uint64_t currentValue() const;
15  void update(std::uint64_t newValue);
16  constexpr std::uint64_t initialValue() const;
17 
18 private:
19  std::uint64_t m_initialValue;
20  std::uint64_t m_currentValue;
21 };
22 
23 constexpr MatroskaOffsetStates::MatroskaOffsetStates(std::uint64_t initialValue)
24  : m_initialValue(initialValue)
25  , m_currentValue(initialValue)
26 {
27 }
28 
29 constexpr std::uint64_t MatroskaOffsetStates::currentValue() const
30 {
31  return m_currentValue;
32 }
33 
34 inline void MatroskaOffsetStates::update(std::uint64_t newValue)
35 {
36  m_currentValue = newValue;
37 }
38 
39 constexpr std::uint64_t MatroskaOffsetStates::initialValue() const
40 {
41  return m_initialValue;
42 }
43 
45 public:
46  constexpr MatroskaReferenceOffsetPair(std::uint64_t referenceOffset, std::uint64_t initialValue);
47  constexpr std::uint64_t referenceOffset() const;
48 
49 private:
50  std::uint64_t m_referenceOffset;
51 };
52 
53 constexpr MatroskaReferenceOffsetPair::MatroskaReferenceOffsetPair(std::uint64_t referenceOffset, std::uint64_t initialValue)
54  : MatroskaOffsetStates(initialValue)
55  , m_referenceOffset(referenceOffset)
56 {
57 }
58 
59 constexpr std::uint64_t MatroskaReferenceOffsetPair::referenceOffset() const
60 {
61  return m_referenceOffset;
62 }
63 
65 public:
67 
68  EbmlElement *cuesElement() const;
69  std::uint64_t totalSize() const;
70 
71  void parse(EbmlElement *cuesElement, Diagnostics &diag);
72  bool updateOffsets(std::uint64_t originalOffset, std::uint64_t newOffset);
73  bool updateRelativeOffsets(std::uint64_t referenceOffset, std::uint64_t originalRelativeOffset, std::uint64_t newRelativeOffset);
74  void make(std::ostream &stream, Diagnostics &diag);
75  void clear();
76 
77 private:
78  struct PairHash {
79  template <class T1, class T2> inline std::size_t operator()(const std::pair<T1, T2> &pair) const
80  {
81  std::size_t seed = 0;
82  seed ^= std::hash<T1>()(pair.first) + 0x9e3779b9;
83  seed ^= std::hash<T2>()(pair.second) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
84  return seed;
85  }
86  };
87 
88  bool updateSize(EbmlElement *element, int shift);
89 
90  EbmlElement *m_cuesElement;
91  std::unordered_map<EbmlElement *, MatroskaOffsetStates> m_offsets;
92  std::unordered_multimap<std::uint64_t, EbmlElement *> m_cueElementByOriginalOffset;
93  std::unordered_map<EbmlElement *, MatroskaReferenceOffsetPair> m_relativeOffsets;
94  std::unordered_multimap<std::pair<std::uint64_t, std::uint64_t>, EbmlElement *, PairHash> m_cueRelativePositionElementByOriginalOffsets;
95  std::unordered_map<EbmlElement *, std::uint64_t> m_sizes;
96 };
97 
104  : m_cuesElement(nullptr)
105 {
106 }
107 
114 {
115  return m_cuesElement;
116 }
117 
122 {
123  m_cuesElement = nullptr;
124  m_offsets.clear();
125  m_sizes.clear();
126 }
127 
128 } // namespace TagParser
129 
130 #endif // TAG_PARSER_MATROSKACUES_H
The Diagnostics class is a container for DiagMessage.
Definition: diagnostics.h:156
The EbmlElement class helps to parse EBML files such as Matroska files.
Definition: ebmlelement.h:32
The MatroskaCuePositionUpdater class helps to rewrite the "Cues"-element with shifted positions.
Definition: matroskacues.h:64
void clear()
Resets the object to its initial state.
Definition: matroskacues.h:121
MatroskaCuePositionUpdater()
Creates a new MatroskaCuePositionUpdater.
Definition: matroskacues.h:103
EbmlElement * cuesElement() const
Returns the "Cues"-element specified when calling the parse() method.
Definition: matroskacues.h:113
The MatroskaOffsetStates holds an offset within a Matroska file.
Definition: matroskacues.h:11
void update(std::uint64_t newValue)
Definition: matroskacues.h:34
constexpr std::uint64_t currentValue() const
Definition: matroskacues.h:29
constexpr std::uint64_t initialValue() const
Definition: matroskacues.h:39
constexpr MatroskaOffsetStates(std::uint64_t initialValue)
Definition: matroskacues.h:23
The MatroskaReferenceOffsetPair holds an offset within a Matroska file plus the reference offset.
Definition: matroskacues.h:44
constexpr std::uint64_t referenceOffset() const
Definition: matroskacues.h:59
constexpr MatroskaReferenceOffsetPair(std::uint64_t referenceOffset, std::uint64_t initialValue)
Definition: matroskacues.h:53
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
Contains all classes and functions of the TagInfo library.
Definition: aaccodebook.h:10