1#ifndef TAG_PARSER_MEDIAINFO_H
2#define TAG_PARSER_MEDIAINFO_H
11#include <unordered_set>
14#include <c++utilities/misc/flagenumclass.h>
24class MatroskaContainer;
31class AbortableProgressFeedback;
34enum class TagType :
unsigned int;
103 std::string_view mimeType()
const;
104 std::uint64_t containerOffset()
const;
105 std::uint64_t paddingSize()
const;
110 std::vector<AbstractChapter *> chapters()
const;
111 bool areChaptersSupported()
const;
114 std::vector<AbstractAttachment *> attachments()
const;
115 bool areAttachmentsSupported()
const;
118 std::size_t trackCount()
const;
119 std::vector<AbstractTrack *> tracks()
const;
121 CppUtilities::TimeSpan duration()
const;
122 double overallAverageBitrate()
const;
124 std::string technicalSummary()
const;
125 bool areTracksSupported()
const;
128 bool hasId3v1Tag()
const;
129 bool hasId3v2Tag()
const;
130 bool hasAnyTag()
const;
132 const std::vector<std::unique_ptr<Id3v2Tag>> &id3v2Tags()
const;
133 void tags(std::vector<Tag *> &tags)
const;
134 std::vector<Tag *> tags()
const;
135 void parsedTags(std::vector<Tag *> &tags)
const;
136 std::vector<Tag *> parsedTags()
const;
138 const std::vector<std::unique_ptr<MatroskaTag>> &matroskaTags()
const;
140 bool areTagsSupported()
const;
144 bool removeId3v1Tag();
147 bool removeAllId3v2Tags();
149 bool removeTag(
Tag *tag);
150 void removeAllTags();
151 void mergeId3v2Tags();
155 bool removeVorbisComment();
156 void clearParsingResults();
159 const std::string &backupDirectory()
const;
160 void setBackupDirectory(std::string_view backupDirectory);
161 void setBackupDirectory(std::string &&backupDirectory);
162 const std::string &saveFilePath()
const;
163 void setSaveFilePath(std::string_view saveFilePath);
164 void setSaveFilePath(std::string &&saveFilePath);
165 const std::string &writingApplication()
const;
166 void setWritingApplication(std::string_view writingApplication);
169 bool isForcingFullParse()
const;
170 void setForceFullParse(
bool forceFullParse);
171 bool isForcingRewrite()
const;
172 void setForceRewrite(
bool forceRewrite);
173 std::size_t minPadding()
const;
174 void setMinPadding(std::size_t minPadding);
175 std::size_t maxPadding()
const;
176 void setMaxPadding(std::size_t maxPadding);
177 std::size_t preferredPadding()
const;
178 void setPreferredPadding(std::size_t preferredPadding);
181 bool forceTagPosition()
const;
182 void setForceTagPosition(
bool forceTagPosition);
185 bool forceIndexPosition()
const;
186 void setForceIndexPosition(
bool forceTagPosition);
189 void invalidated()
override;
200 std::streamoff m_containerOffset;
201 std::uint64_t m_paddingSize;
202 std::vector<std::streamoff> m_actualId3v2TagOffsets;
203 std::unique_ptr<AbstractContainer> m_container;
208 std::unique_ptr<AbstractTrack> m_singleTrack;
212 std::unique_ptr<Id3v1Tag> m_id3v1Tag;
213 std::vector<std::unique_ptr<Id3v2Tag>> m_id3v2Tags;
220 std::string m_backupDirectory;
221 std::string m_saveFilePath;
222 std::string m_writingApplication;
223 std::size_t m_minPadding;
224 std::size_t m_maxPadding;
225 std::size_t m_preferredPadding;
236 return m_containerParsingStatus;
247 return m_containerFormat;
285 return static_cast<std::uint64_t
>(m_containerOffset);
293 return m_paddingSize;
301 return m_tagsParsingStatus;
309 return m_tracksParsingStatus;
322 return m_singleTrack ? 1 : (m_container ? m_container->trackCount() : 0);
330 return m_chaptersParsingStatus;
338 return m_attachmentsParsingStatus;
346 return m_id3v1Tag !=
nullptr;
354 return !m_id3v2Tags.empty();
366 return m_id3v1Tag.get();
388 return m_backupDirectory;
415 return m_saveFilePath;
452 return m_writingApplication;
476 return m_container.get();
484 return m_fileHandlingFlags;
492 m_fileHandlingFlags = flags;
597 return m_preferredPadding;
617 return m_tagPosition;
662 return m_indexPosition;
The AbortableProgressFeedback class provides feedback about an ongoing operation via callbacks.
The AbstractContainer class provides an interface and common functionality to parse and make a certai...
The BasicFileInfo class provides basic file information such as file name, extension,...
The Diagnostics class is a container for DiagMessage.
Implementation of TagParser::Tag for ID3v1 tags.
Implementation of TagParser::Tag for ID3v2 tags.
Implementation of TagParser::Tag for the MP4 container.
The Tag class is used to store, read and write tag information.
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
Contains all classes and functions of the TagInfo library.
TAG_PARSER_EXPORT std::string_view containerFormatSubversion(ContainerFormat containerFormat)
Returns the subversion of the container format as C-style string.
TAG_PARSER_EXPORT std::string_view containerFormatAbbreviation(ContainerFormat containerFormat, MediaType mediaType=MediaType::Unknown, unsigned int version=0)
Returns the abbreviation of the container format as C-style string considering the specified media ty...
TAG_PARSER_EXPORT std::string_view containerFormatName(ContainerFormat containerFormat)
Returns the name of the specified container format as C-style string.
TagType
Specifies the tag type.
ParsingStatus
The ParsingStatus enum specifies whether a certain part of the file (tracks, tags,...
MediaType
The MediaType enum specifies the type of media data (audio, video, text, ...).
MediaFileStructureFlags
The MediaFileStructureFlags enum specifies flags which describing the structure of a media file.
ContainerFormat
Specifies the container format.
MediaFileHandlingFlags
The MediaFileHandlingFlags enum specifies flags which controls the behavior of MediaFileInfo objects.
@ NormalizeKnownTagFieldIds
@ PreserveRawTimingValues
CPP_UTILITIES_MARK_FLAG_ENUM_CLASS(TagParser, TagParser::TagCreationFlags)
The TagSettings struct contains settings which can be passed to MediaFileInfo::createAppropriateTags(...