summaryrefslogtreecommitdiffstats
path: root/libAACdec/src/aacdec_drc_types.h
blob: 20a593bbf9cc96deeba8cbd0c9af31da62b7c703 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/*****************************  MPEG-4 AAC Decoder  **************************

                        (C) Copyright Fraunhofer IIS (2010)
                               All Rights Reserved

    Please be advised that this software and/or program delivery is
    Confidential Information of Fraunhofer and subject to and covered by the

    Fraunhofer IIS Software Evaluation Agreement
    between Google Inc. and  Fraunhofer
    effective and in full force since March 1, 2012.

    You may use this software and/or program only under the terms and
    conditions described in the above mentioned Fraunhofer IIS Software
    Evaluation Agreement. Any other and/or further use requires a separate agreement.


   $Id$
   Author(s):   Christian Griebel
   Description: Dynamic range control (DRC) global data types

   This software and/or program is protected by copyright law and international
   treaties. Any reproduction or distribution of this software and/or program,
   or any portion of it, may result in severe civil and criminal penalties, and
   will be prosecuted to the maximum extent possible under law.

******************************************************************************/

#ifndef AACDEC_DRC_TYPES_H
#define AACDEC_DRC_TYPES_H



#include "common_fix.h"

 #define MAX_DRC_THREADS      (   3 )        /* Heavy compression value is handled just like MPEG DRC data */
#define MAX_DRC_BANDS         (  16 )        /* 2^LEN_DRC_BAND_INCR (LEN_DRC_BAND_INCR = 4) */

/**
 * \brief DRC module global data types
 */
typedef enum
{
  UNKNOWN_PAYLOAD   = 0,
  MPEG_DRC_EXT_DATA,
  DVB_DRC_ANC_DATA

} AACDEC_DRC_PAYLOAD_TYPE;

typedef struct
{
  UINT    expiryCount;
  UINT    numBands;
  USHORT  bandTop[MAX_DRC_BANDS];
  SHORT   drcInterpolationScheme;
  UCHAR   drcValue[MAX_DRC_BANDS];

} CDrcChannelData;

typedef struct
{
  AACDEC_DRC_PAYLOAD_TYPE  type;
  UINT   excludedChnsMask;
  SCHAR  progRefLevel;
  SCHAR  pceInstanceTag;

  CDrcChannelData channelData;

} CDrcPayload;

typedef struct
{
  FIXP_DBL  cut;
  FIXP_DBL  boost;

  UINT   expiryFrame;
  SCHAR  targetRefLevel;
  UCHAR  bsDelayEnable;
  UCHAR  applyHeavyCompression;

} CDrcParams;


typedef struct
{
  CDrcParams params;                         /* Module parameters that can be set by user (via SetParam API function) */

  UCHAR  enable;                             /* Switch that controls dynamic range processing */
  UCHAR  digitalNorm;                        /* Switch to en-/disable reference level normalization in digital domain */

  USHORT numPayloads;                        /* The number of DRC data payload elements found within frame */
  USHORT numThreads;                         /* The number of DRC data threads extracted from the found payload elements */
  SCHAR  progRefLevel;                       /* Program reference level for all channels */

  UCHAR  dvbAncDataAvailable;                  /* Flag that indicates whether DVB ancillary data is present or not */
  UINT   dvbAncDataPosition;                   /* Used to store the DVB ancillary data payload position in the bitstream (only one per frame) */
  UINT   drcPayloadPosition[MAX_DRC_THREADS];  /* Used to store the DRC payload positions in the bitstream */

} CDrcInfo;

typedef CDrcInfo *HANDLE_AAC_DRC;

#endif /* AACDEC_DRC_TYPES_H */