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
mp4tag.h
Go to the documentation of this file.
1#ifndef TAG_PARSER_MP4TAG_H
2#define TAG_PARSER_MP4TAG_H
3
4#include "./mp4tagfield.h"
5
6#include "../fieldbasedtag.h"
7
8namespace TagParser {
9
10class Mp4Atom;
11class Mp4Tag;
12
14 Mp4ExtendedFieldId(std::string_view mean, std::string_view name, bool updateOnly = false);
16
17 operator bool() const;
18 bool matches(const Mp4TagField &field) const;
19
21 std::string_view mean;
23 std::string_view name;
25 bool updateOnly = false;
26};
27
31inline Mp4ExtendedFieldId::Mp4ExtendedFieldId(std::string_view mean, std::string_view name, bool updateOnly)
32 : mean(mean)
33 , name(name)
35{
36}
37
41inline Mp4ExtendedFieldId::operator bool() const
42{
43 return !mean.empty() && !name.empty();
44}
45
49inline bool Mp4ExtendedFieldId::matches(const Mp4TagField &field) const
50{
51 return field.mean() == mean && field.name() == name;
52}
53
54class TAG_PARSER_EXPORT Mp4TagMaker {
55 friend class Mp4Tag;
56
57public:
58 void make(std::ostream &stream, Diagnostics &diag);
59 const Mp4Tag &tag() const;
60 std::uint64_t requiredSize() const;
61
62private:
63 Mp4TagMaker(Mp4Tag &tag, Diagnostics &diag);
64
65 Mp4Tag &m_tag;
66 std::vector<Mp4TagFieldMaker> m_maker;
67 std::uint64_t m_metaSize;
68 std::uint64_t m_ilstSize;
69 bool m_omitPreDefinedGenre;
70};
71
75inline const Mp4Tag &Mp4TagMaker::tag() const
76{
77 return m_tag;
78}
79
83inline std::uint64_t Mp4TagMaker::requiredSize() const
84{
85 return m_metaSize;
86}
87
92public:
94 using Compare = std::less<typename FieldType::IdentifierType>;
95};
96
97class TAG_PARSER_EXPORT Mp4Tag final : public FieldMapBasedTag<Mp4Tag> {
98 friend class FieldMapBasedTag<Mp4Tag>;
99
100public:
101 Mp4Tag();
102
103 static constexpr TagType tagType = TagType::Mp4Tag;
104 static constexpr std::string_view tagName = "MP4/iTunes tag";
106 bool canEncodingBeUsed(TagTextEncoding encoding) const override;
107
108 bool supportsField(KnownField field) const override;
110 const TagValue &value(KnownField value) const override;
112 std::vector<const TagValue *> values(KnownField field) const override;
113 const TagValue &value(std::string_view mean, std::string_view name) const;
115 bool setValue(KnownField field, const TagValue &value) override;
117 bool setValues(KnownField field, const std::vector<TagValue> &values) override;
118 bool setValue(std::string_view mean, std::string_view name, const TagValue &value);
120 bool hasField(KnownField value) const override;
121 bool supportsMultipleValues(KnownField) const override;
122
123 void parse(Mp4Atom &metaAtom, Diagnostics &diag);
125 void make(std::ostream &stream, Diagnostics &diag);
126
127protected:
130 void internallyGetValuesFromField(const FieldType &field, std::vector<const TagValue *> &values) const;
131};
132
137{
138}
139
140inline bool Mp4Tag::supportsField(KnownField field) const
141{
142 switch (field) {
144 return true;
145 default:
147 }
148}
149
156{
157 return false;
158}
159
160} // namespace TagParser
161
162#endif // TAG_PARSER_MP4TAG_H
The Diagnostics class is a container for DiagMessage.
std::less< typename FieldType::IdentifierType > Compare
Definition mp4tag.h:94
Defines traits for the specified ImplementationType.
typename FieldMapBasedTagTraits< Mp4Tag >::FieldType::IdentifierType IdentifierType
typename FieldMapBasedTagTraits< Mp4Tag >::FieldType FieldType
bool supportsField(KnownField field) const
Returns an indication whether the specified field is supported by the tag.
The Mp4Atom class helps to parse MP4 files.
Definition mp4atom.h:38
The Mp4TagField class is used by Mp4Tag to store the fields.
const std::string & name() const
Returns the "name" for "extended" fields.
const std::string & mean() const
Returns the "mean" for "extended" fields.
The Mp4TagMaker class helps writing MP4 tags.
Definition mp4tag.h:54
const Mp4Tag & tag() const
Returns the associated tag.
Definition mp4tag.h:75
std::uint64_t requiredSize() const
Returns the number of bytes which will be written when making the tag.
Definition mp4tag.h:83
void make(std::ostream &stream, Diagnostics &diag)
Saves the tag (specified when constructing the object) to the specified stream.
Definition mp4tag.cpp:512
friend class Mp4Tag
Definition mp4tag.h:55
Implementation of TagParser::Tag for the MP4 container.
Definition mp4tag.h:97
std::vector< const TagValue * > values(KnownField field) const override
Returns the values of the specified field.
Definition mp4tag.cpp:85
bool supportsMultipleValues(KnownField) const override
Returns false for all fields (for now).
Definition mp4tag.h:155
const TagValue & value(KnownField value) const override
Returns the value of the specified field.
Definition mp4tag.cpp:59
bool hasField(KnownField value) const override
Returns an indication whether the specified field is present.
Definition mp4tag.cpp:365
bool setValue(KnownField field, const TagValue &value) override
Assigns the given value to the specified field.
Definition mp4tag.cpp:287
IdentifierType internallyGetFieldId(KnownField field) const
Definition mp4tag.cpp:119
bool supportsField(KnownField field) const override
Returns an indication whether the specified field is supported by the tag.
Definition mp4tag.h:140
static constexpr std::string_view tagName
Definition mp4tag.h:104
Mp4TagMaker prepareMaking(Diagnostics &diag)
Prepares making.
Definition mp4tag.cpp:448
bool setValues(KnownField field, const std::vector< TagValue > &values) override
Assigns the given values to the field with the specified id.
Definition mp4tag.cpp:311
Mp4Tag()
Constructs a new tag.
Definition mp4tag.h:136
void parse(Mp4Atom &metaAtom, Diagnostics &diag)
Parses tag information from the specified metaAtom.
Definition mp4tag.cpp:382
void make(std::ostream &stream, Diagnostics &diag)
Writes tag information to the specified stream.
Definition mp4tag.cpp:459
bool canEncodingBeUsed(TagTextEncoding encoding) const override
Returns an indication whether the specified encoding can be used to provide string values for the tag...
Definition mp4tag.cpp:47
KnownField internallyGetKnownField(const IdentifierType &id) const
Definition mp4tag.cpp:195
static constexpr TagTextEncoding defaultTextEncoding
Definition mp4tag.h:105
void internallyGetValuesFromField(const FieldType &field, std::vector< const TagValue * > &values) const
Adds values from additional data atoms as well.
Definition mp4tag.cpp:275
static constexpr TagType tagType
Definition mp4tag.h:103
The TagValue class wraps values of different types.
Definition tagvalue.h:147
#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
TagTextEncoding
Specifies the text encoding.
Definition tagvalue.h:29
TagType
Specifies the tag type.
Definition tagtype.h:11
bool matches(const Mp4TagField &field) const
Returns whether the current parameter match the specified field.
Definition mp4tag.h:49
bool updateOnly
Whether only existing fields should be updated but no new extended field should be created.
Definition mp4tag.h:25
std::string_view mean
mean parameter, usually Mp4TagExtendedMeanIds::iTunes
Definition mp4tag.h:21
Mp4ExtendedFieldId(std::string_view mean, std::string_view name, bool updateOnly=false)
Constructs a new instance with the specified parameter.
Definition mp4tag.h:31
std::string_view name
name parameter
Definition mp4tag.h:23