6 #include "../generictagfield.h" 7 #include "../tagvalue.h" 8 #include "../statusprovider.h" 10 #include <c++utilities/io/binaryreader.h> 11 #include <c++utilities/io/binarywriter.h> 12 #include <c++utilities/conversion/stringconversion.h> 28 void make(IoUtilities::BinaryWriter &writer);
30 const std::unique_ptr<char[]> &data()
const;
31 uint32 dataSize()
const;
32 uint32 requiredSize()
const;
39 std::unique_ptr<char[]> m_data;
41 uint32 m_decompressedSize;
42 uint32 m_requiredSize;
74 return m_requiredSize;
106 Id3v2Frame(
const identifierType &
id,
const TagValue &value,
const byte group = 0,
const int16 flag = 0);
109 void parse(IoUtilities::BinaryReader &reader,
const uint32
version,
const uint32 maximalSize = 0);
111 void make(IoUtilities::BinaryWriter &writer,
const uint32
version);
114 bool isAdditionalTypeInfoUsed()
const;
115 bool isValid()
const;
116 bool hasPaddingReached()
const;
117 std::string frameIdString()
const;
119 void setFlag(uint16 value);
120 uint32 totalSize()
const;
121 uint32 dataSize()
const;
122 bool toDiscardWhenUnknownAndTagIsAltered()
const;
123 bool toDiscardWhenUnknownAndFileIsAltered()
const;
124 bool isReadOnly()
const;
125 bool isCompressed()
const;
126 bool isEncrypted()
const;
127 bool hasGroupInformation()
const;
128 bool isUnsynchronized()
const;
129 bool hasDataLengthIndicator()
const;
131 void setGroup(byte value);
132 int32 parsedVersion()
const;
133 bool supportsNestedFields()
const;
137 std::tuple<const char *, size_t, const char *> parseSubstring(
const char *buffer, std::size_t maxSize,
TagTextEncoding &encoding,
bool addWarnings =
false);
138 std::string parseString(
const char *buffer, std::size_t maxSize,
TagTextEncoding &encoding,
bool addWarnings =
false);
139 std::u16string parseWideString(
const char *buffer, std::size_t dataSize,
TagTextEncoding &encoding,
bool addWarnings =
false);
140 void parseLegacyPicture(
const char *buffer, std::size_t maxSize,
TagValue &tagValue, byte &typeInfo);
141 void parsePicture(
const char *buffer, std::size_t maxSize,
TagValue &tagValue, byte &typeInfo);
142 void parseComment(
const char *buffer, std::size_t maxSize,
TagValue &tagValue);
143 void parseBom(
const char *buffer, std::size_t maxSize,
TagTextEncoding &encoding);
148 void makeString(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const std::string &value,
TagTextEncoding encoding);
149 void makeEncodingAndData(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
TagTextEncoding encoding,
const char *data, std::size_t m_dataSize);
150 void makeLegacyPicture(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &picture, byte typeInfo);
151 void makePicture(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &picture, byte typeInfo);
152 void makePictureConsideringVersion(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &picture, byte typeInfo, byte
version);
153 void makeCommentConsideringVersion(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &
comment, byte
version);
154 void makeComment(std::unique_ptr<
char[]> &buffer, uint32 &bufferSize,
const TagValue &
comment);
156 static identifierType fieldIdFromString(
const char *idString, std::size_t idStringSize = std::string::npos);
157 static std::string fieldIdToString(identifierType
id);
165 uint32 m_parsedVersion;
184 return !(id() == 0 || value().isEmpty() || m_padding);
241 return m_flag & 0x8000;
249 return m_flag & 0x4000;
257 return m_flag & 0x2000;
265 return m_parsedVersion >= 4 ? m_flag & 0x8 : m_flag & 0x80;
274 return m_parsedVersion >= 4 ? m_flag & 0x4 : m_flag & 0x40;
282 return m_parsedVersion >= 4 ? m_flag & 0x40 : m_flag & 0x20;
290 return m_parsedVersion >= 4 ? m_flag & 0x2 :
false;
298 return m_parsedVersion >= 4 ? m_flag & 0x1 : isCompressed();
323 return m_parsedVersion;
339 switch(idStringSize != std::string::npos ? idStringSize : std::strlen(idString)) {
341 return ConversionUtilities::BE::toUInt24(idString);
343 return ConversionUtilities::BE::toUInt32(idString);
345 throw ConversionUtilities::ConversionException(
"ID3v2 ID must be 3 or 4 chars");
359 #endif // ID3V2FRAME_H
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.