xref: /haiku/src/add-ons/media/plugins/ape_reader/MAClib/APEDecompress.h (revision 68ea01249e1e2088933cb12f9c28d4e5c5d1c9ef)
1 #ifndef APE_APEDECOMPRESS_H
2 #define APE_APEDECOMPRESS_H
3 
4 class CUnBitArray;
5 class CPrepare;
6 class CAPEInfo;
7 class IPredictorDecompress;
8 #include "UnBitArrayBase.h"
9 #include "MACLib.h"
10 #include "Prepare.h"
11 #include "CircleBuffer.h"
12 
13 class CAPEDecompress : public IAPEDecompress
14 {
15 public:
16 
17     CAPEDecompress(int * pErrorCode, CAPEInfo * pAPEInfo, int nStartBlock = -1, int nFinishBlock = -1);
18     ~CAPEDecompress();
19 
20     int GetData(char * pBuffer, int nBlocks, int * pBlocksRetrieved);
21     int Seek(int nBlockOffset);
22 
23     int GetInfo(APE_DECOMPRESS_FIELDS Field, int nParam1 = 0, int nParam2 = 0);
24 
25 protected:
26 
27     // file info
28     int m_nBlockAlign;
29     int m_nCurrentFrame;
30 
31     // start / finish information
32     int m_nStartBlock;
33     int m_nFinishBlock;
34     int m_nCurrentBlock;
35     BOOL m_bIsRanged;
36     BOOL m_bDecompressorInitialized;
37 
38     // decoding tools
39     CPrepare m_Prepare;
40     WAVEFORMATEX m_wfeInput;
41     unsigned int m_nCRC;
42     unsigned int m_nStoredCRC;
43     int m_nSpecialCodes;
44 
45     int SeekToFrame(int nFrameIndex);
46     void DecodeBlocksToFrameBuffer(int nBlocks);
47     int FillFrameBuffer();
48     void StartFrame();
49     void EndFrame();
50     int InitializeDecompressor();
51 
52     // more decoding components
53     CSmartPtr<CAPEInfo> m_spAPEInfo;
54     CSmartPtr<CUnBitArrayBase> m_spUnBitArray;
55     UNBIT_ARRAY_STATE m_BitArrayStateX;
56     UNBIT_ARRAY_STATE m_BitArrayStateY;
57 
58     CSmartPtr<IPredictorDecompress> m_spNewPredictorX;
59     CSmartPtr<IPredictorDecompress> m_spNewPredictorY;
60 
61     int m_nLastX;
62 
63     // decoding buffer
64     BOOL m_bErrorDecodingCurrentFrame;
65     int m_nCurrentFrameBufferBlock;
66     int m_nFrameBufferFinishedBlocks;
67     CCircleBuffer m_cbFrameBuffer;
68 };
69 
70 #endif // #ifndef APE_APEDECOMPRESS_H
71