00001 #pragma once
00002
00003 #include "oggrawaudioextractordllstuff.h"
00004 #include "IOggDecoder.h"
00005
00006 class OggRawAudioExtractorFilter;
00007
00008 class OggRawAudioExtractorInputPin
00009 : public CTransformInputPin
00010 , public IOggDecoder
00011 {
00012 public:
00013 DECLARE_IUNKNOWN
00014 STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv);
00015
00016 OggRawAudioExtractorInputPin(OggRawAudioExtractorFilter* inParent, HRESULT* outHR);
00017 virtual ~OggRawAudioExtractorInputPin(void);
00018
00019 virtual STDMETHODIMP GetAllocatorRequirements(ALLOCATOR_PROPERTIES *outRequestedProps);
00020 virtual HRESULT SetMediaType(const CMediaType* inMediaType);
00021 virtual HRESULT CheckMediaType(const CMediaType *inMediaType);
00022
00023
00024
00025
00026 virtual LOOG_INT64 convertGranuleToTime(LOOG_INT64 inGranule);
00027 virtual LOOG_INT64 mustSeekBefore(LOOG_INT64 inGranule);
00028 virtual IOggDecoder::eAcceptHeaderResult showHeaderPacket(OggPacket* inCodecHeaderPacket);
00029 virtual string getCodecShortName();
00030 virtual string getCodecIdentString();
00031
00032
00033 sOggRawAudioFormatBlock getFormatBlock() {return mFormatBlock; }
00034 protected:
00035 enum eOggRawAudioSetupState {
00036 VSS_SEEN_NOTHING,
00037 VSS_SEEN_BOS,
00038 VSS_SEEN_COMMENT,
00039 VSS_ALL_HEADERS_SEEN,
00040 VSS_ERROR
00041 };
00042
00043 eOggRawAudioSetupState mSetupState;
00044 bool handleHeaderPacket(OggPacket* inHeaderPack);
00045
00046 sOggRawAudioFormatBlock mFormatBlock;
00047
00048
00049 static const unsigned long OGG_RAW_AUDIO_IDENT_HEADER_SIZE = 28;
00050 static const unsigned long OGG_RAW_AUDIO_NUM_BUFFERS = 50;
00051
00052
00053 enum eRawAudioFormat {
00054 FMT_S8,
00055 FMT_U8,
00056 FMT_S16_LE,
00057 FMT_S16_BE,
00058 FMT_S24_LE,
00059 FMT_S24_BE,
00060 FMT_S32_LE,
00061 FMT_S32_BE,
00062
00063 FMT_ULAW = 0x10,
00064 FMT_ALAW,
00065
00066 FMT_FLT32_LE = 0x20,
00067 FMT_FLT32_BE,
00068 FMT_FLT64_LE,
00069 FMT_FLT64_BE,
00070
00071
00072 };
00073
00074
00075 };