home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 14 / MA_Cover_14.iso / source / c / pegase_src / psychoc.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-06-15  |  5.3 KB  |  182 lines

  1. #ifndef _PSYCHO_CLASS_HPP
  2. #define _PSYCHO_CLASS_HPP
  3.  
  4. /*
  5. **
  6. ** PsychoC.hpp
  7. **
  8. ** $VER: PsychoC.hpp 1.0 (26.07.98)
  9. **
  10. ** Classe PsychoC
  11. **
  12. ** $Revision: 1.4 $
  13. ** $State: Exp $
  14. ** $Date: 1998/08/16 19:03:46 $
  15. **
  16. ** $Log: PsychoC.hpp $
  17. ** Revision 1.4  1998/08/16 19:03:46  kakace
  18. ** Version Beta3+
  19. **
  20. ** Revision 1.3  1998/08/02 15:17:12  kakace
  21. ** Fonctionnement OK (Layer 1/2 + Stereo/JStereo)
  22. **
  23. ** Revision 1.2  1998/07/27 14:13:38  kakace
  24. ** Modification des membres (tableaux) de classe
  25. **
  26. ** Revision 1.1  1998/07/27 02:16:53  kakace
  27. ** Initial revision
  28. **
  29. **
  30. */
  31.  
  32. #ifndef  _PEGASECOND_HPP
  33. #include "PegaseCond.hpp"
  34. #endif
  35.  
  36. #ifndef  _FASTFFT_CLASS_HPP
  37. #include "FastFFTC.hpp"
  38. #endif
  39.  
  40. #ifndef  _CODER_CLASS_HPP
  41. #include "CoderC.hpp"
  42. #endif
  43.  
  44. #ifndef  _MEMORY_HPP
  45. #include "Memory.hpp"
  46. #endif
  47.  
  48.  
  49. //----------------------------------------------------------------------------------------------------
  50. //========================================== Classe PsychoC ==========================================
  51. //----------------------------------------------------------------------------------------------------
  52.  
  53.  
  54. class PsychoC : public FastFFTC
  55. {
  56.     public:
  57.  
  58.         // Constructeur et destructeur.
  59.  
  60.         PsychoC(CoderC &roCoderC);
  61.         virtual ~PsychoC();
  62.  
  63.         // Fonction utilisée pour contrôler l'analyseur psycho-acoustique.
  64.  
  65.         void psycho_anal(LONG chn, LONG pass, LONG layer, LONG LTMin[2][32]);
  66.  
  67.         // Fonctions de gestion.
  68.  
  69.         int    CheckPsychoStatus() const {return psy_MemoryError;}
  70.  
  71.         virtual void    PsychoAnal(LONG LTMin[MAX_CH][SBLIMIT]) = 0;
  72.         virtual int     InitPsychoAnalyzer(int iSBLimit);
  73.  
  74.     protected:
  75.  
  76.         void    CalcGroupedValues(UWORD wChannel, UWORD wNew);
  77.         void    CalcPermissibleNoise();
  78.  
  79.         // Données privées.
  80.  
  81.         typedef REAL  T_F2HBLK[2][HBLKSIZE];
  82.         typedef REAL  T_FHBLK[HBLKSIZE];
  83.         typedef UBYTE T_IHBLK[HBLKSIZE+3];          // +7 pour alignement.
  84.         typedef UBYTE T_ICB[CBANDS+1];              // +1 pour alignement.
  85.         typedef REAL  T_F32[SBLIMIT];
  86.         typedef REAL  T_F2_32[2][SBLIMIT];
  87.         typedef REAL  T_FCB[CBANDS];
  88.         typedef REAL  T_FCB2[CBANDS][2];
  89.         typedef REAL  T_FCBCB[CBANDS][CBANDS];
  90.         typedef REAL  T_F2BLK2[2][BLKSIZE][2];      // Canal, Sample, Real/Image
  91.         typedef REAL  T_F2BLK[BLKSIZE][2];          // Sample, Real/Image
  92.  
  93.         typedef T_FFTDATAS T_F2HBLK32[2][HBLKSIZE][3][2];// Canal, Value, Var, Old
  94.  
  95.         // PsychoAnal()
  96.  
  97.         CoderC          &psy_roCoderC;
  98.         int             psy_MemoryError;           // TRUE si un tampon n'a pu être alloué.
  99.  
  100.         const REAL      *psy_pdAbsThreshold;        // (absthr[][])
  101.         T_FCBCB         *psy_pdSpreading;           // (s[][])
  102.         T_F2HBLK32      *psy_pdTmpSave;
  103.  
  104.         T_IHBLK          psy_abPartition;           // (partition[])
  105.         T_FCB2           psy_adGroupedValues;       // (grouped_e[]/grouped_c[])
  106.         T_ICB            psy_abNumLines;            // (numlines)
  107.         T_FCB            psy_adToneMaskingNoise;    // (tmn[])
  108.         T_FCB            psy_adRNorm;               // (rnorm[])
  109.         T_FCB            psy_adNB;                  // (nb[])
  110.         T_F32            psy_adEnergy2;             // (energy[])
  111.  
  112.         UBYTE            psy_abCenterBarkVal[64];
  113.         BYTE             psy_abCBands[2][64];
  114.         UWORD            psy_wNew;
  115.         UWORD            psy_wSBLimit;
  116.         UWORD            psy_wCBands;               // = 58 (32 KHz) ou 62 (44.1 et 48 KHz).
  117.         UWORD            psy_wPad;
  118. };
  119.  
  120. //----------------------------------------------------------------------------------------------------
  121. //======================================== Classe Psycho_L1C =========================================
  122. //----------------------------------------------------------------------------------------------------
  123.  
  124.  
  125. class Psycho_L1C : public PsychoC
  126. {
  127.     public:
  128.  
  129.         Psycho_L1C(CoderC &roCoderC) : PsychoC(roCoderC)
  130.         {
  131.             psy_MemoryError |= !(psy_pdLThr = (T_F2HBLK *) AllocAlignedBuffer(sizeof(T_F2HBLK)));
  132.         }
  133.  
  134.         ~Psycho_L1C()
  135.         {
  136.             if (psy_pdLThr) FreeAlignedBuffer(psy_pdLThr);
  137.         }
  138.  
  139.         int     InitPsychoAnalyzer(int iSBLimit);
  140.         void    PsychoAnal(LONG LTMin[MAX_CH][SBLIMIT]);
  141.  
  142.     private:
  143.  
  144.         void    TranslateThreshold(UWORD wChannel);
  145.  
  146.         // Fonctions privées spécifiques.
  147.  
  148.         // REAL    GetNoiseLevel(REAL dNoiseBand, REAL dThreshold, REAL *p_LThr);
  149.  
  150.         T_F32            psy_adSNRTemp;             // (snrtmp[])
  151.         T_F2HBLK        *psy_pdLThr;                // (lthr[][])
  152. };
  153.  
  154.  
  155. //----------------------------------------------------------------------------------------------------
  156. //======================================== Classe Psycho_L2C =========================================
  157. //----------------------------------------------------------------------------------------------------
  158.  
  159.  
  160. class Psycho_L2C : public PsychoC
  161. {
  162.     public:
  163.  
  164.         Psycho_L2C(CoderC &roCoderC) : PsychoC(roCoderC) {}
  165.  
  166.         void    PsychoAnal(LONG LTMin[MAX_CH][SBLIMIT]);
  167.  
  168.     private:
  169.  
  170.         void    TranslateThreshold(REAL *pSNR);
  171.  
  172.         typedef REAL T_F22_32[2][2][SBLIMIT];
  173.  
  174.         T_F22_32         psy_adSNRTemp;             // (snrtmp[][])
  175. };
  176.  
  177.  
  178. //----------------------------------------------------------------------------------------------------
  179.  
  180. #endif  // _PSYCHO_CLASS_HPP
  181.  
  182.