aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVitor Sessak <vitor1001@gmail.com>2010-01-16 03:40:25 +0000
committerVitor Sessak <vitor1001@gmail.com>2010-01-16 03:40:25 +0000
commit65323ed279c79a9e033b873beee6d5b3349cf2c4 (patch)
treea16fe6dc1bc6c5b1eb37a9dac7cab9e9ff633c8a
parent06cb7a1c8f4965e45f4e102d69c0efc0dadb8eec (diff)
downloadffmpeg-65323ed279c79a9e033b873beee6d5b3349cf2c4.tar.gz
Split some SIPR structs to a header file for the upcoming SIPR16k commit
Originally committed as revision 21232 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r--libavcodec/sipr.c54
-rw-r--r--libavcodec/sipr.h83
2 files changed, 84 insertions, 53 deletions
diff --git a/libavcodec/sipr.c b/libavcodec/sipr.c
index 82d0267572..2db018ce53 100644
--- a/libavcodec/sipr.c
+++ b/libavcodec/sipr.c
@@ -37,28 +37,11 @@
#include "acelp_filters.h"
#include "celp_filters.h"
-#define LSFQ_DIFF_MIN (0.0125 * M_PI)
-
-#define LP_FILTER_ORDER 10
-
-/** Number of past samples needed for excitation interpolation */
-#define L_INTERPOL (LP_FILTER_ORDER + 1)
-
-/** Subframe size for all modes except 16k */
-#define SUBFR_SIZE 48
-
#define MAX_SUBFRAME_COUNT 5
+#include "sipr.h"
#include "siprdata.h"
-typedef enum {
- MODE_16k,
- MODE_8k5,
- MODE_6k5,
- MODE_5k0,
- MODE_COUNT
-} SiprMode;
-
typedef struct {
const char *mode_name;
uint16_t bits_per_frame;
@@ -127,41 +110,6 @@ static const SiprModeParam modes[MODE_COUNT] = {
}
};
-typedef struct {
- AVCodecContext *avctx;
- DSPContext dsp;
-
- SiprMode mode;
-
- float past_pitch_gain;
- float lsf_history[LP_FILTER_ORDER];
-
- float excitation[L_INTERPOL + PITCH_DELAY_MAX + 5*SUBFR_SIZE];
-
- DECLARE_ALIGNED_16(float, synth_buf[LP_FILTER_ORDER + 5*SUBFR_SIZE + 6]);
-
- float lsp_history[LP_FILTER_ORDER];
- float gain_mem;
- float energy_history[4];
- float highpass_filt_mem[2];
- float postfilter_mem[PITCH_DELAY_MAX + LP_FILTER_ORDER];
-
- /* 5k0 */
- float tilt_mem;
- float postfilter_agc;
- float postfilter_mem5k0[PITCH_DELAY_MAX + LP_FILTER_ORDER];
- float postfilter_syn5k0[LP_FILTER_ORDER + SUBFR_SIZE*5];
-} SiprContext;
-
-typedef struct {
- int vq_indexes[5];
- int pitch_delay[5]; ///< pitch delay
- int gp_index[5]; ///< adaptive-codebook gain indexes
- int16_t fc_indexes[5][10]; ///< fixed-codebook indexes
- int gc_index[5]; ///< fixed-codebook gain indexes
-} SiprParameters;
-
-
static void dequant(float *out, const int *idx, const float *cbs[])
{
int i;
diff --git a/libavcodec/sipr.h b/libavcodec/sipr.h
new file mode 100644
index 0000000000..02a2916abf
--- /dev/null
+++ b/libavcodec/sipr.h
@@ -0,0 +1,83 @@
+/*
+ * SIPR / ACELP.NET decoder
+ *
+ * Copyright (c) 2008 Vladimir Voroshilov
+ * Copyright (c) 2009 Vitor Sessak
+ *
+ * This file is part of FFmpeg.
+ *
+ * FFmpeg is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * FFmpeg is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with FFmpeg; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef AVCODEC_SIPR_H
+#define AVCODEC_SIPR_H
+
+#include "avcodec.h"
+#include "dsputil.h"
+#include "acelp_pitch_delay.h"
+
+#define LSFQ_DIFF_MIN (0.0125 * M_PI)
+
+#define LP_FILTER_ORDER 10
+
+/** Number of past samples needed for excitation interpolation */
+#define L_INTERPOL (LP_FILTER_ORDER + 1)
+
+/** Subframe size for all modes except 16k */
+#define SUBFR_SIZE 48
+
+typedef enum {
+ MODE_16k,
+ MODE_8k5,
+ MODE_6k5,
+ MODE_5k0,
+ MODE_COUNT
+} SiprMode;
+
+typedef struct {
+ AVCodecContext *avctx;
+ DSPContext dsp;
+
+ SiprMode mode;
+
+ float past_pitch_gain;
+ float lsf_history[LP_FILTER_ORDER];
+
+ float excitation[L_INTERPOL + PITCH_DELAY_MAX + 5*SUBFR_SIZE];
+
+ DECLARE_ALIGNED_16(float, synth_buf[LP_FILTER_ORDER + 5*SUBFR_SIZE + 6]);
+
+ float lsp_history[LP_FILTER_ORDER];
+ float gain_mem;
+ float energy_history[4];
+ float highpass_filt_mem[2];
+ float postfilter_mem[PITCH_DELAY_MAX + LP_FILTER_ORDER];
+
+ /* 5k0 */
+ float tilt_mem;
+ float postfilter_agc;
+ float postfilter_mem5k0[PITCH_DELAY_MAX + LP_FILTER_ORDER];
+ float postfilter_syn5k0[LP_FILTER_ORDER + SUBFR_SIZE*5];
+} SiprContext;
+
+typedef struct {
+ int vq_indexes[5];
+ int pitch_delay[5]; ///< pitch delay
+ int gp_index[5]; ///< adaptive-codebook gain indexes
+ int16_t fc_indexes[5][10]; ///< fixed-codebook indexes
+ int gc_index[5]; ///< fixed-codebook gain indexes
+} SiprParameters;
+
+#endif /* AVCODEC_SIPR_H */