00001 #pragma once 00002 00003 #include <libOOOgg/libOOOgg.h> 00004 #include "OggGranuleSeekTable.h" 00005 #include "IOggDecoderSeek.h" 00006 00007 00008 class LIBOOOGGSEEK_API AutoOggChainGranuleSeekTable 00009 : public IOggCallback 00010 { 00011 public: 00012 AutoOggChainGranuleSeekTable(string inFilename); 00013 virtual ~AutoOggChainGranuleSeekTable(void); 00014 00016 virtual bool buildTable(); 00017 00018 //IOggCallback interface 00019 virtual bool acceptOggPage(OggPage* inOggPage); 00020 00022 LOOG_INT64 fileDuration(); 00023 00024 bool enabled() { return mIsEnabled; } 00025 00026 bool addStream(unsigned long inSerialNo, IOggDecoderSeek* inSeekInterface); 00027 00028 OggGranuleSeekTable::tSeekPair seekPos(LOOG_INT64 inTime); 00029 protected: 00030 00031 struct sStreamMapping { 00032 unsigned long mSerialNo; 00033 IOggDecoderSeek* mSeekInterface; 00034 OggGranuleSeekTable* mSeekTable; 00035 }; 00036 00037 vector<sStreamMapping> mStreamMaps; 00038 00039 bool mIsEnabled; 00040 00041 LOOG_INT64 mDuration; 00042 sStreamMapping getMapping(unsigned long inSerialNo); 00043 fstream mFile; 00044 string mFilename; 00045 unsigned long mFilePos; 00046 00047 unsigned long mPreviousFilePos; 00048 OggDataBuffer* mOggDemux; 00049 };
1.3.9