Tag Parser 12.5.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
matroskatag.h
Go to the documentation of this file.
1#ifndef TAG_PARSER_MATROSKATAG_H
2#define TAG_PARSER_MATROSKATAG_H
3
5#include "./matroskatagid.h"
6
7#include "../fieldbasedtag.h"
8
9namespace TagParser {
10
11class EbmlElement;
12class MatroskaTag;
13
17enum class MatroskaTagFlags : std::uint64_t {
18 None = 0x0,
20};
21
22} // namespace TagParser
23
25
26namespace TagParser {
27
28class TAG_PARSER_EXPORT MatroskaTagMaker {
29 friend class MatroskaTag;
30
31public:
32 void make(std::ostream &stream) const;
33 const MatroskaTag &tag() const;
34 std::uint64_t requiredSize() const;
35
36private:
37 MatroskaTagMaker(MatroskaTag &tag, Diagnostics &diag);
38
39 MatroskaTag &m_tag;
40 std::uint64_t m_targetsSize;
41 std::uint64_t m_simpleTagsSize;
42 std::vector<MatroskaTagFieldMaker> m_maker;
43 std::uint64_t m_tagSize;
44 std::uint64_t m_totalSize;
45};
46
51{
52 return m_tag;
53}
54
58inline std::uint64_t MatroskaTagMaker::requiredSize() const
59{
60 return m_totalSize;
61}
62
67public:
69 using Compare = std::less<typename FieldType::IdentifierType>;
70};
71
72class TAG_PARSER_EXPORT MatroskaTag final : public FieldMapBasedTag<MatroskaTag> {
73 friend class FieldMapBasedTag<MatroskaTag>;
74
75public:
77
79 static constexpr std::string_view tagName = "Matroska tag";
81 bool canEncodingBeUsed(TagTextEncoding encoding) const override;
82 bool supportsTarget() const override;
83 bool supportsMultipleValues(KnownField field) const override;
84 TagTargetLevel targetLevel() const override;
85
86 void parse(EbmlElement &tagElement, Diagnostics &diag);
87 void parse2(EbmlElement &tagElement, MatroskaTagFlags flags, Diagnostics &diag);
89 void make(std::ostream &stream, Diagnostics &diag);
90
91protected:
94
95private:
96 void parseTargets(EbmlElement &targetsElement, Diagnostics &diag);
97};
98
103{
104}
105
107{
108 return true;
109}
110
117{
118 return true;
119}
120
122{
123 return matroskaTagTargetLevel(m_target.level());
124}
125
137{
138 return MatroskaTagMaker(*this, diag);
139}
140
148inline void MatroskaTag::make(std::ostream &stream, Diagnostics &diag)
149{
150 prepareMaking(diag).make(stream);
151}
152
154{
155 return encoding == TagTextEncoding::Utf8;
156}
157
158} // namespace TagParser
159
160#endif // TAG_PARSER_MATROSKATAG_H
The Diagnostics class is a container for DiagMessage.
The EbmlElement class helps to parse EBML files such as Matroska files.
Definition ebmlelement.h:32
std::less< typename FieldType::IdentifierType > Compare
Definition matroskatag.h:69
Defines traits for the specified ImplementationType.
typename FieldMapBasedTagTraits< MatroskaTag >::FieldType::IdentifierType IdentifierType
The MatroskaTagField class is used by MatroskaTag to store the fields.
The MatroskaTagMaker class helps writing Matroska "Tag"-elements storing tag information.
Definition matroskatag.h:28
std::uint64_t requiredSize() const
Returns the number of bytes which will be written when making the tag.
Definition matroskatag.h:58
const MatroskaTag & tag() const
Returns the associated tag.
Definition matroskatag.h:50
void make(std::ostream &stream) const
Saves the tag (specified when constructing the object) to the specified stream (makes a "Tag"-element...
Implementation of TagParser::Tag for the Matroska container.
Definition matroskatag.h:72
static constexpr TagTextEncoding defaultTextEncoding
Definition matroskatag.h:80
bool supportsTarget() const override
Returns an indication whether a target is supported by the tag.
void parse(EbmlElement &tagElement, Diagnostics &diag)
Parses tag information from the specified tagElement.
bool supportsMultipleValues(KnownField field) const override
Allows multiple values for all fields.
MatroskaTagMaker prepareMaking(Diagnostics &diag)
Prepares making.
bool canEncodingBeUsed(TagTextEncoding encoding) const override
Returns an indication whether the specified encoding can be used to provide string values for the tag...
void parse2(EbmlElement &tagElement, MatroskaTagFlags flags, Diagnostics &diag)
Parses tag information from the specified tagElement.
TagTargetLevel targetLevel() const override
Returns the name of the current tag target level.
void make(std::ostream &stream, Diagnostics &diag)
Writes tag information to the specified stream (makes a "Tag"-element).
static constexpr TagType tagType
Definition matroskatag.h:78
IdentifierType internallyGetFieldId(KnownField field) const
KnownField internallyGetKnownField(const IdentifierType &id) const
static constexpr std::string_view tagName
Definition matroskatag.h:79
MatroskaTag()
Constructs a new tag.
TagTarget m_target
Definition tag.h:219
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
Definition global.h:14
Contains all classes and functions of the TagInfo library.
Definition aaccodebook.h:10
KnownField
Specifies the field.
Definition tag.h:37
TagTargetLevel
The TagTargetLevel enum specifies tag target levels.
Definition tagtarget.h:16
TagTextEncoding
Specifies the text encoding.
Definition tagvalue.h:29
MatroskaTagFlags
The MatroskaTagFlags enum specifies flags which controls parsing and making of Matroska tags.
Definition matroskatag.h:17
constexpr TAG_PARSER_EXPORT TagTargetLevel matroskaTagTargetLevel(std::uint64_t targetLevelValue)
Returns the general TagTargetLevel for the Matroska specific targetLevelValue.
TagType
Specifies the tag type.
Definition tagtype.h:11
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(TagParser, TagParser::TagCreationFlags)