videoeditorengine/mp3aacManipLib/AACGain/inc/chandefs.h
changeset 0 951a5db380a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/videoeditorengine/mp3aacManipLib/AACGain/inc/chandefs.h	Fri Jan 29 14:08:33 2010 +0200
@@ -0,0 +1,410 @@
+/*
+* Copyright (c) 2010 Ixonos Plc.
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - Initial contribution
+*
+* Contributors:
+* Ixonos Plc
+*
+* Description:
+*
+*/
+
+
+/**************************************************************************
+  chandefs.h - Constants for AAC coder.
+ 
+  Author(s): Juha Ojanpera
+  Copyright (c) 1999-2004 by Nokia Research Center, Audio-Visual Systems.
+  *************************************************************************/
+
+#ifndef AAC_CHANDEFS_H_
+#define AAC_CHANDEFS_H_
+
+/*-- Project Headers. --*/
+#include "defines.h"
+
+#define GAIN_START                  (40)
+#define MAGIC_NUMBER                (0.4054)
+#define MAGIC_NUMBER2               (1.0f - MAGIC_NUMBER)
+#define MAGIC_NUMBER3               (0.5f * MAGIC_NUMBER)
+#define QSTEP_SIZE                  (7)
+#define GAIN_FACTOR                 (1.0f / -0.25f)
+#define IMAX_QUANT                  (1.0f / MAX_AAC_QUANT)
+#define POWRAISE43                  (4.0f / 3.0f)
+#define ILOG2                       (1.0f / log10(2.0f))
+#define LOG34                       (log10(0.75f) * ILOG2)
+#define SFCGAIN                     (16.0f / 3.0f)
+#define QROUND_ERROR LOG2           (5.5f)
+#define MAXCOEF_LOG2_16_3_MINUS_TWO (67.33239402f)
+#define ILOG2_16_3                  (17.71694984f)
+#define LOG2(x)                     (log10(x) * ILOG2)
+
+enum
+{
+  /*
+   * Channels for 5.1 main profile configuration 
+   * (modify for any desired decoder configuration)
+   */
+
+  /*-- Front channels: left, center, right --*/
+  FChansD                = 2,
+
+  /*-- 1 if decoder has front center channel. --*/
+  FCenterD               = 0,
+
+  /*-- Side channels: --*/
+  SChansD                = 0,
+
+  /*-- Back channels: left surround, right surround. --*/
+  BChansD                = 0,
+
+  /*-- 1 if decoder has back center channel. --*/
+  BCenterD               = 0,
+
+  /*-- LFE channels. --*/
+  LChansD                = 0,
+
+  /*-- Scratch space for parsing unused channels. --*/
+  XChansD                = 2,
+  
+  /*-- Total number of supported channels. --*/
+  ChansD                 = FChansD + SChansD + BChansD + LChansD + XChansD,
+
+  /*-- Independently switched coupling channels. --*/
+  ICChansD               = 0,
+
+  /*-- Dependently switched coupling channels. --*/
+  DCChansD               = 0,
+
+  /*-- Scratch space index for parsing unused coupling channels. --*/
+  XCChansD               = 1,
+
+  /*-- Total number of supported CC channels. --*/
+  CChansD                = (ICChansD + DCChansD + XCChansD),
+
+
+  /*-- Block switching. --*/
+  LN                     = 2048,
+  SN                     = 256,
+  LN2_960                = 960,
+  SN2_120                = 120,
+  LN2                    = LN / 2,
+  SN2                    = SN / 2,
+  NSHORT                 = LN / SN,
+  MAX_SBK                = NSHORT,
+  NUM_WIN_SEQ            = 4,
+
+  /*-- Max number of scale factor bands. --*/
+  MAXBANDS               = 16 * NSHORT,
+  MAXLONGSFBBANDS        = 51,
+  MAXSHORTSFBBANDS       = 15,
+
+  /*-- Maximum scale factor. --*/
+  SFACBOOK_SIZE          = 121,
+  MIDFAC                 = (SFACBOOK_SIZE - 1) / 2,
+  
+  /*-- Global gain must be positive. --*/
+  SF_OFFSET              = 100,
+  /*-- Quantization constants. --*/
+  MAX_QUANT_VALUE        = 8191,
+  
+  /*-- Huffman parameters. --*/
+  ZERO_HCB               = 0,
+  ESCBOOK                = 11,
+  NSPECBOOKS             = ESCBOOK + 1,
+  BOOKSCL                = NSPECBOOKS,
+  NBOOKS                 = NSPECBOOKS + 1,
+  INTENSITY_HCB2         = 14,
+  INTENSITY_HCB          = 15,
+  NOISE_HCB              = 13,
+  NOISE_PCM_BITS         = 9,
+  NOISE_PCM_OFFSET       = (1 << (NOISE_PCM_BITS - 1)),
+  NOISE_OFFSET           = 90,
+  RESERVED_HCB           = 13,
+  SF_INDEX_OFFSET        = 60, /*-- Offset for Huffman table indices of scalefactors. --*/
+  
+  LONG_SECT_BITS         = 5, 
+  SHORT_SECT_BITS        = 3, 
+  
+  /*-- Program Configuration. --*/
+  Main_Object            = 0, 
+  LC_Object              = 1, 
+  SSR_Object             = 2,
+  LTP_Object             = 3,
+  Scalable_Object        = 4,
+  
+  Fs_48                  = 3,
+  Fs_44                  = 4, 
+  Fs_32                  = 5, 
+ 
+  /*-- Raw bitstream constants. --*/
+  LEN_SE_ID              = 3,
+  LEN_TAG                = 4,
+  LEN_COM_WIN            = 1,
+  LEN_ICS_RESERV         = 1, 
+  LEN_WIN_SEQ            = 2,
+  LEN_WIN_SH             = 1,
+  LEN_MAX_SFBL           = 6, 
+  LEN_MAX_SFBS           = 4, 
+  LEN_CB                 = 4,
+  LEN_SCL_PCM            = 8,
+  LEN_SCL_PCM_MASK       = (1 << LEN_SCL_PCM) - 1,
+  LEN_PRED_PRES          = 1,
+  LEN_PRED_RST           = 1,
+  LEN_PRED_RSTGRP        = 5,
+  LEN_PRED_ENAB          = 1,
+  LEN_MASK_PRES          = 2,
+  LEN_MASK               = 1,
+  
+  LEN_PULSE_NPULSE       = 2, 
+  LEN_PULSE_ST_SFB       = 6, 
+  LEN_PULSE_POFF         = 5, 
+  LEN_PULSE_PAMP         = 4, 
+  NUM_PULSE_LINES        = 4, 
+  PULSE_OFFSET_AMP       = 4, 
+  
+  LEN_IND_CCE_FLG        = 1,  
+  LEN_NCC                = 3,
+  LEN_IS_CPE             = 1, 
+  LEN_CC_LR              = 1,
+  LEN_CC_DOM             = 1,
+  LEN_CC_SGN             = 1,
+  LEN_CCH_GES            = 2,
+  LEN_CCH_CGP            = 1,
+  
+  LEN_D_ALIGN            = 1,
+  LEN_D_CNT              = 8,
+  LEN_D_ESC              = 8,
+  LEN_F_CNT              = 4,
+  LEN_F_ESC              = 8,
+  LEN_NIBBLE             = 4,
+  LEN_BYTE               = 8,
+  LEN_PAD_DATA           = 8,
+  
+  LEN_PC_COMM            = 8, 
+  
+  /*-- FILL --*/
+  LEN_EX_TYPE            = 4,
+  EX_FILL                = 0, 
+  EX_FILL_DATA           = 1, 
+  EX_DRC                 = 11, 
+  
+  /*-- DRC --*/
+  LEN_DRC_PL             = 7, 
+  LEN_DRC_PL_RESV        = 1, 
+  LEN_DRC_PCE_RESV       = (8 - LEN_TAG),
+  LEN_DRC_BAND_INCR      = 4, 
+  LEN_DRC_BAND_RESV      = 4, 
+  LEN_DRC_BAND_TOP       = 8, 
+  LEN_DRC_SGN            = 1, 
+  LEN_DRC_MAG            = 7, 
+  DRC_BAND_MULT          = 4,
+
+  /*-- Channel elements. --*/
+  ID_SCE                 = 0,
+  ID_CPE,
+  ID_CCE,
+  ID_LFE,
+  ID_DSE,
+  ID_PCE,
+  ID_FIL,
+  ID_END,
+
+  FILL_VALUE             = 0x55,
+
+  /*-- Bit reservoir. --*/
+  BIT_RESERVOIR_SIZE     = 6144,
+  
+  /*-- Program configuration element --*/
+  LEN_PROFILE            = 2, 
+  LEN_SAMP_IDX           = 4, 
+  LEN_NUM_ELE            = 4, 
+  LEN_NUM_LFE            = 2, 
+  LEN_NUM_DAT            = 3, 
+  LEN_NUM_CCE            = 4, 
+  LEN_MMIX_IDX           = 2, 
+  LEN_PSUR_ENAB          = 1, 
+  LEN_ELE_IS_CPE         = 1,
+  LEN_IND_SW_CCE         = 1,  
+  LEN_COMMENT_BYTES      = 8,
+
+  /*-- LTP constants. --*/
+  LTP_MAX_PRED_BANDS     = 40,
+  LTP_COEF_BITS          = 3,
+  LTP_LAG_BITS           = 11,
+
+  /*-- TNS constants. --*/
+  TNS_MAX_FILT           = 3,
+  TNS_MAX_COEFF_RES      = 2,
+  TNS_MAX_COEFF          = 32,
+
+  TNS_MAX_ORDER          = 12,
+  TNS_COEFF_RES_OFFSET   = 3,
+
+  /*-- BWP constants. --*/
+  MAX_PGRAD              = 2,
+  MINVAR                 = 1,
+  Q_ZERO                 = 0x0000,
+  Q_ONE                  = 0x3F80,
+
+  /*-- PNS parameters. --*/
+  MAX_DCT_LEN            = 64,
+  NOISE_FREE_BANDS       = 3,
+  NOISE_FREE_MASK        = (1 << NOISE_FREE_BANDS) - 1,
+  /*-- Max length of DSE, bytes. --*/
+  MAX_DBYTES             = ((1 << LEN_D_CNT) + (1 << LEN_D_ESC)),
+  
+  /*-- size of exp cache table. --*/
+  TEXP                   = 256,
+  TEXP_MASK              = (TEXP - 1),
+
+  /*-- Size of inv quant table. --*/
+  MAX_AAC_QUANT          = 255,
+  MAX_IQ_TBL             = MAX_AAC_QUANT + 1,
+  IQ_MASK                = (MAX_IQ_TBL - 1)
+};
+
+/*
+   Purpose:     Mixing modes for CCE (coupling channel element).
+   Explanation: - */
+typedef enum CCmixMode
+{
+  CC_BEFORE_TNS, /* Dependently switched.   */
+  CC_AFTER_TNS,  /* Dependently switched.   */
+  CC_TIME_MIX    /* Independently switched. */
+
+} CCmixMode;
+
+/*
+   Purpose:     Window shapes.
+   Explanation: - */
+typedef enum WindowShape
+{
+  WS_SIN = 0, /* Sine window.                  */
+  WS_KBD      /* Kaiser-Bessel Derived window. */
+  
+} WindowShape;
+
+/*
+   Purpose:     AAC predictor type.
+   Explanation: - */
+typedef enum PredType
+{
+  NO_PRED = 0,
+  BWAP_PRED,
+  LTP_PRED
+
+} PredType;
+
+/*
+   Purpose:     Block types for transform coders using block switching. 
+   Explanation: The first four describe the actual block type for each subband,
+                the rest of the declarations describe the block type for the
+                whole frame. */
+typedef enum AAC_WINDOW_TYPE
+{
+  ONLY_LONG_WND,
+  LONG_SHORT_WND,
+  ONLY_SHORT_WND,
+  SHORT_LONG_WND
+
+} AAC_WINDOW_TYPE, AacWindowType;
+
+/*
+   Purpose:     Block sequence (long and short) parameters.
+   Explanation: - */
+class CInfo : public CBase
+    {
+
+public:
+
+    static CInfo* NewL();
+    ~CInfo();
+
+    int16 islong;
+    int16 nsbk;
+    int16 bins_per_bk;
+    int16 sfb_per_bk;
+    int16* bins_per_sbk;
+    int16* sfb_per_sbk;
+    const int16 *sbk_sfb_top[MAX_SBK];
+    int16 *sfb_width_128;
+    int16* bk_sfb_top;
+    int16 num_groups;
+    int16* group_len;
+    int16* group_offs;
+  
+private:
+    void ConstructL();
+    CInfo();
+
+};
+
+/*
+   Purpose:     Sampling rate dependent parameters.
+   Explanation: - */
+typedef struct Sr_InfoStr
+{
+  int32 samp_rate;
+
+  int16 nsfb1024;
+  const int16 *SFbands1024;
+
+  int16 nsfb128;
+  const int16 *SFbands128;
+
+  int16 nsfb960;
+  const int16 *SFbands960;
+
+  int16 nsfb120;
+  const int16 *SFbands120;
+  
+} SR_Info;
+
+/*
+   Purpose:     Sfb related information.
+   Explanation: - */
+class CSfb_Info : public CBase
+{  
+
+public:
+
+    static CSfb_Info* NewL(uint8 isEncoder = FALSE);
+    ~CSfb_Info();
+
+    CInfo *only_long_info;
+    CInfo *eight_short_info;
+    
+    CInfo *winmap[NUM_WIN_SEQ];
+    int16 sfbwidth128[1 << LEN_MAX_SFBS];
+    
+    /*-- Scalefactor offsets. --*/
+    int16 *sect_sfb_offsetL;
+    int16 *sect_sfb_offsetS;
+    int16 *sfbOffsetTablePtr[2];
+    int16 *sect_sfb_offsetS2[NSHORT];
+
+private:
+    void ConstructL(uint8 isEncoder);
+    CSfb_Info();
+
+};
+
+/*
+   Purpose:     Window shapes for this and previous frame.
+   Explanation: - */
+typedef struct Wnd_ShapeStr
+{
+  uint8 this_bk;
+  uint8 prev_bk;
+  
+} Wnd_Shape;
+
+#endif /*-- AAC_CHANDEFS_H_ --*/