diff options
author | Vitor Sessak <vitor1001@gmail.com> | 2010-01-16 03:40:25 +0000 |
---|---|---|
committer | Vitor Sessak <vitor1001@gmail.com> | 2010-01-16 03:40:25 +0000 |
commit | 65323ed279c79a9e033b873beee6d5b3349cf2c4 (patch) | |
tree | a16fe6dc1bc6c5b1eb37a9dac7cab9e9ff633c8a | |
parent | 06cb7a1c8f4965e45f4e102d69c0efc0dadb8eec (diff) | |
download | ffmpeg-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.c | 54 | ||||
-rw-r--r-- | libavcodec/sipr.h | 83 |
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 */ |