xref: /haiku/src/add-ons/media/plugins/ape_reader/MAClib/NewPredictor.h (revision 02354704729d38c3b078c696adc1bbbd33cbcf72)
1 #ifndef APE_NEWPREDICTOR_H
2 #define APE_NEWPREDICTOR_H
3 
4 #include "Predictor.h"
5 
6 #include "RollBuffer.h"
7 #include "NNFilter.h"
8 #include "ScaledFirstOrderFilter.h"
9 
10 /*************************************************************************************************
11 Functions to create the interfaces
12 *************************************************************************************************/
13 IPredictorCompress * __stdcall CreateIPredictorCompress();
14 IPredictorDecompress * __stdcall CreateIPredictorDecompress();
15 
16 #define WINDOW_BLOCKS           512
17 
18 #define BUFFER_COUNT            1
19 #define HISTORY_ELEMENTS        8
20 #define M_COUNT                 8
21 
22 class CPredictorCompressNormal : public IPredictorCompress
23 {
24 public:
25     CPredictorCompressNormal(int nCompressionLevel);
26     virtual ~CPredictorCompressNormal();
27 
28     int CompressValue(int nA, int nB = 0);
29     int Flush();
30 
31 protected:
32 
33     // buffer information
34     CRollBufferFast<int, WINDOW_BLOCKS, 10> m_rbPrediction;
35     CRollBufferFast<int, WINDOW_BLOCKS, 9> m_rbAdapt;
36 
37     CScaledFirstOrderFilter<31, 5> m_Stage1FilterA;
38     CScaledFirstOrderFilter<31, 5> m_Stage1FilterB;
39 
40     // adaption
41     int m_aryM[9];
42 
43     // other
44     int m_nCurrentIndex;
45     CNNFilter * m_pNNFilter;
46     CNNFilter * m_pNNFilter1;
47     CNNFilter * m_pNNFilter2;
48 };
49 
50 class CPredictorDecompressNormal3930to3950 : public IPredictorDecompress
51 {
52 public:
53     CPredictorDecompressNormal3930to3950(int nCompressionLevel, int nVersion);
54     virtual ~CPredictorDecompressNormal3930to3950();
55 
56     int DecompressValue(int nInput, int);
57     int Flush();
58 
59 protected:
60 
61     // buffer information
62     int * m_pBuffer[BUFFER_COUNT];
63 
64     // adaption
65     int m_aryM[M_COUNT];
66 
67     // buffer pointers
68     int * m_pInputBuffer;
69 
70     // other
71     int m_nCurrentIndex;
72     int m_nLastValue;
73     CNNFilter * m_pNNFilter;
74     CNNFilter * m_pNNFilter1;
75 };
76 
77 class CPredictorDecompress3950toCurrent : public IPredictorDecompress
78 {
79 public:
80     CPredictorDecompress3950toCurrent(int nCompressionLevel, int nVersion);
81     virtual ~CPredictorDecompress3950toCurrent();
82 
83     int DecompressValue(int nA, int nB = 0);
84     int Flush();
85 
86 protected:
87 
88     // adaption
89     int m_aryMA[M_COUNT];
90     int m_aryMB[M_COUNT];
91 
92     // buffer pointers
93     CRollBufferFast<int, WINDOW_BLOCKS, 8> m_rbPredictionA;
94     CRollBufferFast<int, WINDOW_BLOCKS, 8> m_rbPredictionB;
95 
96     CRollBufferFast<int, WINDOW_BLOCKS, 8> m_rbAdaptA;
97     CRollBufferFast<int, WINDOW_BLOCKS, 8> m_rbAdaptB;
98 
99     CScaledFirstOrderFilter<31, 5> m_Stage1FilterA;
100     CScaledFirstOrderFilter<31, 5> m_Stage1FilterB;
101 
102     // other
103     int m_nCurrentIndex;
104     int m_nLastValueA;
105     int m_nVersion;
106     CNNFilter * m_pNNFilter;
107     CNNFilter * m_pNNFilter1;
108     CNNFilter * m_pNNFilter2;
109 };
110 
111 #endif // #ifndef APE_NEWPREDICTOR_H
112