/*************************** 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