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 #pragma once
00032
00033 #include "ogmdecoderdllstuff.h"
00034 #include "IOggDecoder.h"
00035
00036 class OGMDecodeFilter;
00037
00038 class OGMDecodeInputPin
00039 : public CTransformInputPin
00040 , public IOggDecoder
00041 {
00042 public:
00043 DECLARE_IUNKNOWN
00044 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00045
00046 OGMDecodeInputPin(OGMDecodeFilter* inParent, HRESULT* outHR);
00047 virtual ~OGMDecodeInputPin(void);
00048
00049 virtual STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps);
00050 virtual HRESULT SetMediaType(const CMediaType* inMediaType);
00051 virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
00052
00053
00054
00055
00056 virtual LOOG_INT64 convertGranuleToTime(LOOG_INT64 inGranule);
00057 virtual LOOG_INT64 mustSeekBefore(LOOG_INT64 inGranule);
00058 virtual IOggDecoder::eAcceptHeaderResult showHeaderPacket(OggPacket* inCodecHeaderPacket);
00059 virtual string getCodecShortName();
00060 virtual string getCodecIdentString();
00061
00062 enum eOGMMediaType {
00063 OGM_VIDEO_TYPE,
00064 OGM_AUDIO_TYPE,
00065 OGM_TEXT_TYPE,
00066 OGM_UNKNOWN_TYPE
00067 };
00068
00069 eOGMMediaType getOGMMediaType() { return mOGMMediaType; }
00070 VIDEOINFOHEADER* getVideoFormatBlock() { return mVideoFormatBlock; }
00071 WAVEFORMATEX* getAudioFormatBlock() { return mAudioFormatBlock; }
00072 protected:
00073 enum eOGMSetupState {
00074 VSS_SEEN_NOTHING,
00075 VSS_SEEN_BOS,
00076 VSS_SEEN_COMMENT,
00077 VSS_ALL_HEADERS_SEEN,
00078 VSS_ERROR
00079 };
00080
00081 eOGMMediaType mOGMMediaType;
00082
00083 eOGMSetupState mSetupState;
00084 bool handleHeaderPacket(OggPacket* inHeaderPack);
00085 bool handleAudioHeaderPacket(OggPacket* inHeaderPack);
00086 bool handleVideoHeaderPacket(OggPacket* inHeaderPack);
00087 bool handleTextHeaderPacket(OggPacket* inHeaderPack);
00088
00089 VIDEOINFOHEADER* mVideoFormatBlock;
00090 WAVEFORMATEX* mAudioFormatBlock;
00091 __int64 mGranuleRateNumerator;
00092 __int64 mGranuleRateDenominator;
00093
00094 static const unsigned long OGM_IDENT_HEADER_SIZE = 57;
00095 static const unsigned long OGM_NUM_BUFFERS = 50;
00096 static const unsigned long OGM_BUFFER_SIZE = 1024*512*3;;
00097
00098 };