Tag Parser  9.1.0
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  bool updateSize(EbmlElement *element, int shift);
79 
80  EbmlElement *m_cuesElement;
81  std::unordered_map<EbmlElement *, MatroskaOffsetStates> m_offsets;
82  std::unordered_map<EbmlElement *, MatroskaReferenceOffsetPair> m_relativeOffsets;
83  std::unordered_map<EbmlElement *, std::uint64_t> m_sizes;
84 };
85 
92  : m_cuesElement(nullptr)
93 {
94 }
95 
102 {
103  return m_cuesElement;
104 }
105 
110 {
111  m_cuesElement = nullptr;
112  m_offsets.clear();
113  m_sizes.clear();
114 }
115 
116 } // namespace TagParser
117 
118 #endif // TAG_PARSER_MATROSKACUES_H
TagParser::MatroskaOffsetStates::initialValue
constexpr std::uint64_t initialValue() const
Definition: matroskacues.h:39
TagParser::MatroskaCuePositionUpdater::clear
void clear()
Resets the object to its initial state.
Definition: matroskacues.h:109
TagParser::MatroskaCuePositionUpdater::MatroskaCuePositionUpdater
MatroskaCuePositionUpdater()
Creates a new MatroskaCuePositionUpdater.
Definition: matroskacues.h:91
TagParser::MatroskaReferenceOffsetPair
The MatroskaReferenceOffsetPair holds an offset within a Matroska file plus the reference offset.
Definition: matroskacues.h:44
TagParser::Diagnostics
The Diagnostics class is a container for DiagMessage.
Definition: diagnostics.h:156
TagParser
Contains all classes and functions of the TagInfo library.
Definition: aaccodebook.h:10
TagParser::MatroskaCuePositionUpdater
The MatroskaCuePositionUpdater class helps to rewrite the "Cues"-element with shifted positions.
Definition: matroskacues.h:64
TagParser::MatroskaReferenceOffsetPair::MatroskaReferenceOffsetPair
constexpr MatroskaReferenceOffsetPair(std::uint64_t referenceOffset, std::uint64_t initialValue)
Definition: matroskacues.h:53
TagParser::MatroskaOffsetStates::MatroskaOffsetStates
constexpr MatroskaOffsetStates(std::uint64_t initialValue)
Definition: matroskacues.h:23
TagParser::EbmlElement
The EbmlElement class helps to parse EBML files such as Matroska files.
Definition: ebmlelement.h:31
TagParser::MatroskaReferenceOffsetPair::referenceOffset
constexpr std::uint64_t referenceOffset() const
Definition: matroskacues.h:59
TagParser::MatroskaOffsetStates::currentValue
constexpr std::uint64_t currentValue() const
Definition: matroskacues.h:29
TagParser::MatroskaCuePositionUpdater::cuesElement
EbmlElement * cuesElement() const
Returns the "Cues"-element specified when calling the parse() method.
Definition: matroskacues.h:101
TAG_PARSER_EXPORT
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
ebmlelement.h
TagParser::MatroskaOffsetStates
The MatroskaOffsetStates holds an offset within a Matroska file.
Definition: matroskacues.h:11
TagParser::MatroskaOffsetStates::update
void update(std::uint64_t newValue)
Definition: matroskacues.h:34