#ifndef MEDIA_OGGCONTAINER_H #define MEDIA_OGGCONTAINER_H #include "./oggpage.h" #include "./oggstream.h" #include "./oggiterator.h" #include "../vorbis/vorbiscomment.h" #include "../genericcontainer.h" #include #include namespace Media { class MediaFileInfo; struct LIB_EXPORT VorbisCommentInfo { VorbisCommentInfo(std::vector::size_type firstPageIndex, std::vector::size_type firstSegmentIndex, std::vector::size_type tagIndex, GeneralMediaFormat streamFormat = GeneralMediaFormat::Vorbis); std::vector::size_type firstPageIndex; std::vector::size_type firstSegmentIndex; std::vector::size_type lastPageIndex; std::vector::size_type lastSegmentIndex; std::vector >::size_type tagIndex; GeneralMediaFormat streamFormat; }; inline VorbisCommentInfo::VorbisCommentInfo(std::vector::size_type firstPageIndex, std::vector::size_type firstSegmentIndex, std::vector::size_type tagIndex, GeneralMediaFormat mediaFormat) : firstPageIndex(firstPageIndex), firstSegmentIndex(firstSegmentIndex), lastPageIndex(0), lastSegmentIndex(0), tagIndex(tagIndex), streamFormat(mediaFormat) {} class LIB_EXPORT OggContainer : public GenericContainer { friend class OggStream; public: OggContainer(MediaFileInfo &fileInfo, uint64 startOffset); ~OggContainer(); bool isChecksumValidationEnabled() const; void setChecksumValidationEnabled(bool enabled); void reset(); protected: void internalParseHeader(); void internalParseTags(); void internalParseTracks(); void internalMakeFile(); private: void ariseComment(std::vector::size_type pageIndex, std::vector::size_type segmentIndex, GeneralMediaFormat mediaFormat = GeneralMediaFormat::Vorbis); std::unordered_map >::size_type> m_streamsBySerialNo; /*! * \brief Consists of first page index, first segment index, last page index, last segment index and tag index (in this order). */ std::list m_commentTable; 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