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 uint64 currentPageOffset()
const;
29 std::vector<OggPage>::size_type currentPageIndex()
const;
30 void setPageIndex(std::vector<OggPage>::size_type index);
31 void setSegmentIndex(std::vector<uint32>::size_type index);
32 std::vector<uint32>::size_type currentSegmentIndex()
const;
33 uint64 currentSegmentOffset()
const;
34 uint64 currentCharacterOffset()
const;
36 uint32 currentSegmentSize()
const;
37 void setFilter(uint32 streamSerialId);
39 bool areAllPagesFetched()
const;
40 void read(
char *buffer, std::size_t count);
41 size_t readAll(
char *buffer, std::size_t max);
42 void ignore(std::size_t count = 1);
43 bool bytesRemaining(std::size_t atLeast)
const;
44 bool resyncAt(uint64 offset);
46 operator bool()
const;
54 bool matchesFilter(
const OggPage &page);
56 std::istream *m_stream;
59 std::vector<OggPage> m_pages;
60 std::vector<OggPage>::size_type m_page;
61 std::vector<uint32>::size_type m_segment;
73 m_startOffset(startOffset),
74 m_streamSize(streamSize),
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;
270 return (m_pages.empty() ? m_startOffset : m_pages.back().startOffset() + m_pages.back().totalSize()) >= m_streamSize;
322 inline bool OggIterator::matchesFilter(
const OggPage &page)
329 #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.