Tag Parser 12.3.1
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
Loading...
Searching...
No Matches
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
13struct TAG_PARSER_EXPORT Mp4ExtendedFieldId {
14 Mp4ExtendedFieldId(std::string_view mean, std::string_view name, bool updateOnly = false);
15 Mp4ExtendedFieldId(KnownField field);
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)
34 , updateOnly(updateOnly)
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
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";
105 static constexpr TagTextEncoding defaultTextEncoding = TagTextEncoding::Utf8;
106 bool canEncodingBeUsed(TagTextEncoding encoding) const override;
107
108 bool supportsField(KnownField field) const override;
109 using FieldMapBasedTag<Mp4Tag>::value;
110 const TagValue &value(KnownField value) const override;
111 using FieldMapBasedTag<Mp4Tag>::values;
112 std::vector<const TagValue *> values(KnownField field) const override;
113 const TagValue &value(std::string_view mean, std::string_view name) const;
114 using FieldMapBasedTag<Mp4Tag>::setValue;
115 bool setValue(KnownField field, const TagValue &value) override;
116 using FieldMapBasedTag<Mp4Tag>::setValues;
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);
119 using FieldMapBasedTag<Mp4Tag>::hasField;
120 bool hasField(KnownField value) const override;
121 bool supportsMultipleValues(KnownField) const override;
122
123 void parse(Mp4Atom &metaAtom, Diagnostics &diag);
124 Mp4TagMaker prepareMaking(Diagnostics &diag);
125 void make(std::ostream &stream, Diagnostics &diag);
126
127protected:
128 IdentifierType internallyGetFieldId(KnownField field) const;
129 KnownField internallyGetKnownField(const IdentifierType &id) const;
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.
The FieldMapBasedTag provides a generic implementation of Tag which stores the tag fields using std::...
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.
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.
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
Implementation of TagParser::Tag for the MP4 container.
bool supportsMultipleValues(KnownField) const override
Returns false for all fields (for now).
Definition mp4tag.h:155
bool supportsField(KnownField field) const override
Returns an indication whether the specified field is supported by the tag.
Definition mp4tag.h:140
Mp4Tag()
Constructs a new tag.
Definition mp4tag.h:136
The TagValue class wraps values of different types.
#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:29
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
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