tagparser/ogg/oggcontainer.h

77 lines
1.8 KiB
C
Raw Normal View History

2015-04-22 19:22:01 +02:00
#ifndef MEDIA_OGGCONTAINER_H
#define MEDIA_OGGCONTAINER_H
2015-09-06 19:57:33 +02:00
#include "./oggpage.h"
#include "./oggstream.h"
#include "./oggiterator.h"
2015-04-22 19:22:01 +02:00
2015-09-06 19:57:33 +02:00
#include "../vorbis/vorbiscomment.h"
2015-04-22 19:22:01 +02:00
2015-09-06 19:57:33 +02:00
#include "../genericcontainer.h"
2015-04-22 19:22:01 +02:00
#include <unordered_map>
#include <tuple>
namespace Media {
class MediaFileInfo;
class LIB_EXPORT OggContainer : public GenericContainer<MediaFileInfo, VorbisComment, OggStream, OggPage>
{
friend class OggStream;
public:
OggContainer(MediaFileInfo &fileInfo, uint64 startOffset);
~OggContainer();
bool isChecksumValidationEnabled() const;
void setChecksumValidationEnabled(bool enabled);
2015-10-06 22:39:18 +02:00
void reset();
2015-04-22 19:22:01 +02:00
2016-03-22 22:52:36 +01:00
VorbisComment *createTag(const TagTarget &target);
VorbisComment *tag(std::size_t index);
std::size_t tagCount() const;
bool removeTag(Tag *tag);
void removeAllTags();
2015-04-22 19:22:01 +02:00
protected:
void internalParseHeader();
void internalParseTags();
void internalParseTracks();
void internalMakeFile();
private:
2016-03-22 22:52:36 +01:00
void ariseComment(std::size_t pageIndex, std::size_t segmentIndex, GeneralMediaFormat mediaFormat = GeneralMediaFormat::Vorbis);
2015-04-22 19:22:01 +02:00
std::unordered_map<uint32, std::vector<std::unique_ptr<OggStream> >::size_type> m_streamsBySerialNo;
2015-08-16 23:39:42 +02:00
2015-04-22 19:22:01 +02:00
OggIterator m_iterator;
bool m_validateChecksums;
};
/*!
* \brief Returns whether checksum validation is enabled.
*
* If checksum validation is enabled, the parser will validate the OGG pages by
* checking the CRC32 checksum.
*
* \sa setChecksumValidationEnabled()
*/
inline bool OggContainer::isChecksumValidationEnabled() const
{
return m_validateChecksums;
}
/*!
* \brief Sets whether checksum validation is enabled.
* \sa isChecksumValidationEnabled()
*/
inline void OggContainer::setChecksumValidationEnabled(bool enabled)
{
m_validateChecksums = enabled;
}
}
#endif // MEDIA_OGGCONTAINER_H