home *** CD-ROM | disk | FTP | other *** search
/ Magazyn Amiga 14 / MA_Cover_14.iso / source / c / pegase_src / encoderconfigc.hpp < prev    next >
Encoding:
C/C++ Source or Header  |  1999-08-14  |  5.9 KB  |  163 lines

  1. #ifndef  _ENCODERCONFIG_CLASS_HPP
  2. #define  _ENCODERCONFIG_CLASS_HPP
  3.  
  4. /*
  5. **
  6. ** EncoderConfigC.hpp
  7. **
  8. ** $VER: EncoderConfigC.hpp 1.0 (27.06.98)
  9. **
  10. ** $Revision: 1.3 $
  11. ** $State: Exp $
  12. ** $Date: 1998/08/16 19:03:42 $
  13. **
  14. ** $Log: EncoderConfigC.hpp $
  15. ** Revision 1.3  1998/08/16 19:03:42  kakace
  16. ** Version Beta3+
  17. **
  18. ** Revision 1.2  1998/08/02 15:17:08  kakace
  19. ** Fonctionnement OK (Layer 1/2 + Stereo/JStereo)
  20. **
  21. ** Revision 1.1  1998/07/24 14:26:55  kakace
  22. ** Automatic global CheckIn
  23. **
  24. ** Revision 1.4  1998/07/24 14:14:30  kakace
  25. ** Version intermédiaire (CheckIn global)
  26. **
  27. ** Revision 1.2  1998/07/02 15:52:04  kakace
  28. ** Automatic global CheckIn
  29. **
  30. **
  31. */
  32.  
  33.  
  34. //----------------------------------------------------------------------------------------------------
  35.  
  36. #ifndef  _INCLUDE_STRING_H
  37. #include <string.h>
  38. #endif
  39.  
  40. #ifndef  _PEGASECOND_HPP
  41. #include "PegaseCond.hpp"
  42. #endif
  43.  
  44.  
  45. //----------------------------------------------------------------------------------------------------
  46. //=========================================== Définitions ============================================
  47. //----------------------------------------------------------------------------------------------------
  48.  
  49. // Définitions de types pour les paramètres de l'encodeur.
  50.  
  51. enum e_Layer      {LAYER_I, LAYER_II};
  52.  
  53. enum e_SampFreq   {F_44100, F_48000, F_32000, F_ILLEGAL};
  54. enum e_Encoding   {STEREO, JOINTSTEREO, DUALCHANNEL, MONO};
  55. enum e_Deemphasis {NONE, DEEMP_15US, UNKNOWN, CITT};
  56.  
  57. enum e_Targets{TARGET_EMPTY, TARGET_DIRECTORY, TARGET_FILE};
  58.  
  59. const char *asExtensions[] = {".mp1", ".mp2"};
  60.  
  61.  
  62. //----------------------------------------------------------------------------------------------------
  63. //====================================== Classe EncoderConfigC =======================================
  64. //----------------------------------------------------------------------------------------------------
  65.  
  66. class EncoderConfigC
  67. {
  68.     // Drapeaux d'encodage.
  69.  
  70.     struct s_LayerFlags {BYTEBITS encoding:2;      // Type d'encodage (Mono/stéréo/...)
  71.                          BYTEBITS psycho2:1;       // Modèle psychoacoustique
  72.                          BYTEBITS deemphasis:2;    // Déphasage
  73.                          BYTEBITS copyright:1;     // Copyright
  74.                          BYTEBITS original:1;      // Original
  75.                          BYTEBITS crc:1;           // Somme de contrôle.
  76.                         };
  77.  
  78.     // Paramètres d'encodage.
  79.  
  80.     struct s_SamplingModes {BYTEBITS bitrate:4;    // Index du taux de sortie
  81.                             BYTEBITS sampfreq:3;   // Code de la fréquence d'échantillonage.
  82.                            };
  83.  
  84.  
  85.     public:
  86.  
  87.         EncoderConfigC(const EncoderConfigC &roConfig);
  88.         EncoderConfigC() {}
  89.  
  90.         ~EncoderConfigC() { if (ecfg_cOutputName) delete ecfg_cOutputName; }
  91.  
  92.     protected:
  93.  
  94.         void  CopyString(char *cString, char **cPtr)
  95.         {
  96.             if (*cPtr)
  97.             {
  98.                 delete *cPtr;
  99.                 *cPtr = NULL;
  100.             }
  101.  
  102.             if (cString && *cString)
  103.             {
  104.                 ULONG iStrLen = strlen(cString) + 1;
  105.  
  106.                 if ( (*cPtr = new char[iStrLen]) )
  107.                 {
  108.                     strcpy(*cPtr, cString);
  109.                 }
  110.             }
  111.         }
  112.  
  113.     public:
  114.  
  115.         // Fonctions d'accès aux membres privés.
  116.  
  117.         void SetOutputName(char *cDest)      {CopyString(cDest, &ecfg_cOutputName);}
  118.         char *GetOutputName()          const {return ecfg_cOutputName;}
  119.  
  120.         void SetEncodingMode(e_Encoding x)   {ecfg_sFlags.encoding = x;}
  121.         void SetPsycho2Bit(int x)            {ecfg_sFlags.psycho2 = x ? 1 : 0;}
  122.         void SetDeemphasis(ULONG x)          {ecfg_sFlags.deemphasis = (e_Deemphasis) ((x == 2) ? 3 : x);}
  123.         void SetCopyrightBit(int x)          {ecfg_sFlags.copyright = x ? 1 : 0;}
  124.         void SetOriginalBit(int x)           {ecfg_sFlags.original = x ? 1 : 1;}
  125.         void SetCRCBit(int x)                {ecfg_sFlags.crc = x ? 1 : 0;}
  126.         void SetLayer(ULONG iLayer)          {ecfg_iLayer = (e_Layer) --iLayer;}
  127.         void SetCDDAFmt(UWORD fmt)           {ecfg_CDDAFmt = fmt;}
  128.  
  129.         e_Encoding   GetEncodingMode() const {return (e_Encoding) ecfg_sFlags.encoding;}
  130.         int          IsPsycho2()       const {return ecfg_sFlags.psycho2;}
  131.         e_Deemphasis GetDeemphasis()   const {return (e_Deemphasis) ecfg_sFlags.deemphasis;}
  132.         e_Layer      GetLayer()        const {return (e_Layer) ecfg_iLayer;}
  133.         int          IsCopyrighted()   const {return ecfg_sFlags.copyright;}
  134.         int          IsOriginal()      const {return ecfg_sFlags.original;}
  135.         int          IsCRC()           const {return ecfg_sFlags.crc;}
  136.         UWORD        GetBitRate()      const {return ecfg_wBitrate;}
  137.         UWORD        GetSampleFreq()   const {return ecfg_wSampling;}
  138.         UWORD        GetBitrateIndex() const {return ecfg_sModes.bitrate;}
  139.         UWORD        GetSmplFrqIndex() const {return ecfg_sModes.sampfreq;}
  140.         UWORD        GetCDDAFmt()      const {return ecfg_CDDAFmt;}
  141.  
  142.         void    SetBitRate(UWORD wBitRate = 160);
  143.         int     SetSampleFreq(UWORD wSampleFreq);
  144.  
  145.         void      SetTargetType(e_Targets t) {ecfg_wTargetType = t;}
  146.         e_Targets GetTargetType() const      {return (e_Targets) ecfg_wTargetType;}
  147.  
  148.     protected:
  149.  
  150.         char           *ecfg_cOutputName;       // Nom du fichier encodé (ou nom de répertoire)
  151.         e_Layer         ecfg_iLayer;            // Numéro de Layer pour l'encodage (0-2 = 1-3)
  152.         UWORD           ecfg_wSampling;         // Fréquence d'échantillonage (Hz)
  153.         UWORD           ecfg_wBitrate;          // Taux de sortie (kbits/s)
  154.         s_LayerFlags    ecfg_sFlags;            // Drapeaux généraux.
  155.         s_SamplingModes ecfg_sModes;            // Mode d'encodage souhaité.
  156.         UWORD           ecfg_wTargetType;       // e_Targets;
  157.         UWORD           ecfg_iIntelFormat;      // TRUE = Format Intel.
  158.         UWORD           ecfg_CDDAFmt;           // 0 = Non spécifié, 1 = Motorola, 2 = Intel.
  159. };
  160.  
  161. #endif  // _ENCODERCONFIG_CLASS_HPP
  162.  
  163.