JD2022-TU1/main/extern/Camcam/Inc/CDct.h

79 lines
2.5 KiB
C++

#ifndef _CDCT_H_
#define _CDCT_H_
#include "DEFINES.H"
#include <windows.h>
#include <math.h>
//#include "SoundSettings.h"
// ATTENTION : Lien entre taille de matrice DCT et Frequence d'échantillonage pour SND_OPTION_DCT_COMPRESS_FLOAT
// Car SND_OPTION_DCT_COMPRESS_FLOAT peut lancer la gaussienne qui utilise SND_DCT_SIZE_SAMPLE
#define SND_DCT_SIZE_MATRIX_POWER 10//7
#define SND_DCT_SIZE_MATRIX_COEFS (1<<SND_DCT_SIZE_MATRIX_POWER)
#define SND_DCT_NB_FREQ (SND_DCT_SIZE_MATRIX_COEFS) // Nombre total de Fréquences utilisées
#define SND_DCT_SIZE_MATRIX (SND_DCT_SIZE_MATRIX_COEFS * SND_DCT_SIZE_MATRIX_COEFS)
class CDct
{
UINT m_uNbFreq;
UINT m_uSampleSize;
UINT m_uMatrixSize;
float m_fAlpha1;
float m_fAlpha2;
float m_pfCoeffs [ SND_DCT_SIZE_MATRIX_COEFS ];
float m_pfMatrice [ SND_DCT_SIZE_MATRIX ];
float m_pfResultat [ SND_DCT_SIZE_MATRIX_COEFS ];
float m_pfEffectMatrix[ SND_DCT_SIZE_MATRIX ];
// Pour accès ou non à l'un des coefficients
bool m_bCoefficientIsAccessible;
// Pour tests et/ou affichages et/ou autres traitements ultérieurs
char SND_AVEC_COEFF1; // Indicateur et On/OFF pour tenir compte ou pas du premier coefficient dans la détermination des variables précédentes
public:
CDct ();
virtual ~CDct ();
bool Initialisation (); // Initialise les tables ( matrice & coefs )
bool Liberations ();
bool isIdentity;
bool isFullProcess;
UINT ToBufferSample (unsigned char *dstBuffer, float *srcCoefs, UINT nbElmts);
UINT FromBufferSample (float *dstCoefs, unsigned char *srcBuffer, UINT nbElmts);
void AlterSample (float *srcCoefs, UINT nbElmts, float neutralValue);
void ComputeMatrix ( float* pfMatrice, UINT uNbFreq, UINT uSampleSize ); // Calcule la matrice de la DCT avec les floats arrondis à 10-3
UINT ComputeDCT ( float* pfSource, UINT uSourceSize );
UINT ComputeInverseDCT ( float* pfDestination, UINT uDestinationSize );
UINT ToBuffer (unsigned char *dstBuffer, float *srcCoefs, UINT nbElmts);
UINT FromBuffer (float *dstCoefs, unsigned char *srcBuffer, UINT nbElmts);
void Alter (float *srcCoefs, UINT nbElmts, float neutralValue);
void EffectInit ();
void EffectEnd ();
void EffectNormalize ();
float EffectMatrixXYGet (int x, int y);
bool EffectMatrixXYSet (int x, int y, float value);
void EffectAddBase (float factor);
void EffectAddStretch (float factor);
void SetSND_AVEC_COEFF1 ( char cNewValue ) { SND_AVEC_COEFF1 = cNewValue; };
private:
// Pour le calcul de la DCT
float Alpha ( UINT uFreq );
};
#endif