mirror of
https://github.com/mstorsjo/fdk-aac.git
synced 2025-01-08 13:52:40 +01:00
9bf37cc971
License boilerplate update to follow. Change-Id: I2810460c11a58b6d148d84673cc031f3685e79b5
206 lines
5.7 KiB
C
206 lines
5.7 KiB
C
/*************************** 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
|
|
|