summaryrefslogtreecommitdiffstats
path: root/libavcodec/atrac.h
diff options
context:
space:
mode:
authorMaxim Poliakovski <max_pole@gmx.de>2013-10-02 02:23:16 +0200
committerMichael Niedermayer <michaelni@gmx.at>2013-10-02 10:44:02 +0200
commitd49f3fa5794c9f17e058a6bce3ce6eac870ef85c (patch)
tree361fdfad4a493c195371c6e36832a35fc5a95b8a /libavcodec/atrac.h
parent4fa2484067d19a69dfe6f6e6b67a58fcba380a27 (diff)
downloadffmpeg-streaming-d49f3fa5794c9f17e058a6bce3ce6eac870ef85c.zip
ffmpeg-streaming-d49f3fa5794c9f17e058a6bce3ce6eac870ef85c.tar.gz
atrac3: Generalize gain compensation code
Move it to the ATRAC common code, so it can be reused in the umpcoming ATRAC3+ decoder. Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/atrac.h')
-rw-r--r--libavcodec/atrac.h45
1 files changed, 45 insertions, 0 deletions
diff --git a/libavcodec/atrac.h b/libavcodec/atrac.h
index fec66bd..e47d4ca 100644
--- a/libavcodec/atrac.h
+++ b/libavcodec/atrac.h
@@ -29,6 +29,26 @@
#ifndef AVCODEC_ATRAC_H
#define AVCODEC_ATRAC_H
+/**
+ * Gain control parameters for one subband.
+ */
+typedef struct AtracGainInfo {
+ int num_points; ///< number of gain control points
+ int levcode[7]; ///< level at corresponding control point
+ int loccode[7]; ///< location of gain control points
+} AtracGainInfo;
+
+/**
+ * Gain compensation context structure.
+ */
+typedef struct AtracGCContext {
+ float gain_tab1[16]; ///< gain compensation level table
+ float gain_tab2[31]; ///< gain compensation interpolation table
+ int id2exp_offset; ///< offset for converting level index into level exponent
+ int loc_scale; ///< scale of location code = 2^loc_scale samples
+ int loc_size; ///< size of location code in samples
+} AtracGCContext;
+
extern float ff_atrac_sf_table[64];
/**
@@ -37,6 +57,31 @@ extern float ff_atrac_sf_table[64];
void ff_atrac_generate_tables(void);
/**
+ * Initialize gain compensation context.
+ *
+ * @param gctx pointer to gain compensation context to initialize
+ * @param id2exp_offset offset for converting level index into level exponent
+ * @param loc_scale location size factor
+ */
+void ff_atrac_init_gain_compensation(AtracGCContext *gctx, int id2exp_offset,
+ int loc_scale);
+
+/**
+ * Apply gain compensation and perform the MDCT overlapping part.
+ *
+ * @param gctx pointer to gain compensation context
+ * @param in input buffer
+ * @param prev previous buffer to perform overlap against
+ * @param gc_now gain control information for current frame
+ * @param gc_next gain control information for next frame
+ * @param num_samples number of samples to process
+ * @param out output data goes here
+ */
+void ff_atrac_gain_compensation(AtracGCContext *gctx, float *in, float *prev,
+ AtracGainInfo *gc_now, AtracGainInfo *gc_next,
+ int num_samples, float *out);
+
+/**
* Quadrature mirror synthesis filter.
*
* @param inlo lower part of spectrum
OpenPOWER on IntegriCloud