1 #ifndef MEDIA_OGGITERATOR_H 2 #define MEDIA_OGGITERATOR_H 14 OggIterator(std::istream &stream, uint64 startOffset, uint64 streamSize);
16 void clear(std::istream &stream, uint64 startOffset, uint64 streamSize);
17 std::istream &stream();
18 void setStream(std::istream &stream);
19 uint64 startOffset()
const;
20 uint64 streamSize()
const;
25 void previousSegment();
26 const std::vector<OggPage> &pages()
const;
27 const OggPage ¤tPage()
const;
28 std::vector<OggPage>::size_type currentPageIndex()
const;
29 void setPageIndex(std::vector<OggPage>::size_type index);
30 void setSegmentIndex(std::vector<uint32>::size_type index);
31 std::vector<uint32>::size_type currentSegmentIndex()
const;
32 uint64 currentSegmentOffset()
const;
33 uint64 currentCharacterOffset()
const;
35 uint32 currentSegmentSize()
const;
36 void setFilter(uint32 streamSerialId);
38 bool areAllPagesFetched()
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;
44 operator bool()
const;
52 bool matchesFilter(
const OggPage &page);
54 std::istream *m_stream;
57 std::vector<OggPage> m_pages;
58 std::vector<OggPage>::size_type m_page;
59 std::vector<uint32>::size_type m_segment;
71 m_startOffset(startOffset),
72 m_streamSize(streamSize),
106 return m_startOffset;
131 return m_pages[m_page];
144 inline OggIterator::operator bool()
const 146 return m_page < m_pages.size() && m_segment < m_pages[m_page].segmentSizes().size();
164 const OggPage &page = m_pages[m_page = index];
176 const OggPage &page = m_pages[m_page];
177 m_offset = page.
dataOffset(m_segment = index);
203 return m_offset + m_bytesRead;
221 return m_pages[m_page].segmentSizes()[m_segment];
234 m_hasIdFilter =
true;
235 m_idFilter = streamSerialId;
244 m_hasIdFilter =
false;
256 return (m_pages.empty() ? m_startOffset : m_pages.back().startOffset() + m_pages.back().totalSize()) >= m_streamSize;
308 inline bool OggIterator::matchesFilter(
const OggPage &page)
315 #endif // MEDIA_OGGITERATOR_H
uint64 dataOffset(byte segmentIndex=0) const
Returns the data offset of the segment with the specified segmentIndex.
uint32 headerSize() const
Returns the header size in byte.
uint32 streamSerialNumber() const
Returns the stream serial number.
The OggPage class is used to parse OGG pages.
uint64 startOffset() const
Returns the start offset of the page.
#define TAG_PARSER_EXPORT
Marks the symbol to be exported by the tagparser library.