aboutsummaryrefslogtreecommitdiffstats
path: root/libFDK/include/FDK_tools_rom.h
blob: 6425e49096325d53df1ca710c6d46ce7c0cfb534 (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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/***************************  Fraunhofer IIS FDK Tools  ***********************

                        (C) Copyright Fraunhofer IIS (2008)
                               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):   Oliver Moser
   Description: ROM tables used by FDK tools

   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 __FDK_TOOLS_ROM_H__
#define __FDK_TOOLS_ROM_H__

#include "common_fix.h"
#include "FDK_audio.h"


/* None radix2 rotation vectors */
extern const FIXP_STB RotVectorReal60[60];
extern const FIXP_STB RotVectorImag60[60];
extern const FIXP_STB RotVectorReal240[240];
extern const FIXP_STB RotVectorImag240[240];
extern const FIXP_STB RotVectorReal480[480];
extern const FIXP_STB RotVectorImag480[480];


/* Regular sine tables */
extern const FIXP_STP SineTable512[];
extern const FIXP_STP SineTable480[];

/* AAC-LC windows */
extern const FIXP_WTP SineWindow1024[];
extern const FIXP_WTP KBDWindow1024[];
extern const FIXP_WTP SineWindow128[];
extern const FIXP_WTP KBDWindow128[];

extern const FIXP_WTP SineWindow960[];
extern const FIXP_WTP KBDWindow960[];
extern const FIXP_WTP SineWindow120[];
extern const FIXP_WTP KBDWindow120[];

/* AAC-LD windows */
extern const FIXP_WTP SineWindow512[];
#define LowOverlapWindow512 SineWindow128
extern const FIXP_WTP SineWindow480[];
#define LowOverlapWindow480 SineWindow120



extern const FIXP_WTP SineWindow64[];
extern const FIXP_WTP SineWindow32[];

/**
 * \brief Helper table for window slope mapping. You should prefer the usage of the
 * function FDKgetWindowSlope(), this table is only made public for some optimized
 * access inside dct.cpp.
 */
extern const FIXP_WTP *const windowSlopes[2][3][9];

/**
 * \brief Window slope access helper. Obtain a window of given length and shape.
 * \param length Length of the window slope.
 * \param shape Shape index of the window slope. 0: sine window, 1: Kaiser-Bessel. Any other
 *              value is applied a mask of 1 to, mapping it to either 0 or 1.
 * \param Pointer to window slope or NULL if the requested window slope is not available.
 */
const FIXP_WTP * FDKgetWindowSlope(int length, int shape);

extern const FIXP_WTP sin_twiddle_L64[];

/*
 * Filter coefficient type definition
 */

#if defined(ARCH_PREFER_MULT_16x16) || defined(ARCH_PREFER_MULT_32x16)
  #define QMF_COEFF_16BIT
#endif

#define QMF_FILTER_PROTOTYPE_SIZE    640
#define QMF_NO_POLY                  5

#ifdef QMF_COEFF_16BIT
  #define FIXP_PFT FIXP_SGL
  #define FIXP_QTW FIXP_SGL
#else
  #define FIXP_PFT FIXP_DBL
  #define FIXP_QTW FIXP_DBL
#endif

#define QMF640_PFT_TABLE_SIZE       (640/2 + QMF_NO_POLY)

extern const FIXP_QTW qmf_phaseshift_cos32[32];
extern const FIXP_QTW qmf_phaseshift_sin32[32];
extern const FIXP_QTW qmf_phaseshift_cos64[64];
extern const FIXP_QTW qmf_phaseshift_sin64[64];

extern const FIXP_PFT qmf_64[QMF640_PFT_TABLE_SIZE+QMF_NO_POLY];





#define QMF640_CLDFB_PFT_TABLE_SIZE (640)
#define QMF320_CLDFB_PFT_TABLE_SIZE (320)
#define QMF_CLDFB_PFT_SCALE 1

extern const FIXP_QTW qmf_phaseshift_cos32_cldfb[32];
extern const FIXP_QTW qmf_phaseshift_sin32_cldfb[32];
extern const FIXP_QTW qmf_phaseshift_cos64_cldfb[64];
extern const FIXP_QTW qmf_phaseshift_sin64_cldfb[64];

extern const FIXP_PFT qmf_cldfb_640[QMF640_CLDFB_PFT_TABLE_SIZE];
extern const FIXP_PFT qmf_cldfb_320[QMF320_CLDFB_PFT_TABLE_SIZE];





/*
 * Raw Data Block list stuff.
 */
typedef enum {
  element_instance_tag,
  common_window,
  global_gain,
  ics_info, /* ics_reserved_bit, window_sequence, window_shape, max_sfb, scale_factor_grouping, predictor_data_present, ltp_data_present, ltp_data */
  max_sfb,
  ms, /* ms_mask_present, ms_used */
  /*predictor_data_present,*/ /* part of ics_info */
  ltp_data_present,
  ltp_data,
  section_data,
  scale_factor_data,
  pulse, /* pulse_data_present, pulse_data  */
  tns_data_present,
  tns_data,
  gain_control_data_present,
  gain_control_data,
  esc1_hcr,
  esc2_rvlc,
  spectral_data,

  scale_factor_data_usac,
  core_mode,
  common_tw,
  lpd_channel_stream,
  tw_data,
  noise,
  ac_spectral_data,
  fac_data,
  tns_active, /* introduced in MPEG-D usac CD */
  tns_data_present_usac,
  common_max_sfb,


  /* Non data list items */
  adtscrc_start_reg1,
  adtscrc_start_reg2,
  adtscrc_end_reg1,
  adtscrc_end_reg2,
  drmcrc_start_reg,
  drmcrc_end_reg,
  next_channel,
  next_channel_loop,
  link_sequence,
  end_of_sequence
} rbd_id_t;

struct element_list {
  const rbd_id_t *id;
  const struct element_list *next[2];
};

typedef struct element_list element_list_t;
/**
 * \brief get elementary stream pieces list for given parameters.
 * \param aot audio object type
 * \param epConfig the epConfig value from the current Audio Specific Config
 * \param nChannels amount of channels contained in the current element.
 * \param layer the layer of the current element.
 * \return element_list_t parser guidance structure.
 */
const element_list_t * getBitstreamElementList(AUDIO_OBJECT_TYPE aot, SCHAR epConfig, UCHAR nChannels, UCHAR layer);


#endif