00001 #pragma once 00002 #include <libOOOgg/dllstuff.h> 00003 #include <libOOOgg/StampedOggPacket.h> 00004 #include <libOOOgg/OggPacket.h> 00005 #include "FLAC++/decoder.h" 00006 using namespace FLAC::Decoder; 00007 class FLACPushDecoder 00008 : protected Stream 00009 { 00010 public: 00011 FLACPushDecoder(void); 00012 virtual ~FLACPushDecoder(void); 00013 00014 StampedOggPacket* decodeFLAC(OggPacket* inPacket); 00015 bool acceptMetadata(OggPacket* inPacket); 00016 00017 void initCodec(); 00018 void flushCodec(); 00019 //Probably shouldn't be public... but who cares for now. 00020 unsigned long mNumChannels; 00021 unsigned long mFrameSize; 00022 unsigned long mSampleRate; 00023 protected: 00024 static const int SIZE_16_BITS = 2; 00025 //Virtuals frmo FLAC decoder 00026 virtual ::FLAC__StreamDecoderReadStatus read_callback(FLAC__byte buffer[], unsigned *bytes); 00027 virtual ::FLAC__StreamDecoderWriteStatus write_callback(const ::FLAC__Frame *frame, const FLAC__int32 * const buffer[]); 00028 virtual void metadata_callback(const ::FLAC__StreamMetadata *metadata); 00029 virtual void error_callback(::FLAC__StreamDecoderErrorStatus status); 00030 00031 OggPacket* mInPacket; 00032 StampedOggPacket* mOutPacket; 00033 bool mBegun; 00034 bool mGotMetaData; 00035 00036 };