aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/atrac.h
diff options
context:
space:
mode:
authorMaxim Poliakovski <max_pole@gmx.de>2013-09-30 23:14:51 +0200
committerDiego Biurrun <diego@biurrun.de>2013-10-03 18:20:01 +0200
commit79cbac8cd456c3f1c914bd1e7262b55e48de13a7 (patch)
treea06c45e77b9f0e19acc69360084aa8227c2f3ebc /libavcodec/atrac.h
parent5ce04c14dd3dd3670cbdba82275a3a72c716ec6f (diff)
downloadffmpeg-79cbac8cd456c3f1c914bd1e7262b55e48de13a7.tar.gz
atrac3: Generalize gain compensation code
Move it to the ATRAC common code, to reuse in the upcoming ATRAC3+ decoder. Signed-off-by: Diego Biurrun <diego@biurrun.de>
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 4923caa78a..8909323b01 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 lev_code[7]; ///< level at corresponding control point
+ int loc_code[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