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 #pragma once
00033
00034
00035 #include <libOOOgg/OggPage.h>
00036 #include <libOOOgg/IOggCallback.h>
00037 #include <libOOOgg/INotifyArrival.h>
00038 #include <math.h>
00039 #include <deque>
00040 #include <fstream>
00041
00042
00043 using namespace std;
00044
00045
00046 class LIBOOOGG_API OggMuxStream
00047 : public IOggCallback
00048 {
00049 public:
00050 OggMuxStream(INotifyArrival* inNotifier);
00051 virtual ~OggMuxStream(void);
00052
00053 static const LOOG_INT64 INT64_MAX = 9223372036854775807LL;
00054
00055
00056 virtual bool acceptOggPage(OggPage* inOggPage);
00057
00058 virtual bool pushFront(OggPage* inOggPage);
00059
00060 virtual OggPage* popFront();
00061 virtual OggPage* peekFront();
00062
00063 virtual unsigned long numAvail();
00064
00065 virtual LOOG_INT64 frontTime();
00066 virtual LOOG_INT64 scaledFrontTime();
00067
00068 virtual bool isEmpty();
00069 virtual bool isEOS();
00070 virtual bool isProcessable();
00071 virtual void setIsEOS(bool inIsEOS);
00072 virtual bool isActive();
00073 virtual void setIsActive(bool inIsActive);
00074
00075 virtual bool setConversionParams(LOOG_INT64 inNumerator, LOOG_INT64 inDenominator, LOOG_INT64 inScaleFactor, LOOG_INT64 inTheoraLogKFI);
00076 virtual bool setConversionParams(LOOG_INT64 inNumerator, LOOG_INT64 inDenominator, LOOG_INT64 inScaleFactor);
00077
00078 virtual void setNumHeaders(unsigned long inNumHeaders);
00079 virtual unsigned long numHeaders();
00080
00081 virtual unsigned long packetsSent();
00082 virtual bool sentAllHeaders();
00083
00084
00085 LOOG_INT64 granuleNumerator();
00086 LOOG_INT64 granuleDenominator();
00087
00088 protected:
00089 INotifyArrival* mNotifier;
00090 LOOG_INT64 convertTime(LOOG_INT64 inGranulePos);
00091
00092 bool mIsEOS;
00093 bool mIsActive;
00094 bool mIsSensibleTime;
00095
00096 LOOG_INT64 mConvNumerator;
00097 LOOG_INT64 mConvDenominator;
00098 LOOG_INT64 mConvScaleFactor;
00099 LOOG_INT64 mConvTheoraLogKeyFrameInterval;
00100
00101 unsigned long mNumHeaders;
00102 unsigned long mPacketsSent;
00103
00104
00105 deque<OggPage*> mPageQueue;
00106 private:
00107 OggMuxStream& operator=(const OggMuxStream& other);
00108 OggMuxStream(const OggMuxStream& other);
00109 };