00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00032 #ifndef __G726_H__
00033 #define __G726_H__
00034
00062 class G726
00063 {
00064 public:
00068 enum Law{
00069 uLaw=0,
00070 ALaw=1,
00071 PCM16=2
00073 };
00074
00078 enum Rate{
00079 Rate16kBits=2,
00080 Rate24kBits=3,
00081 Rate32kBits=4,
00082 Rate40kBits=5
00083 };
00084
00090 inline G726()
00091 {
00092 Reset();
00093 }
00094
00099 IMPORT void Reset();
00100
00106 IMPORT void SetLaw(Law law);
00107
00113 IMPORT void SetRate(Rate rate);
00114
00127 IMPORT unsigned Encode(unsigned pcm);
00128
00142 IMPORT unsigned Decode(unsigned adpcm);
00143
00172 IMPORT unsigned Encode(void* dst, int dstOffset, const void* src, size_t srcSize);
00173
00203 IMPORT unsigned Decode(void* dst, const void* src, int srcOffset, unsigned srcSize);
00204 private:
00205 void InputPCMFormatConversionAndDifferenceSignalComputation(unsigned S,int SE,int& D);
00206 void AdaptiveQuantizer(int D,unsigned Y,unsigned& I);
00207 void InverseAdaptiveQuantizer(unsigned I,unsigned Y,unsigned& DQ);
00208 void QuantizerScaleFactorAdaptation1(unsigned AL,unsigned& Y);
00209 void QuantizerScaleFactorAdaptation2(unsigned I,unsigned Y);
00210 void AdaptationSpeedControl1(unsigned& AL);
00211 void AdaptationSpeedControl2(unsigned I,unsigned y,unsigned TDP,unsigned TR);
00212 void AdaptativePredictorAndReconstructedSignalCalculator1(int& SE,int& SEZ);
00213 void AdaptativePredictorAndReconstructedSignalCalculator2(unsigned DQ,unsigned TR,int SE,int SEZ,int& SR,int& A2P);
00214 void ToneAndTransitionDetector1(unsigned DQ,unsigned& TR);
00215 void ToneAndTransitionDetector2(int A2P,unsigned TR,unsigned& TDP);
00216 void OutputPCMFormatConversionAndSynchronousCodingAdjustment(int SR,int SE,unsigned Y,unsigned I,unsigned& SD);
00217 void DifferenceSignalComputation(int SL,int SE,int& D);
00218 void OutputLimiting(int SR,int& S0);
00219 unsigned EncodeDecode(unsigned input,bool encode);
00220 private:
00221 Law LAW;
00222 Rate RATE;
00223
00224 int A1;
00225 int A2;
00226 unsigned AP;
00227 int Bn[6];
00228 unsigned DML;
00229 unsigned DMS;
00230 unsigned DQn[6];
00231 int PK1;
00232 int PK2;
00233 unsigned SR1;
00234 unsigned SR2;
00235 unsigned TD;
00236 unsigned YL;
00237 unsigned YU;
00238
00239 friend class G726Test;
00240 };
00241
00251 #define IMPLEMENT_G191_BUGS
00252
00254
00255 #endif
00256