summaryrefslogtreecommitdiffstats
path: root/libFDK/include/FDK_tools_rom.h
diff options
context:
space:
mode:
authorDave Burke <daveburke@google.com>2012-04-17 09:51:45 -0700
committerDave Burke <daveburke@google.com>2012-04-17 23:04:43 -0700
commit9bf37cc9712506b2483650c82d3c41152337ef7e (patch)
tree77db44e2bae06e3d144b255628be2b7a55c581d3 /libFDK/include/FDK_tools_rom.h
parenta37315fe10ee143d6d0b28c19d41a476a23e63ea (diff)
downloadfdk-aac-9bf37cc9712506b2483650c82d3c41152337ef7e.tar.gz
fdk-aac-9bf37cc9712506b2483650c82d3c41152337ef7e.tar.bz2
fdk-aac-9bf37cc9712506b2483650c82d3c41152337ef7e.zip
Fraunhofer AAC codec.
License boilerplate update to follow. Change-Id: I2810460c11a58b6d148d84673cc031f3685e79b5
Diffstat (limited to 'libFDK/include/FDK_tools_rom.h')
-rw-r--r--libFDK/include/FDK_tools_rom.h205
1 files changed, 205 insertions, 0 deletions
diff --git a/libFDK/include/FDK_tools_rom.h b/libFDK/include/FDK_tools_rom.h
new file mode 100644
index 0000000..6425e49
--- /dev/null
+++ b/libFDK/include/FDK_tools_rom.h
@@ -0,0 +1,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
+