Tag Parser
9.1.0
C++ library for reading and writing MP4 (iTunes), ID3, Vorbis, Opus, FLAC and Matroska tags
|
Go to the documentation of this file. 1 #ifndef TAG_PARSER_OGGITERATOR_H
2 #define TAG_PARSER_OGGITERATOR_H
13 OggIterator(std::istream &stream, std::uint64_t startOffset, std::uint64_t streamSize);
15 void clear(std::istream &stream, std::uint64_t startOffset, std::uint64_t streamSize);
16 std::istream &stream();
17 void setStream(std::istream &stream);
18 std::uint64_t startOffset()
const;
19 std::uint64_t streamSize()
const;
24 void previousSegment();
25 const std::vector<OggPage> &pages()
const;
26 const OggPage ¤tPage()
const;
27 std::uint64_t currentPageOffset()
const;
28 std::vector<OggPage>::size_type currentPageIndex()
const;
29 void setPageIndex(std::vector<OggPage>::size_type index);
30 void setSegmentIndex(std::vector<std::uint32_t>::size_type index);
31 std::vector<std::uint32_t>::size_type currentSegmentIndex()
const;
32 std::uint64_t currentSegmentOffset()
const;
33 std::uint64_t currentCharacterOffset()
const;
34 std::uint64_t tellg()
const;
35 std::uint32_t currentSegmentSize()
const;
36 void setFilter(std::uint32_t streamSerialId);
38 bool isLastPageFetched()
const;
39 void read(
char *buffer, std::size_t count);
40 size_t readAll(
char *buffer, std::size_t max);
41 void ignore(std::size_t count = 1);
42 bool bytesRemaining(std::size_t atLeast)
const;
43 bool resyncAt(std::uint64_t offset);
45 operator bool()
const;
53 bool matchesFilter(
const OggPage &page);
55 std::istream *m_stream;
56 std::uint64_t m_startOffset;
57 std::uint64_t m_streamSize;
58 std::vector<OggPage> m_pages;
59 std::vector<OggPage>::size_type m_page;
60 std::vector<std::uint32_t>::size_type m_segment;
61 std::uint64_t m_offset;
62 std::uint32_t m_bytesRead;
64 std::uint32_t m_idFilter;
72 , m_startOffset(startOffset)
73 , m_streamSize(streamSize)
78 , m_hasIdFilter(false)
108 return m_startOffset;
133 return m_pages[m_page];
142 return m_pages[m_page].startOffset();
155 inline OggIterator::operator bool()
const
157 return m_page < m_pages.size() && m_segment < m_pages[m_page].segmentSizes().size();
174 const OggPage &page = m_pages[m_page = index];
186 const OggPage &page = m_pages[m_page];
187 m_offset = page.
dataOffset(m_segment = index);
213 return m_offset + m_bytesRead;
231 return m_pages[m_page].segmentSizes()[m_segment];
244 m_hasIdFilter =
true;
245 m_idFilter = streamSerialId;
254 m_hasIdFilter =
false;
262 return (m_pages.empty() ? m_startOffset : m_pages.back().startOffset() + m_pages.back().totalSize()) >= m_streamSize;
314 inline bool OggIterator::matchesFilter(
const OggPage &page)
321 #endif // TAG_PARSER_OGGITERATOR_H
void setPageIndex(std::vector< OggPage >::size_type index)
Sets the current page index.
std::uint32_t streamSerialNumber() const
Returns the stream serial number.
The OggIterator class helps iterating through all segments of an OGG bitstream.
std::uint64_t currentSegmentOffset() const
Returns the start offset of the current segment in the input stream if the iterator is valid; otherwi...
OggIterator & operator++()
Increments the current position by one segment if the iterator is valid; otherwise nothing happens.
std::uint64_t streamSize() const
Returns the stream size (which has been specified when constructing the iterator).
bool isLastPageFetched() const
Returns whether the last page has already been fetched.
Contains all classes and functions of the TagInfo library.
std::vector< OggPage >::size_type currentPageIndex() const
Returns the index of the current page if the iterator is valid; otherwise an undefined index is retur...
OggIterator & operator--()
Decrements the current position by one segment if the iterator is valid; otherwise nothing happens.
void removeFilter()
Removes a previously set filter.
void setFilter(std::uint32_t streamSerialId)
Allows to filter pages by the specified streamSerialId.
std::uint64_t startOffset() const
Returns the start offset of the page.
std::uint32_t headerSize() const
Returns the header size in byte.
std::uint64_t dataOffset(std::uint8_t segmentIndex=0) const
Returns the data offset of the segment with the specified segmentIndex.
The OggPage class is used to parse OGG pages.
std::uint64_t currentPageOffset() const
Returns the start offset of the current OGG page.
std::istream & stream()
Returns the stream.
void previousSegment()
Decreases the current position by one segment.
bool bytesRemaining(std::size_t atLeast) const
Returns whether there are atLeast bytes remaining.
std::uint64_t currentCharacterOffset() const
Returns the offset of the current character in the input stream if the iterator is valid; otherwise a...
void setSegmentIndex(std::vector< std::uint32_t >::size_type index)
Sets the current segment index.
void setStream(std::istream &stream)
Sets the stream.
const OggPage & currentPage() const
Returns the current OGG page.
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.
std::vector< std::uint32_t >::size_type currentSegmentIndex() const
Returns the index of the current segment (in the current page) if the iterator is valid; otherwise an...
const std::vector< OggPage > & pages() const
Returns a vector of containing the OGG pages that have been fetched yet.
std::uint64_t startOffset() const
Returns the start offset (which has been specified when constructing the iterator).
std::uint32_t currentSegmentSize() const
Returns the size of the current segment.
void nextSegment()
Increases the current position by one segment.
std::uint64_t tellg() const
Same as currentCharacterOffset(); only provided for compliance with std::istream.
OggIterator(std::istream &stream, std::uint64_t startOffset, std::uint64_t streamSize)
Constructs a new iterator for the specified stream of streamSize bytes at the specified startOffset.