#ifndef APE_APEDECOMPRESS_H #define APE_APEDECOMPRESS_H class CUnBitArray; class CPrepare; class CAPEInfo; class IPredictorDecompress; #include "UnBitArrayBase.h" #include "MACLib.h" #include "Prepare.h" #include "CircleBuffer.h" class CAPEDecompress : public IAPEDecompress { public: CAPEDecompress(int * pErrorCode, CAPEInfo * pAPEInfo, int nStartBlock = -1, int nFinishBlock = -1); ~CAPEDecompress(); int GetData(char * pBuffer, int nBlocks, int * pBlocksRetrieved); int Seek(int nBlockOffset); int GetInfo(APE_DECOMPRESS_FIELDS Field, int nParam1 = 0, int nParam2 = 0); protected: // file info int m_nBlockAlign; int m_nCurrentFrame; // start / finish information int m_nStartBlock; int m_nFinishBlock; int m_nCurrentBlock; BOOL m_bIsRanged; BOOL m_bDecompressorInitialized; // decoding tools CPrepare m_Prepare; WAVEFORMATEX m_wfeInput; unsigned int m_nCRC; unsigned int m_nStoredCRC; int m_nSpecialCodes; int SeekToFrame(int nFrameIndex); void DecodeBlocksToFrameBuffer(int nBlocks); int FillFrameBuffer(); void StartFrame(); void EndFrame(); int InitializeDecompressor(); // more decoding components CSmartPtr m_spAPEInfo; CSmartPtr m_spUnBitArray; UNBIT_ARRAY_STATE m_BitArrayStateX; UNBIT_ARRAY_STATE m_BitArrayStateY; CSmartPtr m_spNewPredictorX; CSmartPtr m_spNewPredictorY; int m_nLastX; // decoding buffer BOOL m_bErrorDecodingCurrentFrame; int m_nCurrentFrameBufferBlock; int m_nFrameBufferFinishedBlocks; CCircleBuffer m_cbFrameBuffer; }; #endif // #ifndef APE_APEDECOMPRESS_H