00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #pragma once
00036
00037
00038 #include "IRecomposer.h"
00039
00040 #include <libOOOgg/libOOOgg.h>
00041 #include <libOOOggChef/libOOOggChef.h>
00042
00043 #include <set>
00044 #include <string>
00045 #include <vector>
00046
00047 using namespace std;
00048
00049 class LIBOOOGGCHEF_API AnnodexRecomposer : public IRecomposer, public IOggCallback
00050 {
00051 public:
00052 AnnodexRecomposer(void);
00053 AnnodexRecomposer(string inFilename, BufferWriter inBufferWriter, void* inBufferWriterUserData, string inCachedSeekTableFilename = "");
00054 ~AnnodexRecomposer(void);
00055
00056 bool recomposeStreamFrom(double inStartingTimeOffset, const vector<string>* inWantedMIMETypes);
00057 bool acceptOggPage(OggPage* inOggPage);
00058
00059 AnnodexRecomposer(const AnnodexRecomposer&);
00060 AnnodexRecomposer &operator=(const AnnodexRecomposer&);
00061
00062 protected:
00063
00064 typedef pair<unsigned long, unsigned long> tSerial_HeadCountPair;
00065
00066 enum eDemuxState {
00067 SEEN_NOTHING,
00068 SEEN_ANNODEX_BOS,
00069 SEEN_ANNODEX_EOS,
00070 SEEN_ALL_CODEC_HEADERS,
00071 INVALID = 100,
00072 };
00073
00074 enum eDemuxParserState {
00075 LOOK_FOR_HEADERS,
00076 LOOK_FOR_BODY,
00077 };
00078
00079 BufferWriter mBufferWriter;
00080 void* mBufferWriterUserData;
00081
00082 fstream mDebugFile;
00083
00084 string mFilename;
00085 string mCachedSeekTableFilename;
00086
00087 unsigned long mAnnodexSerialNumber;
00088
00089 eDemuxState mDemuxState;
00090 eDemuxParserState mDemuxParserState;
00091
00092 set<tSerial_HeadCountPair> mWantedStreamSerialNumbers;
00093 const vector<string>* mWantedMIMETypes;
00094
00095 LOOG_UINT64 mRequestedStartTime;
00096
00097 unsigned short mAnnodexMajorVersion;
00098 };