[FFmpeg-devel] [PATCH] WMA Voice decoder
Ronald S. Bultje
rsbultje
Wed Jan 20 01:38:33 CET 2010
Hi,
my first decoder, please be kind. :-).
Ronald
-------------- next part --------------
Index: ffmpeg-svn/libavcodec/Makefile
===================================================================
--- ffmpeg-svn.orig/libavcodec/Makefile 2010-01-11 12:01:17.000000000 -0500
+++ ffmpeg-svn/libavcodec/Makefile 2010-01-19 19:30:17.000000000 -0500
@@ -330,6 +330,7 @@
OBJS-$(CONFIG_WMAV1_ENCODER) += wmaenc.o wma.o
OBJS-$(CONFIG_WMAV2_DECODER) += wmadec.o wma.o
OBJS-$(CONFIG_WMAV2_ENCODER) += wmaenc.o wma.o
+OBJS-$(CONFIG_WMAVOICE_DECODER) += wmavoice.o
OBJS-$(CONFIG_WMV2_DECODER) += wmv2dec.o wmv2.o \
msmpeg4.o msmpeg4data.o \
intrax8.o intrax8dsp.o
Index: ffmpeg-svn/libavcodec/allcodecs.c
===================================================================
--- ffmpeg-svn.orig/libavcodec/allcodecs.c 2010-01-11 12:01:16.000000000 -0500
+++ ffmpeg-svn/libavcodec/allcodecs.c 2010-01-11 12:03:28.000000000 -0500
@@ -246,6 +246,7 @@
REGISTER_DECODER (WMAPRO, wmapro);
REGISTER_ENCDEC (WMAV1, wmav1);
REGISTER_ENCDEC (WMAV2, wmav2);
+ REGISTER_DECODER (WMAVOICE, wmavoice);
REGISTER_DECODER (WS_SND1, ws_snd1);
/* PCM codecs */
Index: ffmpeg-svn/libavcodec/wmavoice.c
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ffmpeg-svn/libavcodec/wmavoice.c 2010-01-19 19:34:40.000000000 -0500
@@ -0,0 +1,1523 @@
+/*
+ * Windows Media Audio Voice decoder.
+ * Copyright (c) 2009 Ronald S. Bultje
+ *
+ * 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
+ */
+
+/**
+ * @file libavcodec/wmavoice.c
+ * @brief Windows Media Audio Voice compatible decoder
+ * @author Ronald S. Bultje <rsbultje at gmail.com>
+ */
+
+#include <math.h>
+#include "avcodec.h"
+#include "get_bits.h"
+#include "put_bits.h"
+#include "wmavoice_data.h"
+#include "celp_math.h"
+#include "celp_filters.h"
+#include "acelp_vectors.h"
+#include "lsp.h"
+
+#define MAX_BLOCKS 8 ///< maximum number of blocks per frame
+#define MAX_LSPS 16 ///< maximum filter order
+#define MAX_FRAMES 3 ///< maximum number of frames per superframe
+#define MAX_FRAMESIZE 160 ///< maximum number of samples per frame
+#define MAX_SIGNAL_HISTORY 416 ///< maximum excitation signal history
+#define MAX_SFRAMESIZE (MAX_FRAMESIZE * MAX_FRAMES)
+ ///< maximum number of samples per superframe
+#define SFRAME_CACHE_SIZE 256 ///< maximum cache size for frame data that
+ ///< was split over two packets
+
+/**
+ * Description of frame types.
+ */
+static const struct frame_type_desc {
+ short n_blocks, ///< amount of blocks per frame
+ ///< (each block contains 160/#n_blocks samples)
+ acb_type, ///< Adaptive codebook type in frame/block:
+ ///< - 0: fixed codebook with per-block/frame gain,
+ ///< - 1: adaptive codebook with per-frame pitch,
+ ///< - 2: adaptive codebook with per-block pitch
+ fcb_type, ///< Fixed codebook type in frame/block:
+ ///< - 0: hardcoded codebook, per-frame gain,
+ ///< - 1: hardcoded codebook, per-block gain,
+ ///< - 2: pitch-adaptive window (AW) pulse signal,
+ ///< - 4-6: innovation (fixed) codebook pulses
+ dbl_pulses, ///< how many pulse vectors have pulse pairs
+ ///< (rather than just one single pulse)
+ ///< only if #fcb_type >= 4 && <= 6
+ frame_size; ///< the amount of bits that make up the block
+ ///< data (per frame)
+} frame_descs[17] = {
+ { 1, 0, 0, 0, 0 },
+ { 2, 0, 1, 0, 28 },
+ { 2, 1, 2, 0, 46 },
+ { 2, 1, 4, 2, 80 },
+ { 2, 1, 4, 5, 104 },
+ { 4, 1, 5, 0, 108 },
+ { 4, 1, 5, 2, 132 },
+ { 4, 1, 5, 5, 168 },
+ { 2, 2, 4, 0, 64 },
+ { 2, 2, 4, 2, 80 },
+ { 2, 2, 4, 5, 104 },
+ { 4, 2, 5, 0, 108 },
+ { 4, 2, 5, 2, 132 },
+ { 4, 2, 5, 5, 168 },
+ { 8, 2, 6, 0, 176 },
+ { 8, 2, 6, 2, 208 },
+ { 8, 2, 6, 5, 256 }
+};
+
+/**
+ * WMA Voice decoding context.
+ */
+typedef struct {
+ /**
+ * @defgroup struct_global Global values
+ * Global values, specified in the stream header / extradata or used
+ * all over.
+ * @{
+ */
+ GetBitContext gb; ///< packet bitreader
+ int block_align; ///< as specified by the demuxer (should
+ ///< really be called "packet_align")
+
+ int spillover_bitsize; ///< number of bits used to specify
+ ///< #spillover_nbits in the packet header
+ ///< = ceil(log2(#block_align << 3))
+ int do_apf; ///< whether to apply the averaged
+ ///< projection filter (APF)
+ int frequency_domain; ///< defines which table to use during APF
+ ///< frequency domain filtering [0-7]
+ int spectrum_corr; ///< whether to do spectrum tilt correction
+ ///< in APF
+ int apf_project_mode; ///< defines the filter projection mode in
+ ///< APF [0-7]
+ uint8_t vbm_tree[25]; ///< variable bit mode coding tree
+ int history_nsamples; ///< number of samples in history for signal
+ ///< prediction (through ACB)
+
+ int lsps; ///< number of LSPs per frame [10 or 16]
+ int lsp_q_mode; ///< defines quantizer defaults [0, 1]
+ int lsp_def_mode; ///< defines different sets of LSP defaults
+ ///< [0, 1]
+ int frame_lsp_bitsize; ///< size (in bits) of LSPs, when encoded
+ ///< per-frame (independent coding)
+ int sframe_lsp_bitsize; ///< size (in bits) of LSPs, when encoded
+ ///< per superframe (residual coding)
+
+ int min_pitch_val; ///< base value for pitch parsing code
+ int max_pitch_val; ///< max value + 1 for pitch parsing
+ int pitch_nbits; ///< number of bits used to specify the
+ ///< pitch value in the frame header
+ int block_pitch_nbits; ///< number of bits used to specify the
+ ///< first block's pitch value
+ int block_pitch_range; ///< range of the block pitch
+ int block_delta_pitch_nbits; ///< number of bits used to specify the
+ ///< delta pitch between this and the last
+ ///< block's pitch value, used in all but
+ ///< first block
+ int block_delta_pitch_hrange; ///< 1/2 range of the delta (full range is
+ ///< from -this to +this-1)
+ uint16_t block_conv_table[4]; ///< boundaries for block pitch unit/scale
+ ///< conversion
+
+ /**
+ * @}
+ * @defgroup struct_packet Packet values
+ * Packet values, specified in the packet header or related to a packet.
+ * A packet is considered to be a single unit of data provided to this
+ * decoder by the demuxer.
+ * @{
+ */
+ int spillover_nbits; ///< number of bits of the previous packet's
+ ///< last superframe preceeding this
+ ///< packet's first full superframe (useful
+ ///< for re-synchronization also)
+ int has_residual_lsps; ///< if set, superframes contain one set of
+ ///< LSPs that cover all frames, encoded as
+ ///< independent and residual LSPs; if not
+ ///< set, each frame contains its own, fully
+ ///< independent, LSPs
+ int skip_bits_next; ///< number of bits to skip at the next call
+ ///< to #wmavoice_decode_packet() (since
+ ///< they're part of the previous superframe)
+
+ uint8_t sframe_cache[SFRAME_CACHE_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
+ ///< cache for superframe data split over
+ ///< multiple packets
+ PutBitContext pb; ///< points into #sframe_cache
+ int cache_sframe_size; ///< set to >0 if we have data from an
+ ///< (incomplete) superframe from a previous
+ ///< packet that spilled over in the current
+ ///< packet; specifies the amount of bits in
+ ///< #sframe_cache
+
+ /**
+ * @}
+ * @defgroup struct_frame Frame and superframe values
+ * Superframe and frame data - these can change from frame to frame,
+ * although some of them do in that case serve as a cache / history for
+ * the next frame or superframe.
+ * @{
+ */
+ double prev_lsps[MAX_LSPS]; ///< LSPs of the last frame of the previous
+ ///< superframe
+ int cur_pitch_val; ///< pitch value of the current frame
+ int last_pitch_val; ///< pitch value of the previous frame
+ int last_acb_type; ///< frame type [0-2] of the previous frame
+ int pitch_diff_sh16; ///< ((#cur_pitch_val - #last_pitch_val)
+ ///< << 16) / #MAX_FRAME_SIZE
+ float silence_gain; ///< set for use in blocks if acb_type == 0
+
+ int aw_idx_is_ext; ///< whether the AW index was encoded in
+ ///< 8 bits (instead of 6)
+ int aw_pitch_range;
+ short aw_n_pulses[2]; ///< number of AW-pulses in each block
+ short aw_first_pulse_off[2]; ///< index of first sample to which to
+ ///< apply AW-pulses, or -0xff if unset
+ int aw_next_pulse_off_cache;
+
+ int frame_cntr; ///< current frame index [0 - 0xFFFF]
+ float gain_pred_err[6]; ///< cache for future gain prediction
+ float excitation_history[MAX_SIGNAL_HISTORY];
+ ///< cache of the signal of previous
+ ///< superframes, used as a history for
+ ///< future signal generation
+ float synth_history[MAX_LSPS]; ///< see #excitation_history
+ /**
+ * @}
+ */
+} WMAVoiceContext;
+
+/**
+ * Sets up the variable bit mode (VBM) tree from container extradata.
+ * @param s WMA Voice decoding context.
+ * The bit context (s->gb) should be loaded with byte 23-46 of the
+ * container extradata (i.e. the ones containing the VBM tree).
+ * @return 0 on success, <0 on error.
+ */
+static int
+decode_vbmtree(WMAVoiceContext *s)
+{
+ GetBitContext *gb = &s->gb;
+ unsigned int cntr[8], n, res;
+
+ memset(s->vbm_tree, (uint8_t) -1, sizeof(s->vbm_tree));
+ memset(cntr, 0, sizeof(cntr));
+ for (n = 0; n < 17; n++) {
+ res = get_bits(gb, 3);
+ if (cntr[res] >= 3 + (res == 7))
+ return -1;
+ s->vbm_tree[res * 3 + cntr[res]++] = n;
+ }
+
+ return 0;
+}
+
+/**
+ * Initialize decoder.
+ */
+static int
+wmavoice_decode_init(AVCodecContext *ctx)
+{
+ int n, flags, pitch_range;
+ WMAVoiceContext *s = ctx->priv_data;
+
+ /**
+ * Extradata layout:
+ * - byte 0-18: WMAPro-in-WMAVoice extradata (see wmaprodec.c),
+ * - byte 19-22: flags field (annoyingly in LE; see below for known
+ * values),
+ * - byte 23-46: variable bitmode tree (really just 25 * 3 bits,
+ * rest is 0).
+ */
+ if (ctx->extradata_size != 0x2E) {
+ av_log(ctx, AV_LOG_ERROR,
+ "Invalid extradata size 0x%x != 0x2E\n", ctx->extradata_size);
+ return -1;
+ }
+ flags = AV_RL32(ctx->extradata + 18);
+ s->block_align = ctx->block_align;
+ s->spillover_bitsize = 3 + av_ceil_log2(ctx->block_align);
+ s->do_apf = flags & 0x1;
+ s->frequency_domain = (flags >> 2) & 0xF;
+ s->spectrum_corr = flags & 0x40;
+ s->apf_project_mode = (flags >> 7) & 0xF;
+ s->lsp_q_mode = flags & 0x2000;
+ s->lsp_def_mode = flags & 0x4000;
+ if (flags & 0x1000) {
+ s->lsps = 16;
+ s->frame_lsp_bitsize = 34;
+ s->sframe_lsp_bitsize = 60;
+ } else {
+ s->lsps = 10;
+ s->frame_lsp_bitsize = 24;
+ s->sframe_lsp_bitsize = 48;
+ }
+ for (n = 0; n < s->lsps; n++)
+ s->prev_lsps[n] = M_PI * (n + 1.0) / (s->lsps + 1.0);
+
+ init_get_bits(&s->gb, ctx->extradata + 22, (ctx->extradata_size - 22) << 3);
+ if (decode_vbmtree(s) < 0) {
+ av_log(ctx, AV_LOG_ERROR, "Invalid VBM tree\n");
+ return -1;
+ }
+
+ s->min_pitch_val = ((int) ((ctx->sample_rate << 8) * 0.0025) + 50) >> 8;
+ s->max_pitch_val = ((int) ((ctx->sample_rate << 8) * 0.0185) + 50) >> 8;
+ pitch_range = s->max_pitch_val - s->min_pitch_val;
+ s->pitch_nbits = av_ceil_log2(pitch_range);
+ s->last_pitch_val = 40;
+ s->last_acb_type = 0;
+ s->history_nsamples = s->max_pitch_val + 8;
+ if (s->history_nsamples > MAX_SIGNAL_HISTORY) {
+ av_log(ctx, AV_LOG_ERROR, "Signal history too big: %d (max=%d), probably broken file\n",
+ s->history_nsamples, MAX_SIGNAL_HISTORY);
+ return -1;
+ }
+
+ s->block_conv_table[0] = s->min_pitch_val;
+ s->block_conv_table[1] = (pitch_range * 25) >> 6;
+ s->block_conv_table[2] = (pitch_range * 44) >> 6;
+ s->block_conv_table[3] = s->max_pitch_val - 1;
+ s->block_delta_pitch_hrange = (pitch_range >> 3) & ~0xF;
+ s->block_delta_pitch_nbits = 1 + av_ceil_log2(s->block_delta_pitch_hrange);
+ s->block_pitch_range = s->block_conv_table[2] +
+ s->block_conv_table[3] + 1 +
+ 2 * (s->block_conv_table[1] -
+ (2 * s->min_pitch_val));
+ s->block_pitch_nbits = av_ceil_log2(s->block_pitch_range);
+
+ ctx->sample_fmt = SAMPLE_FMT_FLT;
+
+ return 0;
+}
+
+/**
+ * Read an integer coded as a variable-bit number.
+ * @param gb bit I/O context
+ */
+static int
+get_vbm_bits(GetBitContext *gb)
+{
+ int n, res;
+
+ for (n = 0; ; n++) {
+ res = get_bits(gb, 2);
+ if (res < 3 || n == 6 /** don't increase n to 7 */)
+ break;
+ }
+
+ return 3 * n + res;
+}
+
+/**
+ * Dequantize LSPs
+ * @param lsps pointer to an array of LSPs, holding at least @num values
+ * @param num number of LSPs to be dequantized
+ * @param values quantized values, contains @n_stages values
+ * @param sizes range (well, max. value) of each quantized value in @values
+ * @param n_stages number of dequantization runs
+ * @param table dequantization table to be used
+ * @param mul_q LSF multiplier
+ * @param base_q base (lowest) LSF values
+ */
+static void
+dequant_lsps(double *lsps, int num,
+ const uint16_t *values, const uint16_t *sizes, int n_stages,
+ const uint8_t *table, const double *mul_q, const double *base_q)
+{
+ int n, m;
+
+ for (n = 0; n < num; n++) lsps[n] = 0.0;
+ for (n = 0; n < n_stages; table += sizes[n++] * num) {
+ for (m = 0; m < num; m++)
+ lsps[m] += base_q[n] + mul_q[n] * table[m + values[n] * num];
+ }
+}
+
+/**
+ * @defgroup lsp_dequant LSP dequantization routines
+ * LSP dequantization routines, for 10/16LSPs and independent/residual coding.
+ * @note we assume enough bits are available, caller should check.
+ * lsp10i() consumes 24 bits; lsp10r() consumes an additional 24 bits;
+ * lsp16i() consumes 34 bits; lsp16r() consumes an additional 26 bits.
+ * @{
+ */
+/**
+ * Parse 10 independently-coded LSPs.
+ */
+static void
+dequant_lsp10i(GetBitContext *gb, double *lsps)
+{
+ static const uint16_t vec_sizes[4] = { 256, 64, 32, 32 };
+ static const double mul_lsf[4] = {
+ 5.2187144800e-3, 1.4626986422e-3,
+ 9.6179549166e-4, 1.1325736225e-3
+ }, base_lsf[4] = {
+ M_PI * -2.15522e-1, M_PI * -6.1646e-2,
+ M_PI * -3.3486e-2, M_PI * -5.7408e-2
+ };
+ uint16_t v[4];
+
+ v[0] = get_bits(gb, 8);
+ v[1] = get_bits(gb, 6);
+ v[2] = get_bits(gb, 5);
+ v[3] = get_bits(gb, 5);
+
+ dequant_lsps(lsps, 10, v, vec_sizes, 4, ff_wmavoice_dq_lsp10i,
+ mul_lsf, base_lsf);
+}
+
+/**
+ * Parse 10 independently-coded LSPs, and then derive the tables to
+ * generate LSPs for the other frames from them (residual coding).
+ */
+static void
+dequant_lsp10r(GetBitContext *gb, double *i_lsps, const double *old,
+ double *a1, double *a2, int q_mode)
+{
+ static const uint16_t vec_sizes[3] = { 0x80, 0x40, 0x40 };
+ static const double mul_lsf[3] = {
+ 2.5807601174e-3, 1.2354460219e-3, 1.1763821673e-3
+ }, base_lsf[3] = {
+ M_PI * -1.07448e-1, M_PI * -5.2706e-2, M_PI * -5.1634e-2
+ };
+ const float (*ipol_tab)[2][10] = q_mode ?
+ ff_wmavoice_lsp10_intercoeff_b : ff_wmavoice_lsp10_intercoeff_a;
+ uint16_t interpol, v[3];
+ int n;
+
+ dequant_lsp10i(gb, i_lsps);
+
+ interpol = get_bits(gb, 5);
+ v[0] = get_bits(gb, 7);
+ v[1] = get_bits(gb, 6);
+ v[2] = get_bits(gb, 6);
+
+ for (n = 0; n < 10; n++) {
+ a1[n] = ipol_tab[interpol][0][n] * (old[n] - i_lsps[n]) +
+ i_lsps[n];
+ a1[10 + n] = ipol_tab[interpol][1][n] * (old[n] - i_lsps[n]) +
+ i_lsps[n];
+ }
+
+ dequant_lsps(a2, 20, v, vec_sizes, 3, ff_wmavoice_dq_lsp10r,
+ mul_lsf, base_lsf);
+}
+
+/**
+ * Parse 16 independently-coded LSPs.
+ */
+static void
+dequant_lsp16i(GetBitContext *gb, double *lsps)
+{
+ static const uint16_t vec_sizes[5] = { 256, 64, 128, 64, 128 };
+ static const double mul_lsf[5] = {
+ 3.3439586280e-3, 6.9908173703e-4,
+ 3.3216608306e-3, 1.0334960326e-3,
+ 3.1899104283e-3
+ }, base_lsf[5] = {
+ M_PI * -1.27576e-1, M_PI * -2.4292e-2,
+ M_PI * -1.28094e-1, M_PI * -3.2128e-2,
+ M_PI * -1.29816e-1
+ };
+ uint16_t v[5];
+
+ v[0] = get_bits(gb, 8);
+ v[1] = get_bits(gb, 6);
+ v[2] = get_bits(gb, 7);
+ v[3] = get_bits(gb, 6);
+ v[4] = get_bits(gb, 7);
+
+ dequant_lsps( lsps, 5, v, vec_sizes, 2,
+ ff_wmavoice_dq_lsp16i1, mul_lsf, base_lsf);
+ dequant_lsps(&lsps[5], 5, &v[2], &vec_sizes[2], 2,
+ ff_wmavoice_dq_lsp16i2, &mul_lsf[2], &base_lsf[2]);
+ dequant_lsps(&lsps[10], 6, &v[4], &vec_sizes[4], 1,
+ ff_wmavoice_dq_lsp16i3, &mul_lsf[4], &base_lsf[4]);
+}
+
+/**
+ * Parse 16 independently-coded LSPs, and then derive the tables to
+ * generate LSPs for the other frames from them (residual coding).
+ */
+static void
+dequant_lsp16r(GetBitContext *gb, double *i_lsps, const double *old,
+ double *a1, double *a2, int q_mode)
+{
+ static const uint16_t vec_sizes[3] = { 0x80, 0x80, 0x80 };
+ static const double mul_lsf[3] = {
+ 1.2232979501e-3, 1.4062241527e-3, 1.6114744851e-3
+ }, base_lsf[3] = {
+ M_PI * -5.5830e-2, M_PI * -5.2908e-2, M_PI * -5.4776e-2
+ };
+ const float (*ipol_tab)[2][16] = q_mode ?
+ ff_wmavoice_lsp16_intercoeff_b : ff_wmavoice_lsp16_intercoeff_a;
+ uint16_t interpol, v[3];
+ int n;
+
+ dequant_lsp16i(gb, i_lsps);
+
+ interpol = get_bits(gb, 5);
+ v[0] = get_bits(gb, 7);
+ v[1] = get_bits(gb, 7);
+ v[2] = get_bits(gb, 7);
+
+ for (n = 0; n < 16; n++) {
+ a1[n] = ipol_tab[interpol][0][n] * (old[n] - i_lsps[n]) +
+ i_lsps[n];
+ a1[16 + n] = ipol_tab[interpol][1][n] * (old[n] - i_lsps[n]) +
+ i_lsps[n];
+ }
+
+ dequant_lsps( a2, 10, v, vec_sizes, 1,
+ ff_wmavoice_dq_lsp16r1, mul_lsf, base_lsf);
+ dequant_lsps(&a2[10], 10, &v[1], &vec_sizes[1], 1,
+ ff_wmavoice_dq_lsp16r2, &mul_lsf[1], &base_lsf[1]);
+ dequant_lsps(&a2[20], 12, &v[2], &vec_sizes[2], 1,
+ ff_wmavoice_dq_lsp16r3, &mul_lsf[2], &base_lsf[2]);
+}
+
+/**
+ * @}
+ * @defgroup aw Pitch-adaptive window coding functions
+ * The next few functions are for pitch-adaptive window coding.
+ * @{
+ */
+/**
+ * Parse the offset of the first pitch-adaptive window pulses, and
+ * the distribution of pulses between the two blocks in this frame.
+ * @param ctx WMA Voice decoding context
+ * @param gb bit I/O context
+ * @param pitch pitch for each block in this frame
+ */
+
+static void aw_parse_coords(AVCodecContext *ctx, GetBitContext *gb,
+ const short *pitch)
+{
+ static const uint8_t start_offset[94] = {
+ 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22,
+ 24, 26, 29, 28, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 46, 48, 50, 52, 54,
+ 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78,
+ 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102,
+ 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126,
+ 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150,
+ 152, 154, 156, 158, 160, 162, 164, 166, 168, 170
+ };
+ WMAVoiceContext *s = ctx->priv_data;
+ int bits, n, offset;
+ short off_table[11], first_idx[2];
+
+ s->aw_idx_is_ext = 0;
+ if ((bits = get_bits(gb, 6)) >= 54) {
+ s->aw_idx_is_ext = 1;
+ bits += (bits - 54) * 3 + get_bits(gb, 2);
+ }
+ s->aw_pitch_range = 16 + 8 * (FFMIN(pitch[0], pitch[1]) > 32);
+
+#define NO_OFFSET -0xff
+ for (offset = start_offset[bits] - 11, n = 0;
+ offset < MAX_FRAMESIZE + s->aw_pitch_range / 2 && n < 11;
+ offset += pitch[offset >= MAX_FRAMESIZE / 2], n++)
+ off_table[n] = offset;
+ while (n < 11) off_table[n++] = NO_OFFSET;
+
+ s->aw_n_pulses[0] = s->aw_n_pulses[1] = 0;
+ s->aw_first_pulse_off[0] = s->aw_first_pulse_off[1] = NO_OFFSET;
+ first_idx[0] = first_idx[1] = 0;
+ for (n = 0; n < 11; n++) {
+ if (off_table[n] >= MAX_FRAMESIZE / 2) {
+ if (off_table[n] < MAX_FRAMESIZE) { ///< block[1]
+ if (s->aw_n_pulses[1]++ == 0) {
+ s->aw_first_pulse_off[1] = off_table[n] -
+ (MAX_FRAMESIZE + s->aw_pitch_range) / 2;
+ first_idx[1] = n;
+ }
+ }
+ } else if (off_table[n] >= 0) { ///< block[0]
+ if (s->aw_n_pulses[0]++ == 0) {
+ s->aw_first_pulse_off[0] =
+ off_table[n] - s->aw_pitch_range / 2;
+ first_idx[0] = n;
+ }
+ }
+ }
+ if (first_idx[0] > 0)
+ while (s->aw_first_pulse_off[0] - pitch[0] + s->aw_pitch_range > 0)
+ s->aw_first_pulse_off[0] -= pitch[0];
+ if (first_idx[1] > 0)
+ while (s->aw_first_pulse_off[1] - pitch[1] + s->aw_pitch_range > 0)
+ s->aw_first_pulse_off[1] -= pitch[1];
+}
+
+/**
+ * Apply second set of pitch-adaptive window pulses.
+ * @param s WMA Voice decoding context private data
+ * @param gb bit I/O context
+ * @param block_idx block index in frame [0, 1]
+ * @param pitch pitch for this block
+ * @param out target vector to apply pulses to
+ * @param size size of @out vector
+ */
+static void aw_pulse_set2(WMAVoiceContext *s, GetBitContext *gb,
+ int block_idx, int pitch, float *out, int size)
+{
+ short arr2[32];
+ unsigned int arr1[3];
+ int pulse_off = s->aw_first_pulse_off[block_idx],
+ pulse_start, n, m, idx, range;
+ float v;
+
+ assert(size == MAX_FRAMESIZE / 2);
+ if (pulse_off != NO_OFFSET)
+ while (pulse_off + s->aw_pitch_range < 1) pulse_off += pitch;
+
+ if (s->aw_n_pulses[0]) {
+ if (block_idx == 0) {
+ range = 32;
+ } else { ///< block_idx == 1
+ range = 8;
+ if (pulse_off != NO_OFFSET) pulse_off = s->aw_next_pulse_off_cache;
+ }
+ } else {
+ range = 16;
+ }
+ pulse_start = pulse_off != NO_OFFSET ? pulse_off - range / 2 : 0;
+
+ arr1[0] = arr1[1] = arr1[2] = -1;
+#define BIT_IS_SET(idx) arr1[idx >> 5] & (1 << (idx & 31))
+#define UNSET_BIT(idx) arr1[idx >> 5] &= ~(1 << (idx & 31))
+ memset(arr2, 0, sizeof(arr2));
+
+ if (pulse_off != NO_OFFSET) for (n = 0; n < 11; n++) {
+ m = pulse_off + n * pitch;
+ for (idx = m; idx < m + s->aw_pitch_range; idx++)
+ if (idx >= 0 && idx < size) UNSET_BIT(idx);
+ }
+
+ for (n = 0, m = 0; m < 500 && n < range; pulse_start++, m++) {
+ for (idx = pulse_start; idx < 0; idx += pitch);
+ if (idx >= size) {
+ for (idx = 0; idx < size; idx++)
+ if (BIT_IS_SET(idx)) break;
+ if (idx >= size) continue;
+ }
+ if (BIT_IS_SET(idx)) {
+ arr2[n++] = idx;
+ UNSET_BIT(idx);
+ }
+ }
+
+ idx = get_bits(gb, s->aw_n_pulses[0] ? 5 - 2 * block_idx : 4);
+ v = get_bits1(gb) ? -1.0 : 1.0;
+ for (n = arr2[idx]; n < size; n += pitch)
+ out[n] += v;
+
+ s->aw_next_pulse_off_cache = n - size; ///< relative to start of block
+}
+
+/**
+ * Apply first set of pitch-adaptive window pulses.
+ * @param s WMA Voice decoding context private data
+ * @param gb bit I/O context
+ * @param block_idx block index in frame [0, 1]
+ * @param pitch pitch for this block
+ * @param out target vector to apply pulses to
+ * @param size size of @out vector
+ */
+static void aw_pulse_set1(WMAVoiceContext *s, GetBitContext *gb,
+ int block_idx, int pitch, float *out, int size)
+{
+ int val = get_bits(gb, 12 - 2 * (s->aw_idx_is_ext && !block_idx));
+ float v;
+
+ memset(out, 0, sizeof(float) * size);
+
+ assert(size == MAX_FRAMESIZE / 2);
+ if (s->aw_n_pulses[block_idx]) {
+ int n, m;
+
+ if (s->aw_pitch_range == 24) { ///< 3 pulses, 1:sign + 3:index each
+ for (n = 0; n < 3; n++, val >>= 4) {
+ v = val & 8 ? -1.0 : 1.0;
+ for (m = (val & 7) * 3 - n + 2 + s->aw_first_pulse_off[block_idx];
+ m < size; m += pitch) {
+ if (m >= 0) out[m] = v;
+ }
+ }
+ } else { ///< 4 pulses, 1:sign + 2:index each
+ for (n = 0; n < 4; n++, val >>= 3) {
+ v = val & 4 ? -1.0 : 1.0;
+ for (m = (val & 3) * 4 - n + 3 + s->aw_first_pulse_off[block_idx];
+ m < size; m += pitch) {
+ if (m >= 0) out[m] = v;
+ }
+ }
+
+ }
+ } else {
+ int num2 = (val & 0x1FF) >> 1, delta, idx;
+
+ if (num2 < 79) delta = 1;
+ else if (num2 < 156) delta = 2;
+ else if (num2 < 231) delta = 3;
+ else delta = 4;
+ idx = (delta * delta + num2) % 80;
+ delta += delta - 1;
+
+ v = (val & 0x200) ? -1.0 : 1.0;
+ out[idx - delta] = v;
+ out[idx] = (val & 1) ? -v : v;
+ }
+}
+
+/**
+ * @}
+ *
+ * Generate a random number that is different for each frame/block
+ * and can be used as an index for a table with 1000 entries, if
+ * we want to read @block_size entries following.
+ *
+ * @param frame_cntr current frame number
+ * @param block_num current block index
+ * @param block_size amount of entries we want to read from a table
+ * that has 1000 entries
+ * @returns a unique random number for each @block_cntr/@block_num
+ * combination, which can be used as index in a table that
+ * has a 1000 entries from which we want to read @block_size
+ * entries.
+ */
+
+static int
+pRNG(int frame_cntr, int block_num, int block_size)
+{
+ int x = (block_num * 1877 + frame_cntr) % 0xFFFF;
+ int y = (x % 9) * 5 + 6;
+ int z = (uint16_t) (x * 49995 / y);
+ return z % (1000 - block_size);
+}
+
+/**
+ * Parse hardcoded signal for a single block.
+ * @note see synth_block().
+ */
+
+static void synth_block_hardcoded(AVCodecContext *ctx, GetBitContext *gb,
+ int block_idx, int size,
+ const struct frame_type_desc *frame_desc,
+ float *excitation)
+{
+ WMAVoiceContext *s = ctx->priv_data;
+ float gain;
+ int n, r_idx;
+
+ assert(size <= MAX_FRAMESIZE);
+
+ /**
+ * For acb_type==0, this is where we set up the index to start reading
+ * from @std_codebook from.
+ */
+ switch (frame_desc->fcb_type) {
+ case 0: { ///< silence
+ r_idx = pRNG(s->frame_cntr, block_idx, size);
+ gain = s->silence_gain;
+ break;
+ }
+
+ case 1: { ///< explicit (hardcoded) codebook signal
+ r_idx = get_bits(gb, 8);
+ gain = ff_wmavoice_gain_universal[get_bits(gb, 6)];
+ break;
+ }
+ }
+
+ /**
+ * Clear gain prediction parameters.
+ */
+ memset(s->gain_pred_err, 0, sizeof(s->gain_pred_err));
+
+ /**
+ * Apply gain to hardcoded codebook and use that as excitation signal.
+ */
+ for (n = 0; n < size; n++)
+ excitation[n] = ff_wmavoice_std_codebook[r_idx + n] * gain;
+}
+
+/**
+ * Parse FCB/ACB signal for a single block.
+ * @note see synth_block().
+ */
+
+static void synth_block_fcb_acb(AVCodecContext *ctx, GetBitContext *gb,
+ int block_idx, int size,
+ int block_pitch_sh2,
+ const struct frame_type_desc *frame_desc,
+ float *excitation)
+{
+ static const float gain_coeff[6] = {
+ 0.8169, -0.06545, 0.1726, 0.0185, -0.0359, 0.0458
+ };
+ WMAVoiceContext *s = ctx->priv_data;
+ float pulses[MAX_FRAMESIZE / 2], pred_err, acb_gain, fcb_gain;
+ int n, idx;
+
+ assert(size <= MAX_FRAMESIZE / 2);
+
+ /**
+ * For the other frame types, this is where we apply the innovation
+ * (fixed) codebook pulses of the speech signal.
+ */
+ switch (frame_desc->fcb_type) {
+ case 2: ///< pitch-adapting window (AW) fixed codebook
+ aw_pulse_set1(s, gb, block_idx, block_pitch_sh2 >> 2,
+ pulses, size);
+
+ aw_pulse_set2(s, gb, block_idx, block_pitch_sh2 >> 2,
+ pulses, size);
+ break;
+
+ case 4: case 5: case 6: { ///< innovation (fixed) codebook
+ int sh = 8 - frame_desc->fcb_type; ///< 4:4/5:3/6:2
+
+ memset(pulses, 0, sizeof(float) * size);
+ for (n = 0; n < 5; n++) {
+ float pulse = get_bits1(gb) ? 1.0 : -1.0;
+ int idx1, idx2;
+
+ idx1 = get_bits(gb, sh);
+ pulses[n + 5 * idx1] += pulse;
+ if (n < frame_desc->dbl_pulses) {
+ idx2 = get_bits(gb, sh);
+ pulses[n + 5 * idx2] +=
+ (idx1 >= idx2) ? pulse : -pulse;
+ }
+ }
+ break;
+ }
+ }
+
+ /**
+ * Calculate gain for adaptive & fixed codebook signal.
+ * @note see ff_amr_set_fixed_gain().
+ */
+ idx = get_bits(gb, 7);
+ fcb_gain = ff_wmavoice_gain_codebook_fcb[idx] *
+ expf(ff_dot_productf(s->gain_pred_err, gain_coeff, 6) -
+ 5.2409161640);
+ acb_gain = ff_wmavoice_gain_codebook_acb[idx];
+ pred_err = logf(av_clipf(ff_wmavoice_gain_codebook_fcb[idx], 0.05, 5.0));
+
+ if (frame_desc->n_blocks > 1)
+ memmove(&s->gain_pred_err[8 / frame_desc->n_blocks],
+ s->gain_pred_err,
+ sizeof(float) * (6 - 8 / frame_desc->n_blocks));
+ for (n = 0; n < 8 / frame_desc->n_blocks; n++)
+ s->gain_pred_err[n] = pred_err;
+
+ /**
+ * Calculation of adaptive codebook.
+ */
+ switch (frame_desc->acb_type) {
+ case 1: { ///< adaptive codebook
+ for (n = 0; n < size; n++) {
+ float v;
+ int pitch_sh8 = (s->last_pitch_val << 8) +
+ ((s->pitch_diff_sh16 * (block_idx * size + n)) >> 8);
+ int pitch = (pitch_sh8 + 0x80) >> 8,
+ idx = (((pitch << 8) - pitch_sh8) * 8 + 0x480) >> 8, m;
+ pitch -= idx >> 3;
+ idx &= 7;
+ for (v = 0., m = 16; m >= 0; m--) {
+ v += ff_wmavoice_ipol1_coeffs[idx][m] *
+ excitation[n + m - pitch - 8];
+ }
+ excitation[n] = v;
+ }
+ break;
+ }
+ case 2: { ///< adaptive codebook
+ int block_pitch = block_pitch_sh2 >> 2, idx = block_pitch_sh2 & 3;
+ if (idx--) {
+ for (n = 0; n < size; n++) {
+ float v;
+ int m;
+
+ for (v = 0., m = 0; m < 16; m++) {
+ v += ff_wmavoice_ipol2_coeffs[idx][m] *
+ excitation[m + n - 8 - block_pitch];
+ }
+ excitation[n] = v;
+ }
+ } else {
+ for (n = 0; n < size; n++)
+ excitation[n] = excitation[n - block_pitch];
+ }
+ break;
+ }
+ }
+
+ /**
+ * Interpolate ACB/FCB and use as excitation signal.
+ */
+ ff_weighted_vector_sumf(excitation, excitation, pulses,
+ acb_gain, fcb_gain, size);
+}
+
+/**
+ * Parse data in a single block.
+ * @note we assume enough bits are available, caller should check.
+ *
+ * @param ctx WMA Voice decoding context
+ * @param gb bit I/O context
+ * @param block_idx index of the to-be-read block
+ * @param size amount of samples to be read in this block
+ * @param block_pitch_sh2 pitch for this block << 2
+ * @param lsps LSPs for (the end of) this frame
+ * @param pre_lsps LSPs for the last frame
+ * @param frame_desc frame type descriptor
+ * @param excitation target memory for the ACB+FCB interpolated signal
+ * @param synth target memory for the speech synthesis filter output
+ * @return 0 on success, <0 on error.
+ */
+
+static void synth_block(AVCodecContext *ctx, GetBitContext *gb,
+ int block_idx, int size,
+ int block_pitch_sh2,
+ const double *lsps, const double *prev_lsps,
+ const struct frame_type_desc *frame_desc,
+ float *excitation, float *synth)
+{
+ WMAVoiceContext *s = ctx->priv_data;
+ double i_lsps[MAX_LSPS];
+ float lpcs[MAX_LSPS];
+ float fac;
+ int n;
+
+ if (frame_desc->acb_type == 0)
+ synth_block_hardcoded(ctx, gb, block_idx, size, frame_desc, excitation);
+ else
+ synth_block_fcb_acb(ctx, gb, block_idx, size, block_pitch_sh2,
+ frame_desc, excitation);
+
+ /** convert interpolated LSPs to LPCs */
+ fac = (block_idx + 0.5) / frame_desc->n_blocks;
+ for (n = 0; n < s->lsps; n++) ///< LSF -> LSP
+ i_lsps[n] = cos(prev_lsps[n] + fac * (lsps[n] - prev_lsps[n]));
+ ff_acelp_lspd2lpc(i_lsps, lpcs, s->lsps >> 1);
+
+ /**
+ * Speech synthesis.
+ */
+ ff_celp_lp_synthesis_filterf(synth, lpcs, excitation, size, s->lsps);
+}
+
+/**
+ * Synthesize output samples for a single frame.
+ * @note we assume enough bits are available, caller should check.
+ *
+ * @param ctx WMA Voice decoder context
+ * @param gb bit I/O context (s->gb or one for cross-packet superframes)
+ * @param data pointer to output sample buffer, has space for at least 160
+ * samples
+ * @param lsps LSP array
+ * @param prev_lsps array of previous frame's LSPs
+ * @return 0 on success, <0 on error.
+ */
+static int synth_frame(AVCodecContext *ctx, GetBitContext *gb,
+ float *samples,
+ const double *lsps, const double *prev_lsps,
+ float *excitation, float *synth)
+{
+ WMAVoiceContext *s = ctx->priv_data;
+ int n;
+ short pitch[MAX_BLOCKS], last_block_pitch;
+
+ /**
+ * Parse frame type ("frame header"), see #frame_descs.
+ */
+ int bd_idx = s->vbm_tree[get_vbm_bits(gb)],
+ block_nsamples = MAX_FRAMESIZE / frame_descs[bd_idx].n_blocks;
+
+ /**
+ * Pitch (per frame type):
+ * - type 0: unused
+ * - type 1: provided (globally) for the whole frame. In #synth_block(),
+ * we derive the "pitch-per-sample" for adaptive codebook
+ * reading.
+ * - type 2: provided per block (see just before the call to
+ * #parse_block()), so not read here.
+ */
+ switch (frame_descs[bd_idx].acb_type) {
+ case 0:
+ for (n = 0; n < frame_descs[bd_idx].n_blocks; n++)
+ pitch[n] = 0;
+ break;
+ case 1: {
+ int n_blocks_x2 = frame_descs[bd_idx].n_blocks << 1;
+
+ s->cur_pitch_val = s->min_pitch_val + get_bits(gb, s->pitch_nbits);
+ if (s->last_acb_type == 0 ||
+ 20 * abs(s->cur_pitch_val - s->last_pitch_val) >
+ (s->cur_pitch_val + s->last_pitch_val))
+ s->last_pitch_val = s->cur_pitch_val;
+
+ /** pitch per frame/block */
+ for (n = 0; n < frame_descs[bd_idx].n_blocks; n++) {
+ int fac = ((n << 1) | 1);
+
+ pitch[n] = (fac * s->cur_pitch_val +
+ (n_blocks_x2 - fac) * s->last_pitch_val +
+ frame_descs[bd_idx].n_blocks) / n_blocks_x2;
+ }
+
+ /** pitch per sample */
+ s->pitch_diff_sh16 =
+ ((s->cur_pitch_val - s->last_pitch_val) << 16) / MAX_FRAMESIZE;
+ break;
+ }
+ }
+
+ /**
+ * Global gain (if silence) and pitch-adaptive window coordinates.
+ */
+ switch (frame_descs[bd_idx].fcb_type) {
+ case 0:
+ s->silence_gain = ff_wmavoice_gain_silence[get_bits(gb, 8)];
+ break;
+ case 2:
+ aw_parse_coords(ctx, gb, pitch);
+ break;
+ }
+
+ for (n = 0; n < frame_descs[bd_idx].n_blocks; n++) {
+ int bl_pitch_sh2 = pitch[n] << 2;
+
+ /**
+ * If pitch is given per block, parse that first. Per-block pitches
+ * are encoded as an absolute value for the first block, and then
+ * delta values for all subsequent blocks. Unit is different (also
+ * scale is different), so we do some stupidly complex conversion.
+ */
+ if (frame_descs[bd_idx].acb_type == 2) {
+ int block_pitch,
+ t1 = (s->block_conv_table[1] - s->block_conv_table[0]) << 2,
+ t2 = (s->block_conv_table[2] - s->block_conv_table[1]) << 1,
+ t3 = s->block_conv_table[3] - s->block_conv_table[2] + 1;
+
+ if (n == 0) {
+ block_pitch = get_bits(gb, s->block_pitch_nbits);
+ } else
+ block_pitch = last_block_pitch - s->block_delta_pitch_hrange +
+ get_bits(gb, s->block_delta_pitch_nbits);
+ /**
+ * Convert last_ so that any next delta leads to a value within
+ * _range.
+ */
+ last_block_pitch = av_clip(block_pitch,
+ s->block_delta_pitch_hrange,
+ s->block_pitch_range -
+ s->block_delta_pitch_hrange);
+
+ /**
+ * Convert semi-log-style scale back to normal scale.
+ */
+ if (block_pitch < t1) {
+ bl_pitch_sh2 = (s->block_conv_table[0] << 2) + block_pitch;
+ } else {
+ block_pitch -= t1;
+ if (block_pitch < t2) {
+ bl_pitch_sh2 =
+ (s->block_conv_table[1] << 2) + (block_pitch << 1);
+ } else {
+ block_pitch -= t2;
+ if (block_pitch < t3) {
+ bl_pitch_sh2 =
+ (s->block_conv_table[2] + block_pitch) << 2;
+ } else {
+ bl_pitch_sh2 = s->block_conv_table[3] << 2;
+ }
+ }
+ }
+ pitch[n] = bl_pitch_sh2 >> 2;
+ }
+
+ synth_block(ctx, gb, n, block_nsamples, bl_pitch_sh2,
+ lsps, prev_lsps, &frame_descs[bd_idx],
+ &excitation[n * block_nsamples],
+ &synth[n * block_nsamples]);
+ }
+
+ /**
+ * Averaging projection filter, if applicable. Else, just copy samples
+ * from synthesis buffer.
+ */
+ if (s->do_apf) {
+ // FIXME this is where APF would take place, currently not implemented
+ av_log_missing_feature(ctx, "APF", 0);
+ s->do_apf = 0;
+ } //else
+ for (n = 0; n < 160; n++)
+ samples[n] = av_clipf(synth[n], -1.0, 1.0);
+
+ /**
+ * Cache values for next frame.
+ */
+ s->frame_cntr = (s->frame_cntr + 1) % 0xFFFF;
+ s->last_acb_type = frame_descs[bd_idx].acb_type;
+ switch (frame_descs[bd_idx].acb_type) {
+ case 0: s->last_pitch_val = 0; break;
+ case 1: s->last_pitch_val = s->cur_pitch_val; break;
+ case 2: s->last_pitch_val = pitch[frame_descs[bd_idx].n_blocks - 1];
+ break;
+ }
+
+ return 0;
+}
+
+/**
+ * Ensure minimum value for first item, maximum value for last value,
+ * proper spacing between each value and proper ordering.
+ *
+ * @param lsps array of LSPs
+ * @param num size of @lsps array
+ *
+ * @note basically a double version of ff_acelp_reorder_lsf(), might be
+ * useful to put in a generic location later on. Parts are also
+ * present in ff_set_min_dist_lsf() + ff_sort_nearly_sorted_floats(),
+ * which is in float.
+ */
+static void stabilize_lsps(double *lsps, int num)
+{
+ int n, m, l;
+
+ /** set minimum value for first, maximum value for last and minimum
+ * spacing between LSF values.
+ * @note very similar to ff_set_min_dist_lsf(), but in double. */
+ lsps[0] = FFMAX(lsps[0], 0.0015 * M_PI);
+ for (n = 1; n < num; n++)
+ lsps[n] = FFMAX(lsps[n], lsps[n - 1] + 0.0125 * M_PI);
+ lsps[num - 1] = FFMIN(lsps[num - 1], 0.9985 * M_PI);
+
+ /** reorder (looks like one-time / non-recursed bubblesort)
+ * @note very similar to ff_sort_nearly_sorted_floats(), but in double */
+ for (n = 1; n < num; n++) {
+ if (lsps[n] < lsps[n - 1]) {
+ for (m = 1; m < num; m++) {
+ double tmp = lsps[m];
+ for (l = m - 1; l >= 0; l--) {
+ if (lsps[l] <= tmp) break;
+ lsps[l + 1] = lsps[l];
+ }
+ lsps[l + 1] = tmp;
+ }
+ break;
+ }
+ }
+}
+
+/**
+ * Test if there's enough bits to read 1 superframe.
+ *
+ * @param orig_gb bit I/O context used for reading. This function
+ * does not modify the state of the bitreader; it
+ * only uses it to copy the current stream position
+ * @param s WMA Voice decoding context private data
+ * @returns -1 if unsupported, 1 on not enough bits or 0 if OK.
+ */
+static int check_bits_for_superframe(GetBitContext *orig_gb,
+ WMAVoiceContext *s)
+{
+ GetBitContext s_gb, *gb = &s_gb;
+ int n, need_bits, bd_idx;
+ const struct frame_type_desc *frame_desc;
+
+ /* initialize a copy */
+ init_get_bits(gb, orig_gb->buffer, orig_gb->size_in_bits);
+ skip_bits_long(gb, get_bits_count(orig_gb));
+ assert(get_bits_left(gb) == get_bits_left(orig_gb));
+
+ /* superframe header */
+ if (get_bits_left(gb) < 14)
+ return 1;
+ if (!get_bits1(gb))
+ return -1; ///< WMAPro-in-WMAVoice superframe
+ if (get_bits1(gb)) skip_bits(gb, 12); ///< number of samples in superframe
+ if (s->has_residual_lsps) { ///< residual LSPs (for all frames)
+ if (get_bits_left(gb) < s->sframe_lsp_bitsize)
+ return 1;
+ skip_bits_long(gb, s->sframe_lsp_bitsize);
+ }
+
+ /* frames */
+ for (n = 0; n < MAX_FRAMES; n++) {
+ int aw_idx_is_ext = 0;
+
+ if (!s->has_residual_lsps) { ///< independent LSPs (per-frame)
+ if (get_bits_left(gb) < s->frame_lsp_bitsize) return 1;
+ skip_bits_long(gb, s->frame_lsp_bitsize);
+ }
+ bd_idx = s->vbm_tree[get_vbm_bits(gb)]; ///< frame type ("header")
+ frame_desc = &frame_descs[bd_idx];
+ if (frame_desc->acb_type == 1) {
+ if (get_bits_left(gb) < s->pitch_nbits)
+ return 1;
+ skip_bits_long(gb, s->pitch_nbits);
+ }
+ if (frame_desc->fcb_type == 0) {
+ skip_bits(gb, 8);
+ } else if (frame_desc->fcb_type == 2) {
+ int tmp = get_bits(gb, 6);
+ if (tmp >= 0x36) {
+ skip_bits(gb, 2);
+ aw_idx_is_ext = 1;
+ }
+ }
+
+ /* blocks */
+ if (frame_desc->acb_type == 2) {
+ need_bits = s->block_pitch_nbits +
+ (frame_desc->n_blocks - 1) * s->block_delta_pitch_nbits;
+ } else if (frame_desc->fcb_type == 2) {
+ need_bits = 2 * !aw_idx_is_ext;
+ } else {
+ need_bits = 0;
+ }
+ need_bits += frame_desc->frame_size;
+ if (get_bits_left(gb) < need_bits)
+ return 1;
+ skip_bits_long(gb, need_bits);
+ }
+
+ return 0;
+}
+
+/**
+ * Synthesize output samples for a single superframe. If we have any data
+ * cached in s->sframe_cache, that will be used instead of whatever is loaded
+ * in s->gb.
+ *
+ * WMA Voice superframes contain 3 frames, each containing 160 audio samples,
+ * to give a total of 480 samples per frame. See #synth_frame() for frame
+ * parsing. In addition to 3 frames, superframes can also contain the LSPs
+ * (if these are globally specified for all frames (residually); they can
+ * also be specified individually per-frame. See the s->has_residual_lsps
+ * option), and can specify the number of samples encoded in this superframe
+ * (if less than 480), usually used to prevent blanks at track boundaries.
+ *
+ * @param s WMA Voice decoder context
+ * @param data pointer to output buffer for voice samples
+ * @param data_size pointer containing the size of @data on input, and the
+ * amount of @data filled on output
+ * @return 0 on success, <0 on error or 1 if there was not enough data to
+ * fully parse the superframe
+ */
+static int synth_superframe(AVCodecContext *ctx,
+ float *samples, int *data_size)
+{
+ WMAVoiceContext *s = ctx->priv_data;
+ GetBitContext *gb = &s->gb, s_gb;
+ int n, res, n_samples = 480;
+ double lsps[MAX_FRAMES][MAX_LSPS];
+ const double *mean_lsf = s->lsps == 16 ?
+ ff_wmavoice_mean_lsf16[s->lsp_def_mode] : ff_wmavoice_mean_lsf10[s->lsp_def_mode];
+ float excitation[MAX_SIGNAL_HISTORY + MAX_SFRAMESIZE];
+ float synth[MAX_LSPS + MAX_SFRAMESIZE];
+
+ memcpy(synth, s->synth_history,
+ s->lsps * sizeof(float));
+ memcpy(excitation, s->excitation_history,
+ s->history_nsamples * sizeof(float));
+
+ if (s->cache_sframe_size > 0) {
+ gb = &s_gb;
+ init_get_bits(gb, s->sframe_cache, s->cache_sframe_size);
+ s->cache_sframe_size = 0;
+ }
+
+ if ((res = check_bits_for_superframe(gb, s)) == 1) return 1;
+
+ /**
+ * First bit is speech/music bit, it differentiates between WMAVoice
+ * speech samples (the actual codec) and WMAVoice music samples, which
+ * are really WMAPro-in-WMAVoice-superframes. I've never seen those in
+ * the wild yet.
+ */
+ if (!get_bits1(gb)) {
+ av_log_missing_feature(ctx, "WMAPro-in-WMAVoice support", 1);
+ return -1;
+ }
+
+ /**
+ * (optional) nr. of samples in superframe; always <= 480 and >= 0.
+ */
+ if (get_bits1(gb)) {
+ if ((n_samples = get_bits(gb, 12)) > 480) {
+ av_log(ctx, AV_LOG_ERROR,
+ "Superframe encodes >480 samples (%d), not allowed\n",
+ n_samples);
+ return -1;
+ }
+ }
+ /**
+ * Parse LSPs, if global for the whole superframe (can also be per-frame).
+ */
+ if (s->has_residual_lsps) {
+ double prev_lsps[MAX_LSPS], a1[MAX_LSPS * 2], a2[MAX_LSPS * 2];
+
+ for (n = 0; n < s->lsps; n++)
+ prev_lsps[n] = s->prev_lsps[n] - mean_lsf[n];
+
+ if (s->lsps == 10) {
+ dequant_lsp10r(gb, lsps[2], prev_lsps, a1, a2, s->lsp_q_mode);
+ } else /* s->lsps == 16 */
+ dequant_lsp16r(gb, lsps[2], prev_lsps, a1, a2, s->lsp_q_mode);
+
+ for (n = 0; n < s->lsps; n++) {
+ lsps[0][n] = mean_lsf[n] + (a1[n] - a2[n * 2]);
+ lsps[1][n] = mean_lsf[n] + (a1[s->lsps + n] - a2[n * 2 + 1]);
+ lsps[2][n] += mean_lsf[n];
+ }
+ for (n = 0; n < 3; n++)
+ stabilize_lsps(lsps[n], s->lsps);
+ }
+
+ /**
+ * Parse frames, optionally preceeded by per-frame (independent) LSPs.
+ */
+ for (n = 0; n < 3; n++) {
+ if (!s->has_residual_lsps) {
+ int m;
+
+ if (s->lsps == 10) {
+ dequant_lsp10i(gb, lsps[n]);
+ } else /* s->lsps == 16 */
+ dequant_lsp16i(gb, lsps[n]);
+
+ for (m = 0; m < s->lsps; m++)
+ lsps[n][m] += mean_lsf[m];
+ stabilize_lsps(lsps[n], s->lsps);
+ }
+
+ if ((res = synth_frame(ctx, gb,
+ &samples[n * MAX_FRAMESIZE],
+ lsps[n], n == 0 ? s->prev_lsps : lsps[n - 1],
+ &excitation[s->history_nsamples + n * MAX_FRAMESIZE],
+ &synth[s->lsps + n * MAX_FRAMESIZE])))
+ return res;
+ }
+
+ /**
+ * Statistics? FIXME - we don't check for length, a slight overrun
+ * will be caught by internal buffer padding, and anything else
+ * will be skipped, not read.
+ */
+ if (get_bits1(gb)) {
+ res = get_bits(gb, 4);
+ skip_bits(gb, 10 * (res + 1));
+ }
+
+ /**
+ * Specify nr. of output samples.
+ */
+ *data_size = n_samples * sizeof(float);
+
+ /**
+ * Update history.
+ */
+ memcpy(s->prev_lsps, lsps[2],
+ s->lsps * sizeof(double));
+ memcpy(s->synth_history, &synth[MAX_SFRAMESIZE],
+ s->lsps * sizeof(float));
+ memcpy(s->excitation_history, &excitation[MAX_SFRAMESIZE],
+ s->history_nsamples * sizeof(float));
+
+ return 0;
+}
+
+/**
+ * Parse the packet header at the start of each packet (input data to this
+ * decoder).
+ *
+ * @param s WMA Voice decoding context private data
+ * @returns 1 if not enough bits were available, or 0 on success.
+ */
+static int parse_packet_header(WMAVoiceContext *s)
+{
+ GetBitContext *gb = &s->gb;
+ unsigned int res;
+
+ if (get_bits_left(gb) < 11)
+ return 1;
+ skip_bits(gb, 4); ///< packet sequence number
+ s->has_residual_lsps = get_bits1(gb);
+ do {
+ res = get_bits(gb, 6); ///< number of superframes per packet
+ ///< (minus first one if there is spillover)
+ if (get_bits_left(gb) < 6 * (res == 0x3F) + s->spillover_bitsize)
+ return 1;
+ } while (res == 0x3F);
+ s->spillover_nbits = get_bits(gb, s->spillover_bitsize);
+
+ return 0;
+}
+
+/**
+ * Copy (unaligned) bits from gb/data/size to pb.
+ *
+ * @param bp target buffer to copy bits into
+ * @param data source buffer to copy bits from
+ * @param size size of @data
+ * @param gb bit I/O context specifying the current position in @data.
+ * This function might use this to align the bit position to
+ * a whole-byte boundary before calling @ff_copy_bits() on
+ * aligned source data
+ * @param nbits the amount of bits to copy from @gb/@data to @pb
+ */
+static void copy_bits(PutBitContext *pb,
+ const uint8_t *data, int size,
+ GetBitContext *gb, int nbits)
+{
+ int rmn_bytes, rmn_bits;
+
+ rmn_bits = rmn_bytes = get_bits_left(gb);
+ if (rmn_bits < nbits)
+ return;
+ rmn_bits &= 7; rmn_bytes >>= 3;
+ if ((rmn_bits = FFMIN(rmn_bits, nbits)) > 0)
+ put_bits(pb, rmn_bits, get_bits(gb, rmn_bits));
+ ff_copy_bits(pb, data + size - rmn_bytes,
+ FFMIN(nbits - rmn_bits, rmn_bytes << 3));
+}
+
+/**
+ * Packet decoding: a packet is anything that the (ASF) demuxer contains,
+ * and we expect that the demuxer / application provides it to us as such
+ * (else you'll probably get garbage as output). Every packet has a size of
+ * s->block_align bytes, starts with a packet header (see
+ * #parse_packet_header()), and then a series of superframes. Superframe
+ * boundaries may exceed packets, i.e. superframes can split data over
+ * multiple (two) packets.
+ *
+ * For more information about frames, see #synth_superframe().
+ */
+static int wmavoice_decode_packet(AVCodecContext *ctx, void *data,
+ int *data_size, AVPacket *avpkt)
+{
+ WMAVoiceContext *s = ctx->priv_data;
+ GetBitContext *gb = &s->gb;
+ int size, res, pos;
+
+ if (*data_size < 480 * sizeof(float)) {
+ av_log(ctx, AV_LOG_ERROR,
+ "Output buffer too small (%d given - %lu needed)\n",
+ *data_size, 480 * sizeof(float));
+ return -1;
+ }
+ *data_size = 0;
+
+ /**
+ * Packets are sometimes a multiple of s->block_align, with a packet
+ * header at each s->block_align bytes. However, FFmpeg's ASF demuxer
+ * feeds us ASF packets, which may concatenate multiple "codec" packets
+ * in a single "muxer" packet, so we artificially emulate that by
+ * capping the packet size at s->block_align.
+ */
+ for (size = avpkt->size; size > s->block_align; size -= s->block_align);
+ if (!size)
+ return 0;
+ init_get_bits(&s->gb, avpkt->data, size << 3);
+
+ /**
+ * size == s->block_align is used to indicate whether we are dealing with
+ * a new packet or a packet of which we already read the packet header
+ * previously.
+ */
+ if (size == s->block_align) { ///< new packet header
+ if ((res = parse_packet_header(s)) < 0)
+ return res;
+
+ /**
+ * If the packet header specifies a s->spillover_nbits, then we want
+ * to push out all data of the previous packet (+ spillover) before
+ * continuing to parse new superframes in the current packet.
+ */
+ if (s->spillover_nbits > 0) {
+ if (s->cache_sframe_size > 0) {
+ int cnt = get_bits_count(gb);
+ copy_bits(&s->pb, avpkt->data, size, gb, s->spillover_nbits);
+ flush_put_bits(&s->pb);
+ s->cache_sframe_size += s->spillover_nbits;
+ if ((res = synth_superframe(ctx, data, data_size)) == 0 &&
+ *data_size > 0) {
+ cnt += s->spillover_nbits;
+ s->skip_bits_next = cnt & 7;
+ return cnt >> 3;
+ } else
+ skip_bits_long (gb, s->spillover_nbits - cnt +
+ get_bits_count(gb)); ///< resync
+ } else
+ skip_bits_long(gb, s->spillover_nbits); ///< resync
+ }
+ } else if (s->skip_bits_next)
+ skip_bits(gb, s->skip_bits_next);
+
+ /**
+ * Try parsing superframes in current packet.
+ */
+ s->cache_sframe_size = 0;
+ s->skip_bits_next = 0;
+ pos = get_bits_left(gb);
+ if ((res = synth_superframe(ctx, data, data_size)) < 0) {
+ return res;
+ } else if (*data_size > 0) {
+ int cnt = get_bits_count(gb);
+ s->skip_bits_next = cnt & 7;
+ return cnt >> 3;
+ } else if ((s->cache_sframe_size = pos) > 0) {
+ /** rewind bit reader to start of last (incomplete) superframe... */
+ init_get_bits(gb, avpkt->data, size << 3);
+ skip_bits_long(gb, (size << 3) - pos);
+ assert(get_bits_left(gb) == pos);
+
+ /** ...and cache it for spillover in next packet */
+ init_put_bits(&s->pb, s->sframe_cache, SFRAME_CACHE_SIZE);
+ copy_bits(&s->pb, avpkt->data, size, gb, s->cache_sframe_size);
+ ///< FIXME bad - just copy bytes as whole and add use the
+ ///< skip_bits_next field
+ }
+
+ return size;
+}
+
+AVCodec wmavoice_decoder = {
+ "wmavoice",
+ CODEC_TYPE_AUDIO,
+ CODEC_ID_WMAVOICE,
+ sizeof(WMAVoiceContext),
+ wmavoice_decode_init,
+ NULL,
+ NULL,
+ wmavoice_decode_packet,
+ CODEC_CAP_SUBFRAMES,
+ .long_name = NULL_IF_CONFIG_SMALL("Windows Media Audio Voice"),
+};
Index: ffmpeg-svn/libavcodec/wmavoice_data.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ ffmpeg-svn/libavcodec/wmavoice_data.h 2010-01-19 15:28:36.000000000 -0500
@@ -0,0 +1,2970 @@
+/*
+ * Windows Media Voice (WMAVoice) tables.
+ * Copyright (c) 2009 Ronald S. Bultje
+ *
+ * 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
+ */
+
+/**
+ * @file libavcodec/wmavoice_data.h
+ * @brief Windows Media Voice (WMAVoice) tables
+ * @author Ronald S. Bultje <rsbultje at gmail.com>
+ */
+
+#ifndef AVCODEC_WMAVOICE_DATA_H
+#define AVCODEC_WMAVOICE_DATA_H
+
+#include <stdint.h>
+
+static const uint8_t ff_wmavoice_dq_lsp10i[0xf00] = {
+ 125, 109, 84, 55, 34, 51, 109, 112, 118, 132,
+ 122, 102, 78, 80, 132, 119, 132, 132, 125, 131,
+ 109, 91, 131, 131, 136, 136, 137, 137, 140, 145,
+ 140, 143, 117, 136, 122, 106, 109, 91, 115, 119,
+ 133, 117, 103, 80, 55, 117, 123, 102, 93, 80,
+ 139, 116, 70, 39, 95, 89, 103, 113, 112, 122,
+ 135, 244, 229, 215, 199, 181, 163, 150, 146, 144,
+ 143, 173, 171, 154, 155, 154, 151, 148, 145, 143,
+ 132, 138, 116, 85, 117, 94, 108, 117, 107, 116,
+ 132, 118, 123, 119, 88, 67, 49, 95, 84, 95,
+ 121, 103, 74, 70, 179, 164, 141, 126, 107, 112,
+ 119, 95, 103, 149, 139, 148, 144, 147, 148, 141,
+ 151, 133, 142, 129, 111, 131, 108, 128, 122, 108,
+ 121, 96, 115, 138, 116, 93, 105, 115, 115, 123,
+ 129, 106, 136, 180, 147, 130, 108, 141, 131, 118,
+ 136, 155, 176, 156, 135, 129, 140, 146, 142, 134,
+ 141, 130, 109, 80, 52, 38, 18, 47, 118, 134,
+ 155, 141, 100, 78, 72, 89, 79, 96, 92, 98,
+ 133, 111, 83, 91, 72, 58, 105, 115, 112, 120,
+ 145, 127, 135, 113, 113, 105, 105, 85, 69, 61,
+ 115, 96, 116, 145, 159, 170, 175, 175, 168, 155,
+ 140, 120, 84, 52, 80, 145, 125, 127, 116, 126,
+ 128, 108, 101, 198, 227, 200, 178, 159, 147, 148,
+ 121, 88, 46, 109, 124, 126, 126, 137, 147, 147,
+ 129, 107, 164, 148, 127, 117, 134, 120, 111, 116,
+ 120, 103, 98, 73, 66, 61, 70, 115, 116, 125,
+ 126, 100, 77, 188, 162, 140, 114, 128, 139, 123,
+ 145, 165, 164, 134, 109, 100, 108, 118, 127, 130,
+ 156, 182, 190, 173, 167, 165, 162, 157, 152, 147,
+ 150, 164, 179, 183, 173, 155, 140, 136, 134, 135,
+ 122, 92, 69, 140, 132, 118, 108, 128, 138, 132,
+ 123, 127, 148, 137, 150, 149, 139, 127, 124, 130,
+ 136, 138, 112, 70, 41, 37, 132, 140, 129, 125,
+ 130, 111, 78, 33, 51, 161, 141, 136, 120, 122,
+ 126, 110, 87, 106, 85, 68, 48, 81, 112, 113,
+ 135, 125, 98, 85, 102, 80, 100, 87, 86, 116,
+ 142, 133, 110, 66, 48, 152, 139, 135, 136, 123,
+ 128, 116, 89, 102, 128, 99, 83, 61, 105, 124,
+ 120, 94, 73, 83, 78, 100, 122, 124, 128, 132,
+ 144, 137, 116, 102, 75, 144, 136, 127, 140, 127,
+ 154, 144, 118, 99, 90, 90, 89, 75, 68, 83,
+ 123, 103, 89, 198, 180, 154, 138, 122, 136, 120,
+ 138, 118, 121, 136, 110, 105, 85, 111, 101, 104,
+ 121, 126, 139, 115, 99, 101, 107, 110, 123, 126,
+ 127, 115, 88, 109, 164, 134, 138, 138, 120, 121,
+ 130, 202, 195, 202, 199, 201, 181, 164, 159, 148,
+ 120, 116, 194, 199, 186, 171, 154, 142, 137, 133,
+ 137, 129, 112, 149, 134, 112, 149, 138, 120, 134,
+ 119, 102, 107, 83, 79, 114, 119, 127, 128, 128,
+ 144, 148, 165, 155, 161, 150, 135, 122, 116, 115,
+ 120, 99, 80, 120, 123, 124, 111, 89, 70, 108,
+ 118, 95, 66, 53, 105, 126, 125, 105, 83, 111,
+ 129, 197, 191, 197, 206, 213, 216, 208, 196, 169,
+ 133, 109, 127, 164, 134, 121, 99, 92, 82, 71,
+ 131, 121, 93, 91, 136, 105, 115, 140, 120, 110,
+ 150, 164, 139, 108, 87, 81, 93, 92, 104, 116,
+ 133, 114, 125, 126, 111, 136, 110, 156, 147, 133,
+ 113, 94, 118, 120, 115, 125, 124, 126, 127, 134,
+ 116, 131, 161, 158, 166, 157, 150, 150, 144, 141,
+ 125, 185, 169, 142, 140, 143, 139, 131, 134, 138,
+ 179, 188, 170, 150, 134, 140, 144, 133, 127, 127,
+ 150, 177, 204, 184, 192, 194, 190, 193, 177, 158,
+ 114, 113, 138, 116, 137, 135, 132, 131, 127, 134,
+ 120, 147, 163, 135, 133, 137, 136, 136, 133, 135,
+ 137, 120, 95, 73, 46, 48, 111, 97, 97, 123,
+ 139, 130, 109, 76, 52, 72, 61, 61, 125, 127,
+ 132, 119, 119, 90, 66, 41, 64, 156, 143, 129,
+ 131, 106, 58, 25, 99, 115, 122, 136, 129, 132,
+ 134, 123, 97, 53, 27, 114, 125, 114, 120, 123,
+ 122, 107, 93, 57, 47, 133, 128, 138, 141, 131,
+ 145, 132, 122, 110, 79, 57, 30, 73, 153, 144,
+ 150, 132, 85, 59, 133, 125, 130, 115, 100, 96,
+ 148, 127, 111, 86, 61, 38, 110, 121, 108, 99,
+ 157, 143, 105, 77, 116, 118, 115, 131, 122, 122,
+ 133, 119, 134, 108, 86, 61, 129, 165, 143, 127,
+ 125, 105, 89, 111, 97, 85, 113, 99, 98, 117,
+ 149, 131, 101, 106, 88, 95, 79, 119, 123, 120,
+ 125, 109, 81, 100, 201, 183, 156, 138, 115, 116,
+ 141, 119, 129, 105, 76, 60, 110, 99, 92, 82,
+ 150, 156, 129, 95, 69, 115, 115, 113, 134, 125,
+ 118, 97, 67, 96, 203, 197, 171, 151, 133, 125,
+ 143, 131, 120, 134, 105, 80, 51, 60, 139, 134,
+ 129, 160, 223, 219, 219, 212, 197, 173, 157, 146,
+ 132, 112, 164, 144, 119, 102, 92, 76, 73, 94,
+ 132, 112, 124, 114, 93, 92, 83, 73, 69, 99,
+ 129, 103, 188, 163, 142, 132, 127, 101, 82, 59,
+ 140, 141, 111, 74, 46, 105, 113, 99, 127, 122,
+ 125, 94, 63, 112, 116, 101, 81, 120, 136, 134,
+ 133, 190, 224, 193, 179, 158, 146, 143, 140, 136,
+ 152, 161, 132, 120, 112, 94, 114, 102, 92, 116,
+ 129, 194, 196, 202, 211, 212, 210, 190, 169, 152,
+ 166, 166, 145, 111, 91, 132, 133, 128, 136, 130,
+ 118, 94, 72, 74, 92, 86, 89, 92, 106, 123,
+ 126, 100, 86, 137, 117, 92, 76, 104, 106, 114,
+ 133, 109, 204, 192, 166, 148, 138, 128, 111, 81,
+ 118, 99, 79, 146, 169, 141, 123, 102, 131, 120,
+ 127, 105, 136, 204, 170, 154, 131, 145, 135, 119,
+ 117, 95, 64, 83, 141, 136, 118, 96, 99, 126,
+ 115, 93, 98, 102, 95, 105, 106, 114, 119, 128,
+ 131, 121, 98, 139, 149, 119, 109, 86, 105, 129,
+ 134, 119, 104, 169, 185, 155, 141, 122, 107, 127,
+ 136, 115, 85, 108, 87, 126, 102, 128, 136, 129,
+ 125, 99, 126, 158, 133, 139, 132, 113, 91, 107,
+ 141, 122, 128, 161, 130, 127, 105, 120, 118, 106,
+ 122, 140, 161, 168, 187, 184, 176, 158, 144, 140,
+ 127, 111, 89, 130, 132, 105, 134, 121, 100, 122,
+ 129, 110, 128, 115, 129, 116, 132, 118, 114, 119,
+ 138, 133, 132, 188, 183, 159, 161, 147, 134, 140,
+ 132, 113, 84, 167, 147, 132, 124, 109, 133, 121,
+ 132, 128, 116, 121, 98, 101, 145, 129, 128, 129,
+ 124, 112, 152, 158, 136, 161, 139, 165, 158, 142,
+ 139, 138, 110, 127, 148, 117, 126, 118, 101, 116,
+ 155, 168, 154, 128, 120, 152, 150, 141, 140, 135,
+ 127, 111, 109, 134, 104, 133, 110, 112, 132, 114,
+ 111, 87, 68, 89, 107, 121, 121, 126, 126, 129,
+ 120, 148, 169, 163, 173, 178, 185, 188, 178, 163,
+ 122, 97, 86, 117, 101, 138, 118, 142, 155, 139,
+ 125, 114, 131, 138, 153, 149, 163, 150, 143, 141,
+ 157, 161, 138, 152, 134, 121, 122, 109, 110, 124,
+ 151, 171, 196, 168, 145, 139, 147, 151, 146, 139,
+ 134, 169, 179, 170, 175, 178, 177, 173, 165, 154,
+ 120, 151, 118, 107, 125, 129, 133, 133, 136, 139,
+ 119, 141, 159, 151, 160, 165, 168, 169, 162, 152,
+ 115, 111, 119, 94, 117, 121, 127, 127, 132, 136,
+ 134, 153, 147, 142, 142, 147, 159, 159, 154, 147,
+ 110, 106, 139, 135, 143, 142, 147, 146, 147, 147,
+ 115, 133, 151, 133, 141, 142, 151, 152, 147, 144,
+ 115, 132, 144, 131, 125, 126, 128, 130, 131, 136,
+ 138, 118, 96, 71, 48, 26, 43, 130, 125, 125,
+ 134, 122, 98, 54, 28, 84, 77, 73, 109, 125,
+ 133, 112, 67, 48, 141, 129, 126, 113, 112, 118,
+ 143, 123, 89, 54, 71, 73, 75, 131, 123, 123,
+ 126, 109, 81, 31, 15, 94, 110, 109, 119, 128,
+ 132, 122, 97, 92, 73, 50, 27, 22, 104, 133,
+ 133, 119, 94, 48, 34, 168, 160, 154, 151, 130,
+ 147, 133, 90, 54, 71, 123, 106, 105, 93, 117,
+ 143, 132, 107, 69, 45, 78, 178, 169, 150, 139,
+ 138, 123, 116, 96, 69, 49, 32, 113, 103, 112,
+ 154, 151, 125, 79, 60, 152, 160, 154, 155, 137,
+ 142, 151, 124, 88, 66, 59, 94, 87, 95, 119,
+ 166, 154, 122, 92, 138, 132, 124, 114, 97, 97,
+ 122, 99, 98, 219, 191, 176, 165, 159, 153, 131,
+ 130, 119, 91, 51, 24, 41, 144, 156, 147, 139,
+ 139, 122, 81, 65, 124, 111, 104, 90, 94, 98,
+ 138, 120, 112, 91, 63, 65, 89, 75, 78, 106,
+ 126, 107, 91, 85, 69, 95, 90, 84, 108, 120,
+ 155, 139, 100, 78, 120, 110, 109, 91, 77, 73,
+ 144, 130, 135, 112, 88, 65, 62, 142, 129, 126,
+ 170, 154, 150, 131, 121, 116, 100, 92, 83, 86,
+ 131, 122, 98, 107, 102, 75, 54, 38, 117, 130,
+ 146, 139, 117, 107, 86, 66, 44, 30, 97, 128,
+ 129, 116, 100, 59, 108, 127, 119, 139, 129, 129,
+ 124, 106, 79, 49, 154, 190, 166, 152, 133, 123,
+ 141, 149, 123, 89, 61, 70, 143, 132, 125, 126,
+ 136, 113, 177, 166, 141, 123, 109, 108, 105, 93,
+ 137, 117, 147, 123, 99, 85, 109, 98, 91, 75,
+ 129, 121, 102, 78, 53, 90, 149, 136, 134, 135,
+ 144, 136, 126, 90, 114, 152, 137, 152, 138, 128,
+ 133, 115, 107, 129, 99, 78, 60, 129, 125, 118,
+ 147, 141, 119, 124, 110, 91, 79, 64, 106, 117,
+ 134, 111, 164, 143, 123, 113, 116, 95, 76, 56,
+ 147, 159, 140, 109, 83, 84, 140, 135, 127, 129,
+ 123, 104, 116, 99, 91, 87, 80, 110, 113, 121,
+ 124, 106, 174, 174, 152, 141, 132, 134, 126, 124,
+ 140, 190, 240, 215, 212, 189, 173, 158, 144, 137,
+ 123, 97, 79, 102, 110, 111, 90, 75, 126, 124,
+ 134, 121, 104, 145, 127, 100, 77, 65, 120, 118,
+ 123, 106, 87, 41, 68, 119, 106, 115, 109, 119,
+ 137, 232, 241, 225, 217, 202, 183, 169, 156, 145,
+ 161, 146, 127, 110, 97, 107, 88, 114, 108, 106,
+ 141, 244, 216, 192, 172, 163, 148, 143, 144, 144,
+ 128, 127, 109, 89, 77, 68, 124, 120, 121, 125,
+ 125, 94, 48, 71, 116, 113, 104, 120, 142, 137,
+ 133, 129, 115, 82, 68, 120, 99, 133, 134, 124,
+ 130, 106, 108, 160, 130, 111, 89, 129, 124, 119,
+ 134, 120, 149, 143, 116, 95, 87, 142, 132, 122,
+ 126, 114, 108, 107, 80, 141, 133, 123, 137, 124,
+ 117, 95, 69, 43, 62, 98, 114, 116, 112, 120,
+ 122, 99, 87, 164, 145, 123, 99, 95, 118, 105,
+ 126, 101, 102, 120, 113, 110, 92, 139, 134, 126,
+ 148, 194, 241, 219, 221, 215, 200, 193, 174, 151,
+ 127, 104, 122, 136, 113, 106, 110, 95, 78, 106,
+ 131, 163, 217, 199, 194, 175, 164, 155, 142, 138,
+ 139, 124, 88, 57, 161, 161, 145, 139, 124, 116,
+ 127, 110, 91, 98, 126, 104, 113, 98, 94, 94,
+ 145, 138, 114, 90, 75, 130, 117, 107, 99, 90,
+ 119, 98, 86, 101, 148, 133, 103, 83, 124, 131,
+ 143, 168, 169, 133, 110, 117, 139, 149, 147, 137,
+ 124, 106, 80, 138, 194, 163, 142, 119, 106, 130,
+ 136, 125, 105, 114, 87, 113, 101, 89, 108, 102,
+ 114, 90, 53, 46, 105, 116, 126, 122, 118, 122,
+ 124, 102, 92, 195, 167, 160, 144, 154, 154, 132,
+ 118, 97, 88, 72, 98, 120, 112, 98, 79, 117,
+ 114, 107, 185, 191, 191, 188, 175, 165, 153, 143,
+ 119, 97, 90, 89, 120, 151, 136, 113, 99, 112,
+ 141, 121, 144, 122, 125, 113, 133, 111, 92, 69,
+ 120, 98, 78, 109, 151, 145, 157, 157, 151, 143,
+ 130, 110, 120, 188, 159, 141, 119, 112, 109, 98,
+ 126, 112, 83, 110, 169, 139, 127, 105, 93, 123,
+ 141, 145, 117, 106, 91, 78, 123, 107, 101, 125,
+ 117, 95, 71, 147, 176, 153, 148, 133, 135, 127,
+ 124, 106, 79, 64, 115, 96, 108, 115, 106, 105,
+ 127, 115, 90, 98, 105, 81, 144, 135, 117, 125,
+ 126, 104, 98, 165, 138, 136, 112, 149, 148, 131,
+ 119, 144, 186, 185, 204, 202, 209, 200, 182, 161,
+ 123, 153, 190, 189, 199, 194, 191, 176, 157, 147,
+ 121, 103, 119, 98, 100, 120, 106, 97, 95, 126,
+ 137, 130, 102, 117, 117, 92, 126, 114, 101, 118,
+ 131, 219, 190, 167, 153, 151, 144, 140, 142, 143,
+ 114, 102, 151, 152, 132, 120, 112, 120, 127, 131,
+ 138, 122, 91, 143, 118, 120, 114, 104, 124, 117,
+ 148, 142, 117, 126, 97, 125, 108, 116, 142, 125,
+ 126, 106, 91, 169, 208, 178, 158, 138, 127, 135,
+ 133, 126, 101, 83, 147, 130, 125, 117, 114, 117,
+ 120, 103, 94, 149, 136, 129, 139, 118, 133, 133,
+ 147, 152, 126, 132, 119, 97, 132, 129, 114, 126,
+ 112, 107, 148, 125, 112, 114, 124, 125, 129, 135,
+ 139, 121, 157, 151, 131, 140, 118, 147, 136, 121,
+ 115, 105, 159, 167, 185, 191, 196, 190, 176, 160,
+ 124, 106, 104, 122, 130, 114, 152, 144, 134, 136,
+ 136, 152, 159, 153, 131, 114, 116, 126, 129, 129,
+ 124, 109, 87, 131, 107, 115, 130, 107, 144, 131,
+ 126, 162, 176, 175, 180, 176, 160, 141, 134, 134,
+ 136, 127, 108, 161, 162, 133, 141, 124, 112, 128,
+ 130, 115, 110, 140, 107, 155, 134, 131, 156, 137,
+ 122, 106, 116, 127, 118, 161, 150, 170, 167, 152,
+ 139, 177, 203, 176, 155, 139, 130, 128, 129, 132,
+ 137, 119, 125, 103, 110, 123, 107, 120, 108, 101,
+ 113, 107, 160, 154, 160, 166, 169, 176, 168, 156,
+ 115, 90, 65, 115, 115, 104, 120, 112, 109, 124,
+ 131, 123, 100, 109, 185, 158, 141, 132, 116, 119,
+ 139, 130, 119, 156, 124, 138, 127, 116, 141, 128,
+ 133, 118, 115, 180, 149, 151, 135, 130, 147, 129,
+ 117, 90, 80, 119, 124, 128, 132, 130, 128, 135,
+ 112, 97, 142, 161, 167, 165, 154, 142, 136, 135,
+ 118, 141, 193, 172, 157, 152, 148, 145, 146, 141,
+ 125, 147, 165, 166, 149, 133, 123, 122, 128, 131,
+ 128, 193, 177, 174, 182, 186, 197, 193, 191, 173,
+ 124, 144, 162, 133, 113, 113, 123, 128, 129, 130,
+ 117, 98, 121, 122, 137, 132, 110, 97, 111, 130,
+ 128, 176, 151, 125, 126, 134, 130, 121, 127, 130,
+ 122, 151, 142, 111, 106, 121, 126, 126, 130, 134,
+ 148, 167, 186, 153, 129, 122, 124, 128, 130, 128,
+ 148, 172, 206, 178, 171, 182, 169, 180, 172, 156,
+ 133, 164, 174, 160, 155, 163, 163, 172, 169, 158,
+ 132, 150, 147, 142, 152, 140, 140, 140, 134, 135,
+ 137, 158, 167, 172, 163, 153, 169, 158, 146, 147,
+ 150, 161, 162, 172, 153, 133, 140, 144, 136, 135,
+ 109, 84, 101, 120, 129, 134, 133, 136, 137, 143,
+ 112, 114, 157, 147, 141, 136, 135, 133, 135, 138,
+ 121, 154, 161, 150, 149, 154, 151, 144, 146, 144,
+ 111, 117, 125, 125, 130, 131, 135, 137, 143, 148,
+ 121, 141, 146, 131, 138, 126, 118, 111, 119, 130,
+ 120, 135, 145, 121, 140, 134, 138, 137, 131, 134,
+ 115, 137, 132, 137, 139, 138, 138, 139, 145, 149,
+ 131, 149, 147, 133, 132, 126, 131, 134, 130, 133,
+ 110, 98, 84, 141, 107, 169, 169, 123, 125, 126,
+ 118, 210, 98, 126, 132, 138, 128, 139, 156, 157,
+ 140, 142, 129, 95, 192, 178, 182, 186, 183, 159,
+ 135, 134, 144, 124, 100, 228, 203, 161, 122, 104,
+ 139, 159, 134, 161, 121, 126, 192, 152, 218, 180,
+ 132, 132, 119, 99, 96, 97, 80, 53, 134, 143,
+ 102, 114, 133, 114, 127, 83, 77, 126, 85, 107,
+ 110, 114, 194, 186, 139, 116, 147, 104, 129, 138,
+ 126, 133, 109, 144, 115, 45, 130, 97, 159, 155,
+ 157, 162, 189, 185, 168, 163, 151, 151, 142, 135,
+ 144, 147, 120, 74, 192, 186, 149, 118, 71, 84,
+ 143, 156, 133, 178, 168, 107, 119, 149, 105, 112,
+ 182, 184, 158, 118, 118, 148, 128, 177, 171, 152,
+ 139, 135, 126, 209, 171, 150, 123, 100, 190, 158,
+ 166, 97, 136, 123, 136, 139, 128, 138, 126, 121,
+ 132, 131, 128, 95, 60, 168, 127, 140, 208, 161,
+ 109, 102, 119, 162, 150, 137, 107, 200, 156, 136,
+ 136, 128, 103, 95, 74, 91, 220, 173, 152, 138,
+ 139, 129, 140, 136, 122, 82, 180, 115, 53, 90,
+ 121, 107, 99, 148, 116, 139, 100, 63, 191, 155,
+ 130, 129, 163, 155, 98, 175, 95, 151, 127, 107,
+ 124, 124, 116, 88, 71, 164, 148, 96, 57, 89,
+ 125, 117, 77, 63, 162, 144, 113, 109, 137, 134,
+ 134, 130, 149, 174, 158, 158, 130, 81, 28, 67,
+ 142, 139, 129, 100, 194, 134, 68, 175, 131, 103,
+ 136, 132, 122, 96, 119, 82, 115, 249, 215, 168,
+ 125, 139, 199, 96, 146, 123, 136, 179, 142, 137,
+ 181, 166, 106, 86, 122, 106, 123, 131, 106, 119,
+ 129, 189, 188, 147, 126, 110, 101, 114, 147, 136,
+ 132, 106, 72, 175, 148, 99, 130, 153, 125, 136,
+ 123, 119, 147, 170, 157, 126, 209, 188, 158, 152,
+ 101, 89, 142, 131, 161, 150, 148, 124, 89, 119,
+ 141, 137, 131, 103, 81, 85, 64, 175, 129, 121,
+ 137, 144, 142, 145, 119, 205, 148, 80, 165, 138,
+ 143, 137, 167, 165, 148, 149, 110, 234, 217, 170,
+ 167, 152, 75, 140, 155, 155, 175, 129, 136, 134,
+ 136, 152, 161, 131, 140, 121, 91, 79, 255, 209,
+ 132, 147, 120, 114, 177, 128, 110, 61, 89, 131,
+ 125, 127, 93, 87, 167, 115, 186, 162, 107, 106,
+ 134, 162, 151, 100, 79, 67, 151, 116, 130, 142,
+ 162, 153, 155, 143, 122, 85, 202, 187, 135, 125,
+ 158, 155, 103, 129, 74, 149, 130, 98, 129, 126,
+ 148, 152, 153, 133, 118, 94, 80, 70, 47, 90,
+ 124, 118, 143, 184, 158, 126, 70, 82, 111, 113,
+ 126, 135, 175, 141, 203, 166, 123, 123, 134, 133,
+ 113, 111, 128, 76, 128, 177, 151, 178, 134, 125,
+ 120, 120, 193, 106, 98, 134, 101, 86, 101, 114,
+ 136, 127, 134, 196, 86, 105, 145, 128, 119, 137,
+ 138, 126, 230, 161, 141, 128, 129, 136, 88, 83,
+ 103, 118, 178, 123, 89, 101, 161, 173, 165, 147,
+ 130, 123, 171, 158, 131, 81, 50, 177, 162, 136,
+ 125, 115, 82, 173, 195, 168, 130, 112, 112, 121,
+ 152, 148, 167, 87, 82, 161, 142, 147, 98, 89,
+ 168, 138, 97, 157, 132, 114, 74, 126, 161, 141,
+ 135, 123, 68, 137, 124, 118, 112, 92, 65, 96,
+ 191, 181, 161, 151, 141, 145, 129, 102, 97, 111,
+ 144, 128, 55, 128, 115, 155, 129, 184, 167, 147,
+ 131, 141, 125, 33, 127, 111, 127, 131, 125, 130,
+ 137, 130, 121, 195, 172, 177, 176, 149, 98, 97,
+ 126, 106, 168, 159, 144, 185, 156, 151, 182, 158,
+ 123, 93, 110, 116, 98, 99, 125, 136, 139, 148,
+ 79, 112, 149, 128, 147, 136, 118, 105, 166, 152,
+ 117, 115, 92, 128, 148, 132, 170, 143, 226, 190,
+ 122, 192, 165, 121, 143, 144, 174, 124, 113, 124,
+ 122, 135, 34, 93, 118, 111, 111, 136, 123, 116,
+ 99, 195, 139, 99, 114, 102, 96, 108, 111, 112,
+ 113, 129, 172, 137, 105, 139, 154, 86, 113, 108,
+ 132, 79, 63, 120, 93, 162, 90, 103, 94, 95,
+ 117, 127, 104, 100, 142, 129, 93, 27, 196, 153,
+ 113, 91, 101, 90, 84, 68, 138, 38, 118, 148,
+ 87, 103, 125, 109, 96, 152, 100, 56, 31, 62,
+ 176, 129, 124, 115, 103, 92, 100, 121, 130, 125,
+ 128, 71, 82, 71, 152, 85, 107, 116, 138, 133,
+ 103, 116, 139, 144, 72, 37, 118, 141, 109, 95,
+ 86, 92, 121, 167, 156, 104, 92, 91, 122, 114,
+ 89, 61, 172, 128, 95, 103, 84, 101, 88, 84,
+ 116, 125, 108, 62, 74, 108, 160, 143, 189, 164,
+ 91, 115, 144, 43, 116, 79, 106, 108, 74, 83,
+ 87, 90, 61, 71, 76, 76, 95, 130, 89, 94,
+ 114, 107, 101, 145, 161, 147, 143, 163, 147, 129,
+ 101, 73, 111, 108, 93, 104, 186, 141, 99, 89,
+ 112, 126, 111, 113, 152, 41, 159, 115, 131, 124,
+ 117, 101, 115, 130, 124, 87, 59, 177, 63, 85,
+ 109, 116, 103, 68, 145, 132, 29, 119, 96, 89,
+ 117, 90, 181, 103, 101, 111, 97, 96, 199, 171,
+ 113, 120, 93, 119, 101, 64, 56, 55, 63, 90,
+ 105, 101, 86, 45, 136, 179, 142, 102, 115, 114,
+ 113, 108, 121, 84, 23, 125, 76, 102, 119, 107,
+ 120, 104, 73, 177, 83, 114, 128, 85, 152, 126,
+ 137, 115, 149, 109, 163, 133, 110, 98, 54, 61,
+ 95, 111, 135, 103, 88, 164, 115, 187, 122, 98,
+ 129, 132, 95, 86, 71, 119, 146, 111, 38, 67,
+ 102, 100, 66, 148, 137, 103, 145, 95, 35, 85,
+ 44, 136, 102, 111, 108, 115, 136, 105, 120, 110,
+ 108, 147, 112, 169, 116, 146, 81, 120, 94, 84,
+ 93, 97, 90, 119, 102, 91, 48, 147, 204, 151,
+ 148, 160, 144, 131, 144, 175, 158, 133, 212, 163,
+ 172, 152, 151, 112, 148, 151, 145, 179, 160, 124,
+ 164, 164, 167, 161, 141, 120, 131, 141, 198, 177,
+ 169, 156, 146, 156, 124, 185, 164, 195, 181, 193,
+ 201, 147, 148, 168, 165, 159, 162, 148, 150, 148,
+ 146, 157, 158, 149, 164, 129, 160, 214, 174, 166,
+ 154, 176, 146, 141, 155, 140, 140, 169, 106, 155,
+ 166, 162, 134, 193, 157, 155, 146, 196, 171, 107,
+ 177, 174, 163, 155, 147, 203, 162, 146, 150, 83,
+ 157, 170, 180, 178, 159, 157, 151, 117, 115, 183,
+ 170, 180, 174, 150, 177, 173, 136, 181, 196, 184,
+ 164, 168, 165, 148, 175, 168, 209, 189, 159, 114,
+ 157, 158, 141, 168, 170, 139, 175, 128, 151, 39,
+ 128, 154, 159, 161, 148, 180, 131, 165, 159, 131,
+ 163, 150, 174, 178, 178, 198, 172, 138, 184, 191,
+ 143, 164, 161, 163, 210, 171, 155, 168, 150, 116,
+ 182, 170, 145, 152, 141, 139, 191, 149, 160, 202,
+ 145, 169, 145, 181, 148, 183, 197, 165, 146, 171,
+ 161, 153, 157, 170, 164, 149, 183, 167, 246, 235,
+ 162, 144, 170, 152, 173, 150, 113, 135, 156, 154,
+ 158, 148, 178, 159, 161, 114, 180, 156, 116, 163,
+ 164, 161, 122, 164, 164, 183, 135, 135, 144, 182,
+ 160, 147, 163, 152, 169, 185, 159, 177, 99, 211,
+ 168, 167, 215, 170, 150, 157, 154, 176, 154, 143,
+ 163, 117, 178, 160, 163, 165, 164, 166, 174, 136,
+ 159, 169, 152, 123, 199, 149, 169, 140, 159, 208,
+ 155, 161, 186, 122, 134, 167, 171, 145, 148, 176,
+ 148, 137, 114, 160, 166, 153, 162, 156, 164, 172,
+ 155, 148, 155, 182, 114, 150, 157, 154, 140, 159,
+ 166, 160, 169, 206, 182, 145, 157, 165, 147, 202,
+ 131, 154, 193, 162, 162, 149, 167, 157, 191, 188,
+ 149, 205, 147, 166, 150, 150, 159, 153, 171, 160
+};
+
+static const uint8_t ff_wmavoice_dq_lsp16i1[0x640] = {
+ 142, 121, 141, 112, 99, 119, 92, 122, 183, 155,
+ 122, 98, 75, 78, 85, 101, 108, 134, 128, 123,
+ 115, 90, 79, 58, 73, 127, 106, 60, 97, 107,
+ 141, 163, 130, 123, 136, 156, 201, 189, 204, 206,
+ 140, 116, 69, 60, 117, 123, 106, 124, 91, 63,
+ 150, 144, 110, 80, 63, 112, 80, 70, 76, 63,
+ 114, 86, 147, 165, 137, 125, 120, 140, 115, 101,
+ 101, 99, 166, 158, 158, 104, 126, 131, 134, 143,
+ 121, 102, 73, 36, 83, 132, 113, 76, 38, 20,
+ 132, 111, 78, 73, 51, 131, 108, 131, 105, 80,
+ 148, 138, 101, 65, 47, 115, 86, 50, 124, 129,
+ 116, 89, 85, 87, 64, 111, 74, 39, 115, 113,
+ 112, 83, 75, 122, 127, 114, 91, 106, 125, 130,
+ 131, 108, 79, 136, 112, 110, 147, 164, 144, 124,
+ 121, 236, 218, 190, 168, 106, 101, 160, 172, 191,
+ 113, 138, 102, 91, 109, 100, 71, 85, 112, 119,
+ 121, 96, 51, 64, 126, 135, 114, 76, 34, 104,
+ 145, 127, 90, 56, 131, 142, 131, 92, 123, 102,
+ 128, 105, 63, 24, 95, 115, 87, 49, 156, 174,
+ 123, 105, 88, 58, 55, 141, 119, 99, 75, 81,
+ 137, 117, 114, 80, 56, 119, 91, 106, 166, 135,
+ 114, 84, 38, 93, 116, 129, 103, 97, 87, 97,
+ 115, 184, 193, 173, 157, 117, 88, 114, 151, 121,
+ 126, 111, 75, 129, 133, 130, 107, 71, 115, 92,
+ 128, 108, 120, 100, 97, 111, 80, 119, 122, 91,
+ 114, 94, 149, 129, 136, 114, 88, 132, 110, 85,
+ 116, 99, 101, 71, 71, 110, 140, 142, 131, 110,
+ 122, 98, 83, 127, 100, 106, 130, 123, 114, 103,
+ 113, 87, 140, 116, 113, 140, 161, 171, 145, 129,
+ 115, 178, 158, 161, 160, 118, 195, 209, 221, 228,
+ 99, 83, 140, 134, 140, 127, 186, 168, 187, 187,
+ 107, 114, 100, 111, 111, 104, 130, 131, 116, 128,
+ 128, 104, 64, 18, 49, 126, 107, 69, 56, 153,
+ 154, 142, 110, 113, 89, 120, 93, 73, 190, 172,
+ 119, 96, 57, 21, 60, 126, 122, 81, 99, 117,
+ 159, 141, 108, 88, 120, 144, 125, 89, 44, 94,
+ 147, 131, 93, 81, 61, 133, 113, 85, 47, 62,
+ 123, 121, 87, 53, 90, 120, 94, 76, 70, 48,
+ 125, 103, 93, 64, 35, 140, 129, 88, 47, 30,
+ 127, 104, 58, 51, 103, 124, 100, 102, 76, 47,
+ 115, 87, 54, 46, 77, 182, 218, 174, 163, 145,
+ 140, 126, 89, 105, 82, 125, 119, 101, 69, 58,
+ 125, 107, 172, 145, 128, 138, 113, 109, 92, 90,
+ 117, 93, 83, 93, 132, 125, 102, 67, 148, 161,
+ 131, 110, 96, 99, 74, 119, 92, 54, 84, 81,
+ 110, 152, 120, 106, 131, 108, 74, 68, 99, 107,
+ 121, 97, 120, 101, 78, 132, 110, 127, 164, 134,
+ 111, 159, 204, 189, 178, 158, 183, 146, 144, 137,
+ 123, 106, 136, 108, 135, 117, 91, 163, 135, 113,
+ 119, 177, 134, 122, 121, 132, 109, 157, 131, 113,
+ 115, 87, 87, 100, 92, 120, 95, 59, 146, 139,
+ 129, 101, 135, 122, 101, 119, 100, 112, 88, 99,
+ 118, 90, 123, 125, 107, 121, 98, 73, 104, 80,
+ 112, 79, 86, 122, 96, 104, 81, 107, 90, 93,
+ 112, 150, 140, 109, 115, 113, 86, 73, 76, 112,
+ 130, 111, 101, 112, 84, 123, 97, 63, 134, 115,
+ 109, 77, 128, 141, 119, 125, 101, 108, 147, 119,
+ 134, 149, 150, 127, 115, 136, 244, 220, 210, 189,
+ 105, 138, 171, 156, 174, 117, 162, 133, 146, 141,
+ 115, 93, 119, 98, 122, 114, 106, 154, 145, 162,
+ 107, 131, 189, 165, 152, 101, 107, 129, 114, 139,
+ 116, 186, 186, 161, 180, 100, 89, 137, 116, 116,
+ 106, 130, 194, 196, 207, 110, 156, 157, 138, 149,
+ 102, 93, 159, 138, 120, 109, 132, 105, 122, 135,
+ 148, 128, 85, 76, 102, 168, 154, 141, 117, 100,
+ 125, 106, 62, 101, 146, 124, 102, 65, 25, 15,
+ 120, 94, 46, 21, 94, 149, 128, 115, 85, 92,
+ 119, 93, 70, 52, 30, 162, 151, 123, 91, 80,
+ 126, 112, 84, 47, 33, 138, 114, 73, 60, 87,
+ 126, 211, 174, 158, 143, 129, 106, 65, 31, 133,
+ 119, 95, 52, 99, 173, 123, 96, 119, 206, 178,
+ 127, 104, 60, 61, 67, 152, 136, 104, 63, 83,
+ 133, 130, 92, 64, 45, 120, 96, 53, 30, 130,
+ 128, 103, 74, 59, 35, 135, 114, 77, 30, 57,
+ 108, 130, 123, 90, 87, 143, 125, 93, 54, 60,
+ 133, 118, 79, 87, 95, 115, 89, 111, 88, 65,
+ 124, 102, 70, 40, 47, 148, 131, 123, 130, 104,
+ 127, 109, 87, 56, 121, 147, 123, 121, 107, 85,
+ 178, 237, 200, 193, 170, 139, 118, 100, 75, 110,
+ 133, 121, 81, 73, 68, 120, 195, 157, 141, 131,
+ 127, 102, 107, 88, 60, 136, 113, 100, 69, 45,
+ 128, 105, 93, 77, 67, 131, 116, 149, 184, 156,
+ 115, 85, 35, 45, 112, 128, 108, 68, 73, 111,
+ 118, 93, 187, 162, 139, 136, 115, 84, 57, 37,
+ 131, 133, 125, 98, 85, 138, 115, 92, 86, 61,
+ 116, 96, 70, 52, 110, 115, 109, 135, 104, 88,
+ 136, 159, 122, 109, 115, 122, 110, 98, 70, 95,
+ 112, 81, 68, 85, 90, 124, 101, 87, 56, 89,
+ 109, 82, 98, 100, 115, 124, 102, 76, 88, 63,
+ 111, 78, 42, 78, 102, 110, 71, 64, 131, 111,
+ 125, 104, 107, 87, 123, 129, 131, 99, 85, 68,
+ 147, 137, 102, 99, 75, 120, 155, 142, 109, 91,
+ 132, 109, 131, 141, 113, 136, 119, 94, 152, 128,
+ 127, 102, 79, 159, 134, 111, 78, 98, 109, 80,
+ 115, 86, 51, 63, 103, 116, 86, 170, 149, 123,
+ 135, 178, 159, 125, 114, 113, 189, 226, 203, 202,
+ 140, 117, 116, 94, 70, 128, 103, 94, 174, 149,
+ 118, 98, 83, 84, 106, 115, 157, 120, 94, 95,
+ 131, 112, 75, 96, 74, 121, 97, 144, 117, 95,
+ 120, 90, 140, 138, 110, 119, 93, 55, 92, 114,
+ 114, 87, 151, 125, 100, 111, 82, 83, 160, 139,
+ 114, 86, 56, 90, 138, 104, 109, 101, 77, 118,
+ 140, 142, 143, 148, 126, 121, 102, 129, 107, 111,
+ 113, 79, 58, 111, 91, 120, 94, 63, 115, 98,
+ 121, 94, 99, 97, 78, 120, 92, 68, 173, 148,
+ 122, 114, 109, 87, 82, 132, 229, 192, 176, 155,
+ 137, 116, 123, 97, 115, 132, 115, 86, 120, 95,
+ 135, 116, 101, 136, 108, 109, 74, 100, 125, 115,
+ 112, 158, 144, 124, 134, 114, 83, 73, 147, 120,
+ 120, 104, 150, 122, 116, 110, 104, 192, 183, 174,
+ 134, 112, 116, 120, 93, 121, 101, 93, 110, 90,
+ 121, 93, 147, 152, 122, 115, 153, 171, 161, 142,
+ 123, 95, 116, 114, 93, 113, 89, 96, 77, 93,
+ 113, 174, 180, 143, 138, 116, 86, 100, 135, 106,
+ 103, 121, 149, 115, 103, 121, 95, 82, 149, 121,
+ 117, 92, 93, 111, 114, 123, 209, 196, 193, 183,
+ 125, 102, 107, 130, 104, 115, 91, 113, 103, 99,
+ 114, 86, 68, 108, 110, 111, 159, 162, 125, 113,
+ 125, 235, 234, 225, 214, 99, 74, 118, 121, 127,
+ 104, 123, 158, 128, 127, 113, 96, 116, 136, 158,
+ 100, 80, 138, 155, 166, 118, 143, 115, 125, 114,
+ 119, 137, 133, 136, 139, 151, 188, 172, 174, 173,
+ 138, 161, 158, 158, 155, 121, 198, 194, 211, 202,
+ 100, 90, 112, 110, 122, 100, 91, 122, 128, 135,
+ 101, 109, 127, 101, 114, 105, 126, 160, 147, 143,
+ 109, 138, 142, 158, 163, 113, 174, 185, 188, 206,
+ 112, 154, 166, 176, 183, 101, 108, 140, 140, 143,
+ 106, 135, 130, 137, 126, 103, 114, 115, 128, 126,
+ 107, 86, 21, 115, 75, 117, 139, 97, 65, 105,
+ 64, 191, 101, 106, 139, 107, 98, 218, 132, 104,
+ 73, 136, 165, 84, 118, 150, 111, 58, 130, 107,
+ 99, 136, 132, 56, 52, 102, 136, 69, 78, 163,
+ 85, 173, 148, 138, 85, 69, 106, 128, 133, 155,
+ 104, 91, 149, 56, 104, 103, 101, 172, 96, 57,
+ 104, 97, 125, 197, 166, 107, 169, 47, 120, 103,
+ 150, 89, 99, 139, 162, 101, 69, 137, 158, 126,
+ 191, 173, 127, 79, 155, 51, 131, 112, 86, 74,
+ 135, 61, 114, 81, 125, 117, 112, 72, 175, 72,
+ 127, 123, 142, 132, 78, 116, 158, 111, 121, 143,
+ 108, 102, 89, 20, 194, 81, 99, 107, 65, 150,
+ 103, 78, 91, 69, 96, 104, 116, 116, 103, 105,
+ 107, 117, 110, 130, 28, 88, 103, 62, 72, 85,
+ 125, 126, 141, 126, 178, 121, 102, 57, 46, 124,
+ 97, 91, 89, 138, 95, 98, 143, 99, 169, 123,
+ 140, 119, 113, 82, 140, 118, 112, 91, 92, 241,
+ 134, 89, 95, 112, 78, 167, 140, 145, 121, 100,
+ 109, 205, 144, 91, 100, 113, 103, 142, 175, 95,
+ 117, 121, 35, 121, 127, 159, 129, 85, 64, 75,
+ 116, 98, 103, 127, 129, 66, 68, 110, 96, 86,
+ 79, 100, 156, 133, 92, 135, 96, 164, 132, 121,
+ 93, 163, 134, 91, 208, 104, 77, 126, 116, 58,
+ 136, 118, 132, 81, 61, 73, 115, 66, 129, 123,
+ 111, 85, 42, 178, 134, 108, 132, 159, 45, 157,
+ 105, 164, 100, 94, 60, 96, 57, 154, 105, 102,
+ 103, 114, 96, 12, 91, 119, 115, 67, 92, 64,
+ 94, 61, 106, 106, 165, 105, 94, 98, 68, 30,
+ 146, 130, 107, 173, 140, 102, 90, 163, 106, 184,
+ 100, 53, 68, 131, 92, 105, 111, 68, 153, 186,
+ 101, 82, 48, 99, 147, 122, 136, 176, 96, 96,
+ 104, 132, 167, 149, 136, 138, 144, 97, 120, 92
+};
+
+static const uint8_t ff_wmavoice_dq_lsp16i2[0x3c0] = {
+ 23, 12, 107, 119, 110, 205, 214, 212, 208, 201,
+ 102, 95, 69, 117, 107, 118, 123, 118, 123, 121,
+ 82, 58, 83, 95, 84, 139, 145, 153, 161, 169,
+ 102, 100, 138, 121, 101, 129, 130, 138, 150, 139,
+ 76, 104, 86, 112, 133, 113, 91, 63, 73, 129,
+ 199, 193, 182, 181, 172, 119, 101, 83, 94, 76,
+ 161, 157, 152, 157, 158, 110, 90, 121, 96, 79,
+ 124, 107, 114, 88, 73, 152, 137, 121, 107, 99,
+ 57, 50, 100, 81, 74, 115, 96, 72, 49, 69,
+ 83, 68, 40, 53, 103, 36, 131, 107, 84, 64,
+ 236, 245, 242, 231, 213, 95, 109, 88, 69, 110,
+ 228, 221, 204, 182, 170, 129, 110, 97, 118, 104,
+ 98, 76, 98, 75, 61, 93, 77, 113, 91, 72,
+ 116, 94, 106, 134, 118, 177, 188, 169, 162, 153,
+ 163, 149, 131, 131, 132, 177, 163, 173, 168, 158,
+ 113, 131, 107, 113, 100, 132, 143, 131, 134, 142,
+ 45, 36, 121, 113, 102, 43, 95, 84, 67, 56,
+ 76, 82, 68, 48, 33, 55, 58, 59, 43, 65,
+ 66, 85, 66, 81, 94, 102, 82, 54, 33, 94,
+ 113, 111, 89, 60, 34, 138, 120, 101, 101, 86,
+ 88, 73, 55, 114, 115, 92, 74, 93, 77, 123,
+ 90, 117, 99, 79, 59, 97, 75, 97, 122, 104,
+ 233, 237, 227, 208, 190, 209, 230, 233, 240, 241,
+ 195, 197, 188, 167, 147, 204, 185, 168, 162, 157,
+ 142, 124, 119, 123, 106, 117, 110, 81, 121, 123,
+ 74, 116, 124, 119, 120, 178, 168, 146, 132, 125,
+ 102, 104, 105, 110, 114, 104, 82, 78, 100, 86,
+ 120, 102, 105, 93, 143, 127, 108, 128, 106, 88,
+ 177, 189, 203, 207, 215, 101, 131, 119, 95, 73,
+ 149, 139, 135, 147, 153, 160, 167, 165, 174, 177,
+ 120, 109, 134, 140, 145, 131, 130, 142, 139, 161,
+ 143, 158, 148, 145, 145, 123, 142, 132, 116, 102,
+ 40, 23, 79, 82, 84, 26, 83, 141, 130, 122,
+ 65, 46, 43, 89, 86, 28, 75, 80, 79, 98,
+ 84, 65, 47, 26, 44, 49, 112, 101, 100, 94,
+ 88, 76, 75, 48, 82, 104, 100, 75, 45, 15,
+ 99, 83, 63, 34, 30, 66, 55, 94, 118, 113,
+ 122, 106, 91, 68, 60, 135, 122, 104, 77, 59,
+ 82, 102, 84, 62, 46, 92, 74, 55, 82, 71,
+ 145, 134, 118, 93, 75, 79, 62, 83, 65, 55,
+ 91, 94, 64, 70, 98, 89, 117, 110, 87, 97,
+ 210, 223, 225, 223, 213, 83, 103, 86, 101, 85,
+ 126, 106, 81, 79, 105, 216, 219, 217, 199, 179,
+ 86, 78, 115, 138, 135, 102, 84, 87, 59, 46,
+ 219, 206, 184, 167, 158, 201, 188, 165, 145, 135,
+ 87, 113, 142, 152, 155, 190, 170, 153, 149, 146,
+ 205, 208, 201, 185, 167, 84, 73, 124, 104, 96,
+ 76, 88, 99, 74, 80, 110, 125, 122, 99, 112,
+ 108, 84, 70, 130, 137, 161, 152, 136, 119, 105,
+ 110, 91, 101, 74, 96, 111, 101, 93, 153, 149,
+ 133, 124, 102, 97, 120, 101, 93, 75, 81, 64,
+ 111, 94, 107, 79, 58, 188, 206, 215, 221, 232,
+ 163, 175, 165, 150, 136, 103, 106, 123, 133, 132,
+ 168, 184, 191, 183, 170, 110, 117, 90, 98, 93,
+ 104, 87, 122, 98, 127, 129, 110, 127, 113, 125,
+ 134, 118, 102, 140, 132, 186, 199, 202, 198, 188,
+ 149, 147, 175, 185, 186, 117, 93, 99, 112, 93,
+ 107, 138, 138, 129, 128, 96, 129, 104, 118, 134,
+ 145, 136, 115, 121, 129, 138, 155, 148, 134, 120,
+ 170, 151, 150, 145, 138, 168, 173, 185, 194, 200,
+ 144, 159, 172, 168, 156, 121, 121, 138, 173, 168,
+ 126, 111, 140, 139, 117, 149, 133, 142, 137, 130,
+ 143, 139, 158, 158, 146, 119, 128, 121, 132, 145,
+ 122, 136, 159, 153, 141, 133, 133, 130, 129, 126,
+ 120, 76, 50, 149, 109, 92, 155, 118, 90, 66,
+ 132, 117, 87, 156, 117, 119, 102, 44, 83, 91,
+ 109, 73, 106, 84, 29, 55, 130, 112, 81, 241,
+ 75, 40, 91, 89, 67, 112, 90, 149, 81, 72,
+ 128, 90, 71, 28, 160, 73, 157, 123, 143, 108,
+ 63, 88, 70, 81, 97, 75, 111, 149, 113, 96,
+ 78, 104, 83, 179, 95, 105, 106, 65, 130, 66,
+ 51, 118, 92, 53, 68, 105, 75, 176, 151, 115,
+ 94, 75, 68, 95, 220, 103, 125, 105, 43, 95,
+ 39, 114, 65, 145, 135, 33, 142, 138, 103, 52,
+ 82, 85, 117, 110, 67, 102, 74, 42, 62, 118,
+ 144, 121, 82, 57, 102, 67, 75, 44, 129, 96,
+ 75, 63, 88, 48, 116, 135, 94, 85, 102, 66,
+ 122, 77, 105, 122, 152, 120, 56, 90, 83, 100,
+ 90, 128, 63, 80, 103, 126, 117, 103, 80, 193,
+ 42, 73, 117, 93, 91, 95, 128, 100, 128, 162,
+ 70, 120, 126, 73, 123, 99, 99, 91, 75, 135,
+ 81, 125, 111, 77, 13, 94, 78, 85, 187, 157,
+ 11, 143, 109, 99, 119, 53, 141, 82, 122, 68,
+ 132, 89, 136, 119, 88, 75, 49, 174, 119, 70,
+ 138, 121, 108, 78, 52, 104, 90, 96, 93, 93,
+ 114, 90, 78, 46, 58, 62, 114, 69, 44, 162,
+ 103, 58, 98, 141, 83, 137, 95, 119, 73, 111,
+ 81, 46, 126, 111, 123, 107, 117, 122, 121, 54,
+ 106, 104, 59, 110, 148, 97, 155, 97, 83, 133,
+ 97, 71, 57, 91, 58, 52, 79, 127, 152, 109,
+ 96, 92, 145, 107, 149, 102, 61, 125, 61, 170,
+ 56, 89, 77, 106, 38, 147, 96, 77, 105, 123,
+ 85, 83, 117, 63, 69, 126, 133, 93, 107, 92,
+ 77, 115, 95, 111, 103, 61, 87, 103, 98, 155,
+ 94, 111, 80, 78, 54, 117, 128, 130, 99, 109,
+ 106, 99, 113, 133, 115, 89, 65, 74, 112, 127
+};
+
+static const uint8_t ff_wmavoice_dq_lsp16i3[0x300] = {
+ 70, 100, 121, 129, 132, 132, 201, 188, 165, 145, 144, 136,
+ 112, 127, 116, 125, 130, 129, 124, 135, 135, 146, 129, 128,
+ 162, 158, 144, 151, 135, 129, 103, 86, 111, 113, 112, 122,
+ 90, 139, 129, 117, 126, 129, 142, 145, 167, 147, 124, 124,
+ 230, 209, 189, 175, 156, 141, 64, 80, 86, 108, 121, 129,
+ 44, 79, 115, 113, 115, 128, 133, 106, 79, 109, 125, 127,
+ 171, 156, 132, 109, 103, 115, 106, 70, 93, 145, 141, 128,
+ 148, 125, 122, 107, 110, 117, 146, 145, 128, 110, 98, 111,
+ 237, 212, 185, 156, 139, 133, 84, 55, 26, 77, 114, 127,
+ 172, 170, 171, 168, 162, 143, 82, 82, 76, 70, 104, 126,
+ 17, 95, 109, 111, 120, 132, 81, 74, 57, 126, 141, 131,
+ 110, 127, 162, 148, 129, 123, 177, 172, 155, 151, 145, 134,
+ 144, 123, 90, 66, 109, 130, 82, 127, 103, 123, 132, 131,
+ 127, 97, 97, 142, 140, 128, 159, 134, 136, 123, 113, 117,
+ 131, 140, 154, 169, 158, 134, 96, 109, 150, 122, 105, 120,
+ 120, 150, 152, 122, 119, 125, 123, 126, 124, 107, 100, 113,
+ 248, 233, 216, 189, 160, 142, 58, 24, 13, 77, 111, 127,
+ 183, 189, 182, 157, 140, 131, 96, 83, 59, 43, 73, 119,
+ 222, 196, 171, 146, 129, 128, 32, 13, 53, 101, 114, 127,
+ 119, 101, 70, 70, 110, 127, 77, 86, 161, 148, 130, 118,
+ 199, 183, 170, 167, 156, 141, 30, 115, 142, 133, 131, 130,
+ 101, 103, 181, 176, 152, 126, 66, 44, 73, 94, 111, 128,
+ 150, 122, 100, 101, 104, 118, 61, 110, 87, 76, 93, 125,
+ 190, 170, 150, 134, 135, 129, 112, 89, 63, 123, 141, 132,
+ 175, 154, 136, 142, 140, 132, 117, 143, 129, 128, 136, 132,
+ 168, 142, 112, 113, 128, 128, 155, 169, 159, 144, 139, 131,
+ 61, 136, 144, 124, 112, 123, 86, 81, 104, 121, 129, 130,
+ 160, 127, 118, 150, 151, 134, 126, 115, 121, 132, 134, 131,
+ 137, 148, 144, 139, 140, 134, 106, 102, 105, 90, 87, 113,
+ 134, 129, 128, 121, 121, 123, 153, 151, 129, 139, 142, 134,
+ 150, 142, 141, 148, 149, 141, 100, 121, 133, 147, 150, 134,
+ 163, 158, 147, 132, 141, 132, 142, 127, 141, 136, 136, 132,
+ 232, 218, 205, 189, 169, 146, 243, 224, 201, 171, 147, 138,
+ 224, 196, 169, 162, 154, 140, 51, 20, 59, 111, 121, 128,
+ 203, 197, 193, 177, 162, 145, 75, 40, 47, 122, 130, 129,
+ 102, 77, 47, 83, 121, 129, 111, 108, 84, 56, 63, 114,
+ 211, 181, 154, 137, 126, 125, 213, 198, 186, 162, 144, 138,
+ 41, 45, 90, 110, 118, 130, 83, 63, 130, 164, 153, 128,
+ 195, 167, 142, 123, 113, 119, 19, 42, 105, 113, 120, 132,
+ 50, 63, 49, 64, 112, 128, 114, 90, 132, 171, 162, 134,
+ 129, 128, 107, 83, 74, 110, 50, 116, 109, 120, 128, 132,
+ 94, 59, 73, 111, 117, 126, 197, 170, 166, 153, 138, 132,
+ 65, 48, 109, 133, 131, 128, 170, 163, 172, 158, 138, 130,
+ 66, 126, 147, 160, 151, 132, 42, 129, 117, 95, 91, 120,
+ 97, 165, 164, 142, 133, 125, 163, 142, 114, 88, 97, 122,
+ 104, 77, 142, 143, 128, 120, 136, 160, 188, 169, 149, 130,
+ 113, 83, 85, 102, 114, 125, 164, 169, 142, 120, 122, 124,
+ 98, 152, 132, 105, 92, 117, 42, 71, 125, 155, 151, 137,
+ 94, 105, 81, 107, 118, 126, 84, 56, 123, 117, 108, 122,
+ 174, 179, 166, 137, 118, 121, 130, 103, 147, 152, 134, 124,
+ 148, 127, 94, 117, 144, 134, 129, 106, 102, 95, 106, 118,
+ 147, 157, 153, 125, 103, 117, 155, 128, 113, 132, 120, 122,
+ 181, 151, 136, 126, 122, 122, 110, 111, 109, 108, 120, 124,
+ 97, 130, 103, 89, 107, 124, 179, 158, 158, 142, 131, 128,
+ 142, 111, 115, 122, 126, 125, 145, 145, 134, 115, 129, 128,
+ 130, 139, 112, 99, 121, 125, 79, 104, 119, 102, 105, 123,
+ 116, 121, 136, 125, 126, 127, 124, 100, 122, 119, 111, 119,
+ 159, 140, 139, 128, 138, 131, 105, 100, 116, 128, 135, 132,
+ 159, 142, 156, 147, 140, 134, 130, 150, 129, 126, 114, 120,
+ 138, 124, 146, 131, 109, 119, 93, 115, 125, 131, 125, 129,
+ 125, 121, 101, 119, 114, 120, 163, 154, 151, 153, 153, 139,
+ 166, 153, 150, 133, 119, 121, 159, 151, 128, 130, 122, 123,
+ 147, 154, 144, 133, 128, 127, 129, 131, 134, 140, 148, 138,
+ 138, 136, 120, 131, 135, 131, 150, 140, 137, 144, 129, 129
+};
+
+static const uint8_t ff_wmavoice_dq_lsp10r[0x1400] = {
+ 128, 128, 129, 129, 130, 130, 131, 130, 129, 129,
+ 134, 133, 127, 125, 136, 135, 135, 134, 173, 172,
+ 133, 139, 136, 165, 133, 176, 137, 159, 135, 152,
+ 147, 161, 147, 152, 149, 156, 146, 146, 140, 136,
+ 134, 135, 136, 140, 139, 155, 123, 133, 132, 142,
+ 132, 148, 143, 177, 124, 143, 123, 136, 126, 134,
+ 126, 125, 125, 124, 129, 128, 123, 123, 133, 133,
+ 116, 116, 121, 121, 121, 120, 129, 128, 131, 131,
+ 132, 133, 132, 129, 138, 124, 138, 124, 132, 100,
+ 135, 94, 149, 111, 152, 115, 150, 128, 141, 133,
+ 129, 129, 130, 129, 147, 145, 136, 137, 120, 122,
+ 120, 122, 127, 129, 104, 108, 113, 115, 124, 124,
+ 140, 139, 147, 145, 132, 130, 184, 177, 201, 196,
+ 170, 171, 160, 161, 145, 147, 137, 145, 131, 131,
+ 130, 130, 130, 130, 130, 130, 132, 134, 131, 132,
+ 131, 133, 141, 144, 142, 149, 84, 93, 103, 104,
+ 139, 139, 142, 140, 147, 147, 172, 165, 122, 121,
+ 98, 100, 101, 106, 112, 117, 122, 124, 124, 124,
+ 134, 133, 133, 133, 146, 142, 147, 145, 156, 156,
+ 143, 146, 119, 124, 129, 132, 151, 149, 136, 135,
+ 147, 148, 181, 180, 199, 188, 190, 173, 166, 161,
+ 147, 142, 153, 149, 154, 146, 150, 146, 138, 134,
+ 131, 135, 96, 136, 48, 138, 56, 131, 63, 124,
+ 85, 128, 103, 132, 117, 134, 120, 132, 125, 129,
+ 131, 130, 129, 128, 129, 128, 163, 168, 117, 120,
+ 121, 121, 136, 138, 131, 132, 135, 136, 131, 133,
+ 133, 133, 133, 134, 117, 118, 105, 109, 142, 151,
+ 144, 159, 131, 138, 121, 126, 123, 123, 121, 124,
+ 131, 131, 129, 129, 141, 140, 142, 134, 87, 90,
+ 109, 109, 130, 127, 139, 143, 133, 131, 127, 126,
+ 134, 135, 134, 136, 97, 98, 130, 132, 134, 137,
+ 115, 119, 125, 130, 107, 109, 119, 118, 126, 127,
+ 134, 135, 127, 132, 172, 203, 160, 196, 152, 179,
+ 152, 172, 148, 168, 153, 172, 145, 156, 137, 140,
+ 102, 116, 42, 56, 74, 61, 82, 70, 86, 78,
+ 101, 97, 104, 100, 115, 108, 116, 108, 123, 118,
+ 149, 143, 166, 129, 168, 96, 142, 95, 135, 98,
+ 117, 86, 116, 93, 121, 108, 119, 107, 121, 117,
+ 135, 135, 127, 138, 72, 132, 99, 136, 112, 147,
+ 120, 152, 136, 155, 138, 146, 140, 142, 134, 139,
+ 163, 145, 192, 130, 147, 124, 147, 125, 133, 125,
+ 127, 124, 128, 123, 129, 122, 130, 122, 130, 125,
+ 130, 137, 135, 180, 124, 133, 130, 129, 132, 133,
+ 124, 124, 131, 130, 132, 136, 126, 124, 127, 125,
+ 132, 132, 133, 133, 144, 140, 143, 142, 137, 135,
+ 143, 138, 152, 149, 221, 219, 158, 161, 143, 141,
+ 130, 129, 140, 135, 170, 145, 193, 156, 186, 152,
+ 167, 139, 151, 131, 142, 127, 134, 120, 131, 125,
+ 135, 133, 141, 125, 199, 109, 137, 126, 134, 123,
+ 130, 129, 132, 123, 128, 125, 122, 126, 125, 125,
+ 130, 128, 91, 89, 138, 135, 139, 134, 133, 129,
+ 132, 130, 125, 128, 136, 135, 129, 127, 126, 126,
+ 132, 131, 133, 131, 128, 120, 132, 126, 126, 119,
+ 134, 130, 131, 123, 104, 95, 140, 141, 136, 137,
+ 133, 133, 133, 134, 117, 98, 74, 49, 112, 111,
+ 123, 122, 126, 127, 131, 131, 127, 126, 128, 129,
+ 130, 131, 124, 127, 101, 107, 108, 109, 115, 115,
+ 100, 99, 130, 128, 134, 136, 125, 127, 128, 130,
+ 136, 137, 145, 150, 149, 164, 136, 151, 114, 111,
+ 124, 125, 143, 150, 162, 174, 158, 169, 136, 137,
+ 131, 131, 131, 131, 132, 133, 111, 110, 122, 121,
+ 136, 136, 134, 133, 131, 132, 127, 127, 125, 125,
+ 128, 129, 129, 130, 125, 127, 140, 140, 148, 149,
+ 133, 136, 146, 153, 110, 118, 127, 129, 128, 129,
+ 131, 133, 127, 131, 140, 161, 167, 224, 131, 139,
+ 136, 143, 135, 139, 138, 143, 149, 155, 141, 143,
+ 134, 132, 120, 111, 83, 83, 121, 126, 102, 107,
+ 112, 115, 97, 104, 120, 115, 129, 123, 122, 122,
+ 134, 135, 122, 131, 102, 124, 114, 119, 93, 103,
+ 78, 79, 67, 72, 66, 73, 78, 82, 103, 102,
+ 144, 135, 165, 139, 165, 129, 160, 126, 153, 127,
+ 161, 134, 160, 142, 160, 143, 148, 140, 138, 135,
+ 138, 95, 147, 54, 143, 78, 140, 112, 142, 113,
+ 140, 121, 135, 117, 135, 122, 136, 131, 131, 132,
+ 147, 159, 140, 156, 127, 81, 142, 128, 146, 127,
+ 144, 125, 146, 128, 149, 130, 144, 135, 133, 128,
+ 130, 131, 131, 131, 134, 139, 126, 134, 141, 154,
+ 168, 205, 153, 176, 148, 163, 147, 158, 141, 143,
+ 131, 135, 126, 146, 108, 157, 107, 156, 119, 146,
+ 100, 138, 104, 125, 119, 134, 101, 122, 113, 122,
+ 95, 133, 52, 140, 83, 136, 110, 133, 114, 131,
+ 123, 131, 133, 131, 138, 135, 132, 132, 127, 127,
+ 129, 128, 124, 122, 128, 126, 145, 170, 143, 172,
+ 141, 163, 143, 176, 138, 164, 139, 155, 135, 145,
+ 135, 136, 136, 127, 132, 76, 128, 76, 127, 63,
+ 125, 66, 123, 67, 120, 71, 124, 92, 122, 111,
+ 133, 133, 135, 136, 139, 140, 147, 147, 150, 144,
+ 156, 147, 150, 145, 154, 146, 120, 123, 123, 124,
+ 137, 133, 170, 141, 124, 124, 135, 134, 134, 135,
+ 132, 132, 129, 129, 130, 130, 136, 136, 130, 132,
+ 147, 159, 135, 158, 115, 146, 120, 148, 117, 136,
+ 115, 137, 113, 132, 133, 142, 140, 144, 132, 134,
+ 134, 135, 134, 137, 137, 147, 162, 178, 136, 147,
+ 134, 144, 123, 132, 111, 113, 113, 113, 124, 124,
+ 132, 131, 126, 126, 117, 114, 100, 95, 130, 125,
+ 157, 145, 164, 156, 163, 158, 145, 145, 133, 134,
+ 134, 134, 127, 126, 113, 102, 136, 130, 124, 122,
+ 143, 145, 127, 131, 135, 143, 133, 137, 132, 132,
+ 92, 94, 122, 125, 128, 129, 131, 130, 134, 135,
+ 132, 128, 129, 127, 132, 132, 131, 129, 127, 127,
+ 129, 129, 132, 131, 139, 131, 137, 132, 216, 178,
+ 146, 134, 147, 137, 151, 142, 148, 139, 144, 138,
+ 128, 127, 129, 129, 123, 131, 71, 91, 126, 128,
+ 130, 134, 117, 123, 125, 125, 135, 140, 129, 132,
+ 132, 132, 133, 134, 124, 130, 127, 133, 133, 138,
+ 142, 149, 135, 141, 145, 149, 154, 164, 135, 138,
+ 135, 135, 141, 142, 138, 137, 116, 96, 105, 86,
+ 127, 118, 128, 120, 124, 117, 125, 117, 125, 121,
+ 131, 131, 132, 134, 144, 145, 112, 112, 121, 123,
+ 113, 116, 121, 123, 139, 138, 128, 128, 131, 131,
+ 134, 132, 132, 132, 125, 128, 127, 130, 125, 131,
+ 120, 128, 90, 119, 68, 98, 99, 112, 115, 124,
+ 135, 135, 134, 134, 128, 129, 137, 137, 137, 138,
+ 110, 114, 129, 130, 144, 145, 123, 125, 129, 129,
+ 132, 133, 129, 130, 168, 187, 140, 149, 137, 144,
+ 129, 130, 129, 134, 133, 138, 118, 118, 122, 120,
+ 131, 130, 129, 128, 133, 133, 125, 125, 124, 123,
+ 181, 179, 129, 129, 131, 127, 139, 136, 130, 128,
+ 133, 133, 132, 132, 121, 120, 122, 119, 132, 129,
+ 129, 125, 107, 96, 136, 137, 150, 146, 135, 134,
+ 131, 131, 130, 130, 126, 123, 126, 123, 128, 125,
+ 130, 123, 134, 127, 183, 159, 143, 135, 137, 134,
+ 129, 129, 128, 128, 134, 133, 139, 138, 133, 132,
+ 129, 127, 154, 151, 150, 144, 146, 146, 141, 142,
+ 132, 132, 131, 131, 130, 130, 132, 133, 114, 115,
+ 132, 132, 122, 122, 132, 131, 115, 117, 120, 120,
+ 129, 129, 130, 130, 130, 129, 130, 131, 129, 131,
+ 130, 130, 129, 129, 133, 132, 143, 144, 91, 91,
+ 137, 136, 118, 107, 60, 45, 56, 49, 57, 52,
+ 60, 56, 71, 75, 77, 80, 92, 97, 106, 106,
+ 112, 131, 58, 121, 19, 65, 84, 101, 108, 122,
+ 121, 127, 112, 117, 106, 112, 117, 124, 126, 127,
+ 130, 129, 138, 133, 166, 155, 192, 179, 192, 177,
+ 208, 191, 204, 192, 186, 179, 163, 163, 138, 142,
+ 134, 134, 144, 142, 243, 236, 148, 146, 141, 137,
+ 145, 141, 151, 144, 147, 143, 135, 139, 134, 133,
+ 134, 128, 138, 88, 142, 10, 127, 76, 130, 96,
+ 129, 102, 128, 108, 123, 111, 127, 119, 127, 124,
+ 136, 136, 139, 139, 142, 140, 246, 241, 158, 167,
+ 143, 145, 146, 149, 143, 145, 148, 152, 133, 134,
+ 139, 135, 135, 136, 99, 137, 95, 133, 75, 138,
+ 67, 135, 73, 128, 83, 132, 96, 126, 115, 127,
+ 130, 132, 137, 136, 140, 135, 134, 130, 137, 131,
+ 159, 151, 215, 197, 181, 170, 160, 149, 150, 143,
+ 145, 148, 186, 207, 141, 147, 135, 137, 122, 122,
+ 126, 125, 128, 126, 127, 127, 134, 126, 131, 123,
+ 133, 133, 126, 122, 128, 122, 99, 93, 59, 60,
+ 82, 82, 106, 107, 119, 123, 124, 128, 128, 129,
+ 134, 137, 133, 139, 133, 136, 141, 132, 139, 122,
+ 142, 97, 130, 81, 128, 89, 129, 101, 125, 112,
+ 137, 140, 129, 148, 101, 159, 118, 180, 122, 178,
+ 120, 178, 116, 168, 118, 153, 127, 151, 126, 136,
+ 132, 134, 125, 126, 118, 105, 156, 124, 180, 132,
+ 163, 124, 148, 121, 131, 112, 127, 115, 125, 122,
+ 129, 131, 128, 129, 136, 134, 142, 141, 165, 158,
+ 203, 182, 141, 136, 132, 130, 135, 135, 130, 130,
+ 133, 133, 132, 132, 127, 126, 106, 105, 112, 110,
+ 106, 105, 80, 84, 100, 101, 122, 125, 126, 128,
+ 101, 109, 46, 59, 114, 112, 119, 119, 126, 121,
+ 129, 124, 128, 125, 125, 122, 123, 120, 125, 122,
+ 135, 134, 121, 134, 56, 139, 131, 145, 135, 138,
+ 136, 139, 126, 130, 122, 132, 126, 129, 124, 129,
+ 153, 169, 146, 179, 138, 139, 151, 143, 148, 138,
+ 153, 137, 142, 129, 144, 126, 140, 128, 133, 126,
+ 136, 134, 154, 149, 173, 157, 152, 144, 149, 141,
+ 137, 136, 127, 121, 123, 121, 121, 126, 120, 123,
+ 157, 143, 166, 135, 120, 122, 112, 118, 102, 118,
+ 111, 124, 134, 131, 141, 138, 135, 134, 126, 129,
+ 140, 123, 152, 76, 131, 116, 138, 136, 126, 134,
+ 130, 142, 126, 136, 120, 132, 126, 128, 124, 127,
+ 131, 138, 80, 147, 126, 138, 130, 140, 129, 134,
+ 133, 135, 131, 132, 126, 127, 127, 125, 125, 123,
+ 132, 132, 130, 132, 123, 130, 102, 102, 107, 110,
+ 116, 127, 132, 152, 142, 160, 143, 151, 142, 146,
+ 132, 132, 132, 132, 125, 126, 132, 140, 158, 199,
+ 135, 149, 134, 140, 135, 131, 129, 120, 127, 121,
+ 129, 130, 122, 123, 125, 124, 138, 138, 138, 135,
+ 140, 141, 101, 94, 105, 98, 121, 122, 127, 128,
+ 126, 127, 119, 121, 133, 156, 132, 159, 130, 148,
+ 137, 164, 127, 138, 130, 137, 135, 140, 126, 126,
+ 128, 129, 129, 129, 126, 124, 130, 128, 143, 138,
+ 149, 143, 185, 170, 129, 127, 138, 133, 138, 135,
+ 132, 134, 137, 144, 139, 183, 131, 145, 127, 128,
+ 128, 127, 128, 122, 129, 125, 145, 139, 135, 131,
+ 132, 133, 132, 130, 152, 96, 159, 85, 150, 105,
+ 154, 115, 143, 120, 138, 126, 134, 124, 130, 126,
+ 128, 127, 121, 123, 122, 123, 116, 125, 84, 87,
+ 133, 135, 129, 131, 123, 126, 133, 135, 131, 130,
+ 136, 134, 129, 119, 79, 63, 116, 116, 136, 133,
+ 133, 130, 140, 143, 127, 127, 124, 125, 127, 128,
+ 128, 126, 124, 120, 139, 128, 153, 134, 151, 134,
+ 174, 145, 159, 136, 165, 144, 171, 149, 143, 135,
+ 134, 134, 133, 133, 121, 119, 177, 162, 166, 154,
+ 127, 130, 132, 132, 136, 137, 142, 143, 138, 137,
+ 167, 151, 162, 142, 128, 136, 142, 148, 128, 143,
+ 145, 153, 140, 149, 132, 141, 128, 139, 127, 133,
+ 156, 169, 131, 129, 126, 120, 127, 125, 129, 120,
+ 131, 126, 126, 123, 124, 121, 122, 121, 123, 123,
+ 138, 140, 149, 156, 145, 152, 105, 102, 131, 126,
+ 151, 146, 147, 139, 144, 137, 143, 133, 135, 130,
+ 132, 130, 131, 129, 126, 130, 126, 129, 110, 135,
+ 115, 139, 108, 146, 105, 147, 121, 134, 124, 133,
+ 137, 137, 135, 134, 143, 142, 146, 146, 120, 121,
+ 139, 137, 133, 129, 149, 145, 139, 133, 130, 127,
+ 134, 134, 134, 134, 125, 124, 117, 119, 120, 113,
+ 84, 80, 122, 125, 108, 112, 97, 102, 118, 120,
+ 124, 123, 115, 116, 110, 111, 98, 97, 127, 124,
+ 129, 127, 120, 117, 114, 109, 106, 104, 116, 116,
+ 138, 138, 139, 141, 142, 146, 127, 125, 133, 130,
+ 134, 128, 134, 127, 116, 91, 105, 84, 114, 106,
+ 128, 128, 126, 126, 131, 137, 126, 129, 133, 139,
+ 134, 145, 132, 143, 150, 192, 131, 142, 138, 141,
+ 132, 130, 132, 130, 149, 138, 196, 152, 137, 125,
+ 134, 125, 139, 128, 133, 125, 141, 134, 134, 135,
+ 134, 135, 134, 135, 131, 130, 136, 133, 110, 106,
+ 142, 144, 153, 162, 131, 129, 134, 132, 131, 130,
+ 126, 125, 132, 130, 168, 153, 126, 124, 130, 126,
+ 140, 135, 140, 134, 138, 133, 145, 137, 135, 134,
+ 130, 130, 132, 131, 133, 132, 129, 129, 125, 128,
+ 128, 130, 133, 139, 143, 152, 193, 215, 152, 160,
+ 130, 131, 129, 131, 130, 131, 135, 136, 136, 141,
+ 83, 81, 121, 120, 136, 130, 150, 145, 147, 145,
+ 134, 133, 135, 133, 146, 142, 135, 131, 127, 128,
+ 134, 135, 93, 102, 126, 132, 131, 133, 127, 129,
+ 124, 125, 120, 122, 103, 106, 128, 129, 139, 138,
+ 127, 128, 134, 134, 143, 138, 139, 134, 135, 133,
+ 131, 130, 133, 131, 139, 134, 138, 136, 166, 156,
+ 119, 116, 121, 122, 126, 124, 116, 117, 123, 124,
+ 131, 131, 129, 129, 130, 128, 141, 138, 135, 132,
+ 154, 145, 137, 129, 131, 125, 146, 137, 138, 135,
+ 131, 131, 131, 132, 129, 130, 134, 138, 111, 116,
+ 113, 118, 123, 125, 122, 124, 143, 147, 138, 140,
+ 116, 113, 114, 112, 130, 126, 117, 115, 127, 126,
+ 139, 137, 141, 139, 131, 132, 143, 144, 139, 140,
+ 130, 130, 129, 128, 136, 134, 119, 117, 152, 143,
+ 155, 143, 120, 119, 142, 139, 124, 130, 126, 128,
+ 112, 110, 112, 109, 136, 132, 125, 118, 121, 115,
+ 103, 101, 109, 100, 125, 120, 121, 117, 122, 121,
+ 128, 128, 127, 127, 124, 124, 128, 127, 131, 129,
+ 142, 138, 147, 141, 115, 108, 113, 109, 122, 119,
+ 136, 133, 150, 139, 142, 131, 119, 111, 151, 137,
+ 121, 116, 146, 134, 137, 129, 121, 123, 127, 129,
+ 130, 130, 130, 130, 136, 137, 126, 126, 136, 136,
+ 133, 133, 139, 139, 142, 143, 119, 120, 134, 134,
+ 132, 132, 133, 133, 135, 138, 129, 131, 133, 134,
+ 135, 138, 126, 130, 117, 118, 131, 132, 135, 135,
+ 129, 129, 128, 128, 126, 129, 127, 129, 123, 125,
+ 115, 117, 156, 157, 127, 131, 129, 129, 128, 129,
+ 129, 130, 131, 131, 126, 127, 135, 134, 136, 135,
+ 140, 136, 117, 113, 132, 128, 104, 97, 109, 106,
+ 131, 131, 131, 131, 121, 123, 124, 125, 126, 127,
+ 127, 127, 135, 135, 128, 128, 130, 130, 141, 140,
+ 129, 129, 129, 129, 129, 127, 127, 125, 149, 146,
+ 125, 123, 134, 133, 134, 132, 152, 150, 138, 138,
+ 128, 128, 126, 125, 132, 133, 141, 143, 136, 136,
+ 126, 127, 126, 127, 129, 131, 128, 129, 135, 134,
+ 176, 139, 192, 135, 145, 122, 149, 117, 155, 134,
+ 169, 133, 157, 139, 142, 136, 151, 152, 142, 147,
+ 166, 174, 103, 107, 141, 134, 140, 136, 144, 135,
+ 147, 135, 156, 131, 153, 127, 133, 126, 130, 124,
+ 127, 130, 123, 124, 114, 105, 195, 193, 156, 157,
+ 165, 158, 126, 122, 149, 141, 174, 173, 152, 147,
+ 136, 139, 131, 138, 163, 169, 103, 124, 80, 102,
+ 153, 186, 121, 151, 134, 161, 156, 190, 141, 151,
+ 121, 123, 124, 127, 119, 127, 133, 134, 157, 156,
+ 81, 69, 136, 134, 160, 169, 118, 114, 135, 128,
+ 114, 116, 97, 97, 117, 122, 152, 161, 115, 121,
+ 106, 122, 135, 137, 111, 113, 125, 135, 141, 145,
+ 143, 146, 143, 150, 132, 136, 142, 150, 151, 167,
+ 101, 107, 155, 173, 112, 124, 105, 100, 128, 126,
+ 127, 130, 133, 134, 142, 121, 131, 116, 176, 145,
+ 161, 120, 209, 150, 196, 133, 147, 115, 149, 130,
+ 144, 145, 144, 145, 120, 119, 163, 160, 117, 118,
+ 123, 117, 154, 119, 193, 98, 149, 101, 137, 116,
+ 133, 135, 140, 143, 144, 156, 131, 146, 186, 201,
+ 140, 139, 123, 125, 158, 169, 157, 166, 142, 143,
+ 130, 131, 132, 132, 128, 128, 141, 142, 147, 149,
+ 145, 148, 137, 139, 129, 129, 107, 108, 157, 157,
+ 120, 121, 119, 119, 140, 132, 137, 131, 118, 113,
+ 143, 136, 134, 135, 164, 158, 133, 125, 127, 124,
+ 148, 122, 197, 130, 173, 145, 110, 139, 123, 165,
+ 83, 158, 90, 167, 93, 142, 136, 169, 134, 152,
+ 130, 126, 154, 138, 227, 150, 156, 114, 147, 114,
+ 142, 109, 135, 110, 166, 135, 176, 150, 152, 142,
+ 132, 132, 136, 136, 130, 135, 143, 152, 136, 144,
+ 152, 160, 177, 185, 112, 112, 165, 166, 160, 161,
+ 145, 145, 138, 139, 116, 118, 127, 131, 66, 80,
+ 132, 142, 119, 127, 101, 108, 120, 130, 126, 130,
+ 135, 135, 142, 139, 153, 137, 55, 30, 142, 139,
+ 139, 143, 135, 133, 129, 133, 109, 108, 129, 129,
+ 136, 135, 134, 131, 129, 132, 132, 134, 135, 149,
+ 79, 206, 123, 137, 135, 143, 130, 140, 131, 134,
+ 100, 99, 165, 164, 142, 123, 148, 133, 133, 122,
+ 142, 133, 138, 125, 119, 111, 129, 123, 137, 130,
+ 131, 132, 123, 129, 174, 185, 196, 181, 127, 111,
+ 156, 141, 132, 114, 129, 106, 132, 107, 126, 117,
+ 134, 140, 131, 136, 119, 146, 92, 246, 128, 132,
+ 125, 129, 132, 140, 128, 141, 126, 145, 137, 142,
+ 130, 130, 110, 115, 124, 139, 127, 151, 118, 152,
+ 98, 146, 36, 108, 126, 158, 112, 146, 112, 130,
+ 138, 136, 145, 138, 153, 145, 116, 125, 90, 103,
+ 137, 138, 189, 185, 141, 151, 86, 93, 111, 111,
+ 133, 171, 125, 209, 140, 132, 130, 134, 129, 101,
+ 142, 120, 142, 132, 135, 126, 141, 140, 140, 134,
+ 128, 123, 131, 123, 138, 118, 163, 133, 240, 197,
+ 176, 151, 126, 123, 81, 94, 109, 118, 124, 133,
+ 135, 133, 137, 134, 154, 135, 140, 155, 69, 190,
+ 119, 149, 141, 151, 142, 123, 135, 125, 129, 130,
+ 127, 125, 132, 127, 107, 80, 123, 103, 145, 131,
+ 133, 107, 140, 103, 135, 106, 170, 145, 159, 143,
+ 136, 137, 127, 130, 105, 119, 129, 134, 141, 151,
+ 116, 127, 119, 140, 75, 119, 152, 162, 149, 152,
+ 72, 138, 9, 143, 118, 160, 126, 134, 141, 147,
+ 135, 131, 129, 129, 135, 129, 136, 126, 133, 125,
+ 137, 135, 146, 141, 145, 139, 141, 140, 133, 130,
+ 213, 208, 139, 130, 139, 136, 117, 117, 126, 125,
+ 133, 130, 138, 131, 141, 100, 145, 93, 159, 121,
+ 144, 132, 117, 160, 102, 187, 99, 162, 117, 144,
+ 132, 132, 134, 134, 140, 141, 127, 126, 128, 131,
+ 116, 116, 121, 127, 119, 126, 114, 114, 99, 100,
+ 141, 144, 148, 159, 179, 224, 95, 131, 100, 125,
+ 87, 110, 112, 132, 134, 147, 111, 125, 122, 122,
+ 137, 140, 141, 129, 169, 12, 144, 132, 133, 144,
+ 141, 146, 137, 147, 136, 122, 133, 130, 131, 128,
+ 141, 142, 128, 139, 15, 69, 160, 159, 142, 130,
+ 137, 126, 159, 141, 145, 143, 128, 125, 134, 128,
+ 131, 130, 127, 127, 114, 104, 119, 98, 83, 68,
+ 139, 120, 173, 142, 199, 154, 191, 153, 158, 145,
+ 128, 130, 127, 127, 148, 150, 110, 99, 119, 109,
+ 120, 113, 163, 154, 110, 90, 138, 129, 149, 144,
+ 131, 134, 124, 142, 76, 217, 130, 129, 140, 138,
+ 133, 135, 145, 150, 136, 138, 127, 130, 130, 134,
+ 144, 119, 178, 70, 143, 130, 115, 136, 139, 138,
+ 129, 109, 136, 116, 147, 122, 126, 112, 126, 123,
+ 132, 139, 128, 144, 107, 156, 75, 163, 120, 164,
+ 151, 136, 151, 99, 160, 112, 159, 126, 143, 126,
+ 140, 138, 137, 135, 152, 108, 251, 85, 138, 116,
+ 137, 118, 141, 119, 136, 121, 150, 134, 138, 131,
+ 137, 137, 143, 144, 150, 153, 148, 154, 152, 151,
+ 117, 104, 124, 96, 93, 67, 146, 138, 149, 148,
+ 149, 153, 172, 193, 108, 114, 125, 128, 145, 165,
+ 149, 160, 121, 130, 115, 120, 110, 112, 121, 118,
+ 145, 146, 141, 142, 127, 127, 103, 95, 138, 143,
+ 114, 126, 109, 115, 143, 136, 153, 149, 144, 142,
+ 140, 138, 150, 144, 128, 116, 142, 136, 135, 122,
+ 93, 88, 164, 163, 141, 142, 171, 182, 154, 160,
+ 124, 125, 122, 123, 158, 155, 111, 97, 138, 130,
+ 157, 134, 101, 65, 129, 118, 121, 114, 124, 119,
+ 131, 133, 125, 129, 136, 147, 135, 152, 131, 133,
+ 110, 115, 118, 114, 161, 159, 233, 218, 172, 166,
+ 140, 107, 125, 0, 140, 103, 140, 115, 125, 113,
+ 132, 135, 128, 133, 138, 146, 131, 145, 127, 133,
+ 131, 131, 122, 122, 135, 132, 126, 124, 132, 133,
+ 164, 167, 121, 127, 117, 120, 167, 162, 145, 143,
+ 135, 134, 136, 134, 156, 146, 195, 177, 127, 139,
+ 108, 140, 141, 173, 141, 178, 131, 155, 129, 141,
+ 134, 134, 119, 114, 184, 184, 127, 126, 147, 151,
+ 130, 140, 146, 159, 134, 145, 131, 136, 137, 142,
+ 135, 137, 128, 136, 83, 108, 97, 98, 152, 119,
+ 207, 144, 142, 121, 144, 129, 131, 127, 130, 132,
+ 124, 125, 108, 107, 94, 116, 81, 114, 139, 173,
+ 131, 158, 145, 177, 141, 163, 136, 140, 143, 144,
+ 135, 141, 132, 136, 134, 142, 142, 136, 173, 50,
+ 143, 106, 142, 127, 134, 139, 127, 133, 125, 125,
+ 129, 130, 131, 133, 132, 148, 110, 138, 113, 135,
+ 138, 175, 108, 151, 55, 119, 51, 100, 93, 116,
+ 121, 121, 146, 151, 99, 120, 127, 137, 107, 122,
+ 125, 139, 110, 132, 135, 156, 141, 156, 148, 157,
+ 137, 137, 141, 140, 139, 137, 130, 128, 138, 136,
+ 132, 134, 115, 110, 177, 179, 81, 86, 100, 98,
+ 84, 83, 121, 121, 148, 157, 127, 133, 146, 156,
+ 127, 136, 143, 151, 135, 139, 138, 142, 136, 136,
+ 201, 164, 151, 129, 123, 136, 147, 148, 127, 142,
+ 128, 143, 101, 126, 119, 133, 114, 131, 116, 126,
+ 132, 133, 140, 140, 126, 125, 156, 153, 142, 129,
+ 140, 130, 77, 69, 134, 132, 146, 148, 135, 136,
+ 133, 132, 123, 116, 116, 103, 150, 135, 144, 127,
+ 130, 117, 136, 122, 122, 106, 48, 38, 81, 78,
+ 145, 146, 135, 136, 123, 122, 126, 133, 133, 138,
+ 145, 145, 144, 150, 160, 181, 142, 139, 150, 150,
+ 136, 136, 139, 139, 133, 133, 139, 135, 134, 129,
+ 140, 137, 153, 145, 132, 131, 151, 144, 68, 66,
+ 137, 137, 139, 139, 146, 146, 142, 139, 129, 128,
+ 131, 129, 133, 132, 135, 134, 135, 134, 201, 200,
+ 137, 136, 146, 143, 155, 153, 157, 158, 131, 138,
+ 140, 139, 143, 144, 128, 123, 216, 192, 159, 150,
+ 137, 138, 136, 142, 145, 148, 126, 162, 140, 170,
+ 186, 95, 131, 140, 143, 148, 133, 128, 130, 133,
+ 141, 139, 153, 150, 122, 122, 134, 144, 124, 130,
+ 159, 166, 133, 139, 151, 150, 138, 139, 131, 134,
+ 121, 121, 131, 129, 148, 180, 121, 135, 118, 131,
+ 124, 148, 119, 119, 129, 126, 150, 156, 155, 160,
+ 40, 154, 115, 157, 133, 129, 140, 133, 143, 133,
+ 143, 132, 144, 130, 141, 131, 134, 130, 137, 133,
+ 134, 136, 141, 140, 145, 137, 152, 124, 183, 91,
+ 118, 154, 123, 158, 136, 134, 140, 142, 138, 142,
+ 138, 135, 131, 131, 138, 129, 121, 128, 146, 219,
+ 124, 123, 125, 135, 120, 126, 127, 141, 133, 136,
+ 127, 124, 120, 107, 152, 125, 149, 108, 158, 144,
+ 196, 185, 174, 164, 151, 149, 138, 131, 140, 137,
+ 149, 148, 144, 145, 143, 145, 140, 143, 141, 147,
+ 112, 125, 113, 113, 149, 155, 143, 149, 146, 151,
+ 138, 138, 141, 138, 144, 129, 134, 125, 143, 140,
+ 153, 154, 142, 123, 162, 42, 154, 106, 153, 130,
+ 153, 153, 137, 137, 144, 144, 142, 140, 165, 151,
+ 161, 140, 144, 134, 156, 124, 167, 143, 166, 155,
+ 132, 132, 137, 138, 137, 132, 124, 127, 140, 144,
+ 134, 140, 162, 180, 127, 131, 152, 169, 145, 156,
+ 133, 134, 131, 133, 130, 132, 147, 149, 125, 117,
+ 127, 118, 159, 155, 147, 142, 122, 117, 145, 144,
+ 138, 137, 130, 133, 113, 149, 168, 224, 166, 201,
+ 129, 151, 147, 154, 136, 135, 140, 136, 152, 141,
+ 120, 112, 140, 127, 161, 100, 132, 115, 118, 125,
+ 115, 133, 115, 157, 144, 146, 114, 135, 127, 139,
+ 138, 141, 135, 135, 137, 136, 147, 142, 143, 144,
+ 139, 152, 142, 136, 147, 143, 177, 39, 125, 71,
+ 147, 143, 66, 88, 132, 158, 123, 126, 116, 135,
+ 119, 124, 128, 135, 133, 140, 137, 126, 137, 130,
+ 155, 38, 149, 103, 130, 135, 139, 143, 127, 137,
+ 135, 141, 138, 148, 131, 148, 136, 147, 132, 139,
+ 136, 140, 115, 129, 115, 151, 136, 160, 87, 131,
+ 157, 176, 150, 164, 140, 141, 135, 119, 137, 133,
+ 141, 140, 140, 139, 134, 134, 142, 144, 131, 132,
+ 131, 134, 131, 132, 116, 114, 129, 133, 205, 207,
+ 130, 133, 160, 170, 137, 127, 124, 112, 158, 146,
+ 155, 137, 134, 136, 137, 142, 177, 184, 149, 152,
+ 135, 134, 133, 132, 135, 129, 144, 136, 139, 134,
+ 161, 155, 126, 109, 215, 186, 177, 153, 160, 149,
+ 139, 139, 136, 140, 140, 142, 186, 71, 129, 144,
+ 131, 165, 142, 152, 140, 151, 141, 143, 137, 139,
+ 144, 138, 150, 135, 133, 126, 136, 143, 99, 152,
+ 139, 131, 190, 118, 122, 147, 134, 155, 136, 143,
+ 138, 135, 137, 132, 147, 144, 150, 144, 138, 134,
+ 129, 133, 130, 138, 56, 175, 129, 166, 147, 165,
+ 140, 138, 144, 137, 141, 133, 150, 139, 129, 135,
+ 40, 83, 126, 130, 110, 120, 100, 110, 126, 128,
+ 141, 142, 217, 175, 172, 151, 146, 153, 125, 132,
+ 128, 137, 141, 141, 145, 145, 140, 133, 132, 131,
+ 129, 144, 128, 177, 133, 195, 147, 120, 138, 131,
+ 161, 114, 166, 134, 162, 118, 161, 115, 155, 129,
+ 137, 136, 141, 129, 141, 132, 55, 168, 121, 126,
+ 136, 139, 120, 133, 149, 147, 132, 141, 131, 136,
+ 147, 150, 151, 132, 101, 31, 117, 101, 129, 132,
+ 122, 138, 128, 137, 140, 170, 131, 143, 131, 134,
+ 149, 192, 122, 158, 136, 146, 133, 166, 143, 141,
+ 141, 136, 141, 129, 125, 155, 140, 138, 137, 131,
+ 111, 112, 131, 132, 120, 127, 149, 148, 151, 141,
+ 156, 148, 133, 129, 127, 124, 144, 137, 142, 139,
+ 134, 133, 141, 138, 133, 135, 124, 96, 226, 152,
+ 116, 108, 128, 105, 155, 130, 153, 138, 144, 139,
+ 142, 141, 137, 135, 142, 143, 156, 162, 136, 89,
+ 188, 145, 181, 152, 138, 146, 146, 154, 145, 149,
+ 152, 133, 158, 133, 42, 153, 117, 144, 149, 139,
+ 125, 139, 134, 128, 150, 128, 143, 125, 135, 132,
+ 143, 141, 143, 141, 164, 173, 141, 142, 156, 155,
+ 154, 154, 169, 170, 77, 80, 112, 105, 135, 134,
+ 126, 143, 120, 172, 111, 144, 120, 154, 107, 153,
+ 95, 134, 104, 134, 128, 116, 163, 131, 151, 136,
+ 135, 133, 142, 143, 152, 204, 149, 112, 156, 128,
+ 150, 126, 127, 129, 139, 175, 143, 141, 138, 135,
+ 168, 148, 152, 105, 164, 121, 134, 122, 119, 109,
+ 122, 148, 136, 143, 153, 132, 158, 148, 149, 150,
+ 133, 131, 142, 141, 150, 149, 156, 173, 138, 155,
+ 129, 144, 111, 107, 130, 129, 96, 89, 106, 104,
+ 135, 135, 144, 146, 131, 153, 134, 154, 146, 166,
+ 117, 138, 163, 187, 190, 216, 149, 156, 149, 152,
+ 142, 142, 153, 154, 109, 145, 40, 102, 116, 126,
+ 137, 139, 149, 157, 108, 124, 139, 146, 142, 147,
+ 130, 126, 120, 111, 172, 146, 169, 136, 150, 135,
+ 126, 96, 159, 143, 150, 122, 162, 129, 156, 142,
+ 135, 142, 144, 138, 222, 109, 137, 145, 144, 142,
+ 141, 143, 138, 136, 124, 150, 133, 144, 137, 145,
+ 141, 144, 139, 144, 134, 154, 114, 136, 145, 173,
+ 151, 215, 110, 115, 127, 134, 145, 150, 145, 144,
+ 144, 142, 139, 131, 147, 132, 141, 119, 143, 106,
+ 165, 41, 147, 129, 129, 144, 138, 135, 138, 140,
+ 128, 150, 89, 163, 154, 115, 141, 127, 132, 145,
+ 135, 157, 143, 145, 140, 141, 127, 135, 127, 129,
+ 142, 147, 116, 147, 104, 162, 153, 143, 146, 130,
+ 144, 110, 133, 123, 130, 137, 118, 198, 126, 152,
+ 154, 146, 139, 127, 147, 112, 207, 151, 156, 136,
+ 162, 137, 108, 121, 130, 135, 125, 131, 131, 134,
+ 134, 134, 141, 144, 107, 143, 137, 144, 124, 136,
+ 115, 147, 130, 157, 119, 167, 71, 144, 97, 128,
+ 134, 138, 132, 133, 138, 138, 146, 146, 147, 131,
+ 141, 138, 185, 65, 145, 123, 139, 130, 142, 128,
+ 139, 136, 157, 147, 124, 119, 164, 148, 170, 154,
+ 133, 130, 157, 148, 140, 141, 130, 135, 134, 137,
+ 136, 137, 143, 144, 144, 144, 178, 186, 71, 73,
+ 120, 118, 127, 124, 152, 151, 155, 146, 141, 138,
+ 142, 143, 139, 143, 133, 134, 139, 140, 138, 135,
+ 146, 141, 78, 198, 129, 139, 141, 141, 134, 141,
+ 137, 136, 120, 120, 124, 118, 143, 148, 148, 152,
+ 131, 143, 129, 137, 152, 158, 157, 160, 175, 178,
+ 137, 139, 131, 133, 146, 152, 121, 147, 142, 143,
+ 129, 136, 149, 145, 197, 114, 103, 141, 124, 140,
+ 141, 140, 129, 129, 127, 130, 131, 124, 123, 117,
+ 150, 139, 120, 109, 119, 120, 163, 163, 117, 121,
+ 139, 139, 136, 136, 94, 74, 150, 145, 126, 127,
+ 147, 150, 158, 162, 84, 74, 136, 129, 140, 132,
+ 136, 135, 146, 145, 124, 116, 129, 120, 130, 129,
+ 130, 109, 122, 111, 160, 141, 135, 113, 131, 121,
+ 136, 135, 135, 135, 147, 147, 140, 140, 144, 145,
+ 139, 142, 131, 137, 145, 145, 143, 153, 48, 49,
+ 145, 143, 151, 147, 158, 146, 135, 124, 124, 116,
+ 159, 140, 131, 126, 123, 120, 103, 117, 113, 119,
+ 148, 146, 128, 124, 123, 126, 123, 120, 158, 141,
+ 148, 137, 146, 143, 125, 143, 89, 107, 116, 123,
+ 149, 147, 141, 139, 149, 153, 118, 121, 139, 138,
+ 105, 119, 168, 147, 139, 141, 143, 138, 133, 130,
+ 126, 126, 143, 142, 146, 144, 124, 123, 143, 145,
+ 149, 148, 147, 141, 151, 143, 118, 113, 175, 171
+};
+
+static const uint8_t ff_wmavoice_dq_lsp16r1[0x500] = {
+ 147, 145, 193, 168, 188, 156, 141, 145, 141, 139,
+ 148, 149, 148, 149, 153, 157, 144, 144, 152, 152,
+ 141, 145, 153, 143, 243, 134, 151, 133, 166, 135,
+ 150, 149, 135, 132, 32, 39, 110, 111, 109, 114,
+ 126, 127, 147, 146, 177, 169, 162, 156, 210, 187,
+ 141, 147, 95, 150, 127, 155, 108, 133, 139, 148,
+ 138, 138, 140, 140, 147, 146, 134, 130, 136, 134,
+ 147, 146, 142, 150, 62, 174, 126, 151, 122, 156,
+ 154, 156, 179, 184, 115, 107, 105, 99, 127, 124,
+ 146, 131, 140, 44, 132, 125, 156, 146, 153, 153,
+ 136, 137, 145, 144, 141, 139, 158, 152, 138, 132,
+ 145, 145, 147, 145, 146, 141, 144, 140, 110, 97,
+ 140, 141, 143, 142, 130, 123, 127, 117, 126, 120,
+ 147, 146, 161, 155, 169, 135, 122, 117, 166, 155,
+ 144, 144, 142, 142, 125, 122, 137, 128, 194, 172,
+ 127, 85, 148, 143, 153, 141, 147, 147, 140, 143,
+ 118, 140, 0, 69, 51, 60, 111, 123, 137, 135,
+ 146, 146, 164, 165, 207, 214, 145, 143, 149, 147,
+ 178, 168, 197, 170, 134, 154, 148, 159, 115, 140,
+ 103, 118, 13, 38, 139, 138, 135, 138, 140, 141,
+ 144, 144, 140, 140, 150, 150, 156, 157, 164, 171,
+ 143, 143, 140, 142, 118, 120, 172, 172, 160, 163,
+ 146, 147, 150, 151, 176, 176, 230, 237, 153, 153,
+ 168, 156, 173, 149, 164, 148, 162, 146, 178, 158,
+ 147, 145, 143, 145, 111, 126, 111, 130, 89, 118,
+ 153, 158, 122, 120, 142, 125, 124, 105, 148, 138,
+ 145, 144, 156, 151, 193, 154, 146, 147, 119, 135,
+ 142, 141, 145, 145, 152, 147, 142, 141, 146, 146,
+ 139, 138, 154, 154, 148, 150, 147, 149, 144, 145,
+ 134, 134, 141, 140, 135, 134, 145, 147, 160, 163,
+ 144, 145, 149, 146, 115, 67, 127, 119, 141, 135,
+ 145, 141, 130, 124, 143, 144, 151, 165, 141, 144,
+ 154, 152, 160, 136, 115, 82, 64, 71, 64, 65,
+ 143, 143, 151, 149, 240, 251, 165, 173, 173, 179,
+ 148, 134, 156, 55, 160, 105, 133, 91, 129, 96,
+ 149, 149, 145, 144, 160, 154, 171, 159, 140, 142,
+ 154, 163, 178, 244, 147, 140, 153, 150, 137, 121,
+ 145, 144, 145, 146, 138, 139, 149, 152, 189, 198,
+ 148, 148, 156, 158, 168, 182, 165, 182, 172, 201,
+ 143, 142, 99, 92, 152, 152, 143, 143, 127, 127,
+ 165, 148, 173, 124, 113, 122, 134, 142, 127, 142,
+ 124, 126, 137, 137, 131, 132, 144, 142, 141, 138,
+ 172, 176, 138, 111, 152, 136, 167, 154, 156, 137,
+ 140, 150, 78, 145, 158, 157, 161, 154, 155, 147,
+ 153, 164, 156, 191, 129, 109, 153, 146, 153, 141,
+ 138, 137, 141, 138, 115, 94, 144, 141, 155, 147,
+ 144, 142, 144, 137, 168, 113, 141, 134, 145, 137,
+ 146, 144, 150, 148, 140, 155, 103, 178, 137, 149,
+ 145, 147, 148, 153, 175, 201, 138, 146, 110, 108,
+ 143, 146, 124, 134, 124, 127, 164, 158, 127, 135,
+ 145, 146, 150, 150, 145, 147, 95, 80, 150, 151,
+ 149, 149, 162, 162, 144, 152, 170, 169, 145, 154,
+ 145, 149, 143, 146, 142, 145, 152, 146, 160, 98,
+ 141, 141, 153, 153, 140, 137, 131, 131, 145, 146,
+ 133, 132, 127, 124, 158, 150, 173, 164, 178, 167,
+ 146, 146, 154, 155, 117, 127, 143, 147, 147, 156,
+ 142, 143, 144, 145, 146, 152, 170, 199, 151, 165,
+ 146, 147, 139, 140, 147, 149, 132, 134, 147, 149,
+ 138, 139, 142, 143, 162, 188, 145, 149, 160, 164,
+ 150, 150, 139, 139, 143, 142, 146, 146, 137, 138,
+ 142, 142, 141, 140, 152, 153, 164, 171, 110, 112,
+ 139, 139, 143, 143, 138, 138, 142, 142, 143, 143,
+ 137, 140, 142, 142, 145, 141, 149, 141, 182, 135,
+ 146, 146, 150, 150, 144, 145, 150, 151, 135, 137,
+ 137, 145, 51, 62, 68, 54, 69, 57, 62, 41,
+ 137, 139, 139, 144, 135, 150, 225, 232, 208, 197,
+ 136, 135, 141, 143, 145, 150, 160, 169, 213, 247,
+ 142, 137, 72, 54, 110, 107, 105, 107, 127, 130,
+ 145, 143, 169, 155, 219, 174, 195, 164, 183, 157,
+ 155, 157, 239, 232, 169, 164, 170, 172, 156, 159,
+ 142, 143, 136, 144, 59, 100, 139, 142, 130, 138,
+ 147, 146, 150, 161, 128, 235, 143, 155, 146, 167,
+ 154, 149, 128, 151, 42, 149, 55, 136, 59, 127,
+ 128, 126, 74, 92, 143, 153, 140, 150, 166, 176,
+ 146, 152, 150, 145, 140, 100, 140, 105, 124, 59,
+ 195, 191, 146, 148, 144, 136, 136, 133, 129, 122,
+ 133, 148, 40, 147, 102, 140, 123, 148, 118, 136,
+ 143, 143, 150, 148, 184, 153, 160, 147, 166, 149,
+ 58, 68, 127, 135, 141, 145, 143, 147, 150, 151,
+ 140, 143, 137, 137, 120, 114, 71, 65, 125, 123,
+ 153, 148, 215, 159, 136, 135, 150, 146, 150, 150,
+ 148, 138, 166, 94, 150, 145, 145, 139, 147, 145,
+ 146, 147, 150, 139, 171, 63, 158, 142, 153, 133,
+ 147, 148, 143, 143, 76, 72, 155, 159, 164, 176,
+ 149, 149, 173, 195, 145, 165, 138, 144, 150, 167,
+ 180, 169, 146, 151, 146, 166, 147, 166, 149, 171,
+ 157, 156, 168, 166, 147, 149, 121, 122, 116, 124,
+ 145, 145, 147, 148, 172, 189, 168, 180, 144, 146,
+ 139, 145, 141, 150, 115, 172, 141, 146, 143, 148,
+ 145, 145, 142, 143, 145, 147, 138, 143, 58, 73,
+ 141, 142, 146, 145, 163, 149, 218, 161, 147, 132,
+ 152, 147, 146, 147, 140, 150, 141, 152, 89, 150,
+ 78, 134, 135, 137, 139, 142, 140, 137, 137, 130,
+ 144, 144, 152, 151, 145, 140, 181, 170, 191, 168,
+ 164, 166, 136, 148, 112, 124, 139, 144, 146, 149,
+ 142, 151, 113, 182, 137, 150, 143, 156, 138, 147,
+ 154, 156, 108, 102, 118, 119, 133, 139, 113, 111,
+ 145, 144, 150, 147, 175, 151, 104, 106, 116, 114,
+ 143, 144, 151, 157, 151, 191, 135, 113, 138, 123,
+ 146, 146, 155, 157, 106, 145, 132, 127, 140, 125,
+ 161, 165, 146, 150, 151, 154, 139, 140, 142, 143,
+ 144, 148, 145, 149, 147, 138, 168, 104, 146, 136,
+ 138, 140, 91, 108, 111, 110, 145, 140, 158, 154,
+ 130, 112, 122, 118, 136, 135, 119, 118, 141, 140,
+ 147, 146, 146, 145, 138, 138, 182, 188, 132, 132,
+ 144, 144, 156, 155, 168, 172, 123, 128, 144, 151,
+ 142, 140, 145, 145, 137, 144, 141, 152, 128, 188,
+ 149, 149, 160, 161, 160, 160, 166, 163, 130, 107,
+ 143, 143, 142, 142, 149, 149, 132, 132, 170, 174,
+ 148, 148, 154, 153, 118, 111, 157, 155, 114, 109,
+ 140, 139, 138, 137, 205, 187, 137, 133, 147, 144,
+ 144, 145, 147, 149, 105, 125, 108, 117, 155, 162,
+ 146, 146, 162, 157, 144, 122, 154, 143, 161, 139,
+ 141, 142, 130, 131, 144, 144, 142, 141, 144, 142,
+ 132, 132, 141, 141, 150, 151, 139, 141, 151, 153,
+ 142, 142, 154, 154, 150, 150, 148, 148, 166, 165,
+ 143, 142, 144, 144, 132, 132, 142, 144, 130, 128,
+ 142, 142, 143, 143, 153, 153, 147, 142, 129, 125,
+ 142, 141, 143, 142, 143, 147, 105, 122, 135, 140,
+ 141, 140, 140, 140, 151, 151, 156, 155, 146, 146,
+ 133, 134, 140, 142, 142, 145, 141, 146, 112, 133,
+ 142, 142, 145, 145, 137, 138, 155, 157, 149, 150,
+ 144, 144, 139, 138, 130, 128, 132, 131, 147, 147,
+ 139, 140, 142, 143, 115, 121, 141, 143, 137, 141,
+ 146, 146, 150, 150, 145, 144, 133, 133, 133, 135,
+ 143, 144, 144, 144, 166, 167, 139, 142, 139, 140,
+ 150, 149, 138, 138, 142, 140, 148, 147, 160, 155,
+ 146, 146, 147, 147, 138, 137, 143, 142, 151, 150
+};
+
+static const uint8_t ff_wmavoice_dq_lsp16r2[0x500] = {
+ 98, 98, 119, 121, 109, 112, 128, 135, 115, 121,
+ 159, 113, 113, 106, 127, 114, 101, 102, 105, 111,
+ 161, 162, 137, 138, 161, 159, 152, 150, 150, 148,
+ 128, 79, 131, 102, 142, 120, 133, 119, 130, 117,
+ 121, 115, 142, 133, 186, 155, 179, 144, 169, 135,
+ 107, 103, 106, 106, 122, 122, 111, 112, 112, 115,
+ 127, 123, 118, 115, 128, 125, 123, 119, 115, 109,
+ 124, 130, 117, 126, 121, 133, 84, 144, 99, 114,
+ 122, 125, 123, 131, 124, 135, 176, 200, 158, 176,
+ 68, 74, 86, 87, 117, 115, 119, 116, 135, 128,
+ 115, 116, 102, 104, 119, 123, 133, 148, 102, 109,
+ 71, 121, 106, 117, 107, 127, 106, 122, 100, 110,
+ 117, 115, 129, 128, 87, 84, 116, 116, 151, 157,
+ 116, 128, 110, 117, 119, 134, 100, 114, 120, 129,
+ 142, 141, 146, 151, 94, 91, 114, 114, 118, 118,
+ 114, 112, 112, 109, 115, 112, 123, 123, 147, 148,
+ 110, 164, 106, 152, 110, 158, 106, 151, 105, 135,
+ 85, 51, 71, 27, 71, 34, 74, 45, 85, 53,
+ 145, 134, 140, 130, 136, 134, 118, 122, 118, 126,
+ 117, 84, 121, 81, 106, 80, 109, 106, 121, 127,
+ 95, 94, 112, 110, 90, 94, 109, 107, 114, 109,
+ 117, 118, 118, 123, 107, 107, 86, 93, 29, 31,
+ 125, 112, 104, 60, 121, 111, 127, 116, 133, 130,
+ 118, 117, 148, 145, 122, 126, 124, 127, 90, 91,
+ 113, 110, 119, 118, 152, 147, 115, 112, 132, 131,
+ 129, 140, 98, 112, 73, 85, 109, 115, 122, 126,
+ 123, 122, 122, 122, 126, 125, 137, 140, 203, 210,
+ 164, 176, 114, 114, 125, 122, 119, 112, 125, 120,
+ 124, 122, 118, 115, 95, 96, 141, 144, 132, 131,
+ 127, 130, 132, 134, 116, 114, 122, 123, 137, 134,
+ 111, 111, 112, 116, 106, 118, 77, 101, 104, 115,
+ 111, 111, 125, 126, 118, 121, 113, 115, 113, 113,
+ 171, 170, 202, 199, 221, 206, 199, 184, 177, 167,
+ 73, 90, 61, 93, 43, 74, 51, 71, 51, 72,
+ 130, 130, 140, 137, 134, 132, 164, 160, 118, 111,
+ 123, 136, 133, 154, 130, 158, 106, 110, 110, 114,
+ 97, 97, 91, 94, 70, 69, 125, 123, 141, 140,
+ 119, 100, 116, 77, 111, 67, 105, 52, 95, 34,
+ 100, 122, 90, 124, 68, 120, 43, 117, 50, 112,
+ 130, 129, 192, 188, 123, 118, 124, 117, 121, 115,
+ 122, 111, 129, 111, 157, 85, 125, 109, 125, 119,
+ 143, 152, 119, 128, 114, 116, 129, 136, 148, 157,
+ 119, 117, 115, 115, 150, 148, 163, 154, 109, 102,
+ 120, 126, 73, 119, 106, 121, 102, 122, 96, 113,
+ 84, 83, 117, 115, 122, 117, 154, 143, 159, 142,
+ 118, 122, 114, 117, 115, 122, 114, 130, 99, 156,
+ 123, 120, 122, 116, 100, 81, 99, 91, 121, 112,
+ 139, 131, 164, 142, 132, 119, 145, 133, 157, 141,
+ 112, 109, 118, 116, 142, 134, 108, 110, 96, 99,
+ 111, 110, 113, 112, 111, 104, 98, 94, 131, 131,
+ 115, 114, 121, 118, 120, 115, 173, 148, 123, 117,
+ 121, 124, 122, 124, 140, 146, 78, 82, 96, 93,
+ 86, 90, 124, 125, 121, 123, 105, 106, 134, 135,
+ 107, 109, 132, 141, 100, 95, 113, 114, 102, 105,
+ 113, 130, 98, 145, 116, 115, 124, 117, 115, 105,
+ 120, 123, 89, 87, 109, 108, 102, 101, 117, 117,
+ 113, 122, 132, 138, 77, 116, 86, 99, 118, 126,
+ 123, 120, 117, 111, 124, 119, 129, 118, 63, 58,
+ 141, 135, 108, 106, 109, 111, 108, 110, 135, 138,
+ 117, 114, 134, 127, 139, 129, 138, 130, 126, 122,
+ 121, 118, 124, 121, 133, 130, 98, 85, 130, 123,
+ 147, 129, 118, 112, 148, 130, 136, 123, 148, 131,
+ 113, 112, 123, 118, 123, 115, 147, 95, 117, 110,
+ 118, 119, 112, 113, 112, 113, 119, 119, 120, 120,
+ 158, 133, 198, 145, 188, 129, 197, 137, 195, 133,
+ 132, 140, 140, 139, 158, 156, 223, 217, 233, 233,
+ 48, 56, 34, 37, 82, 84, 102, 102, 108, 110,
+ 120, 142, 136, 169, 146, 195, 136, 186, 140, 182,
+ 196, 186, 158, 155, 142, 134, 132, 125, 120, 119,
+ 97, 105, 72, 75, 82, 85, 81, 84, 107, 109,
+ 67, 121, 43, 119, 69, 124, 87, 129, 88, 128,
+ 53, 57, 93, 98, 91, 94, 93, 98, 104, 104,
+ 124, 123, 133, 133, 182, 181, 119, 121, 114, 116,
+ 128, 105, 134, 112, 131, 72, 119, 59, 111, 84,
+ 132, 142, 145, 180, 124, 132, 131, 143, 122, 134,
+ 88, 85, 103, 103, 136, 140, 131, 143, 114, 132,
+ 116, 57, 113, 57, 121, 76, 126, 80, 118, 86,
+ 127, 112, 127, 97, 131, 100, 149, 91, 163, 86,
+ 122, 119, 128, 121, 128, 116, 142, 127, 173, 139,
+ 162, 116, 166, 107, 149, 103, 152, 107, 141, 108,
+ 114, 113, 118, 116, 56, 43, 90, 90, 105, 105,
+ 132, 134, 110, 107, 106, 105, 82, 84, 84, 84,
+ 102, 106, 79, 89, 99, 99, 127, 129, 114, 118,
+ 139, 157, 116, 123, 116, 123, 87, 89, 110, 113,
+ 119, 126, 97, 97, 155, 163, 142, 153, 143, 146,
+ 117, 114, 66, 67, 125, 126, 127, 128, 114, 113,
+ 111, 114, 127, 133, 123, 132, 143, 162, 133, 148,
+ 105, 108, 114, 114, 110, 109, 57, 48, 109, 106,
+ 113, 130, 104, 131, 88, 139, 102, 169, 100, 172,
+ 129, 114, 150, 97, 114, 112, 117, 119, 109, 116,
+ 92, 107, 96, 116, 90, 125, 101, 122, 125, 140,
+ 125, 133, 122, 129, 136, 153, 125, 135, 131, 139,
+ 84, 71, 129, 123, 135, 120, 114, 103, 112, 101,
+ 108, 121, 115, 156, 106, 123, 116, 131, 127, 139,
+ 137, 147, 109, 117, 119, 126, 135, 144, 117, 119,
+ 120, 127, 76, 105, 111, 116, 120, 125, 141, 138,
+ 107, 104, 162, 155, 135, 130, 127, 123, 127, 121,
+ 102, 104, 84, 87, 112, 115, 97, 102, 78, 82,
+ 119, 118, 120, 123, 91, 105, 114, 119, 119, 126,
+ 130, 126, 134, 126, 158, 134, 133, 99, 116, 100,
+ 125, 122, 145, 143, 126, 117, 98, 96, 121, 120,
+ 152, 148, 131, 126, 130, 129, 126, 119, 87, 87,
+ 131, 131, 139, 137, 101, 102, 104, 105, 86, 83,
+ 92, 89, 111, 105, 121, 115, 137, 124, 96, 84,
+ 100, 96, 122, 119, 107, 108, 93, 96, 79, 82,
+ 128, 123, 108, 106, 123, 120, 150, 150, 143, 140,
+ 121, 120, 97, 99, 79, 80, 116, 116, 88, 90,
+ 128, 131, 101, 97, 140, 140, 117, 116, 116, 118,
+ 137, 135, 100, 91, 115, 112, 134, 121, 107, 99,
+ 120, 122, 122, 125, 124, 126, 136, 141, 89, 95,
+ 103, 119, 103, 116, 122, 139, 125, 137, 152, 170,
+ 121, 122, 124, 124, 98, 97, 137, 140, 96, 92,
+ 115, 113, 136, 136, 128, 132, 122, 124, 151, 158,
+ 100, 107, 121, 131, 131, 158, 119, 130, 113, 114,
+ 114, 109, 148, 130, 103, 95, 127, 116, 137, 120,
+ 103, 108, 97, 97, 133, 128, 113, 109, 136, 128,
+ 125, 124, 118, 118, 122, 121, 101, 99, 157, 152,
+ 138, 134, 124, 115, 113, 101, 123, 112, 124, 110,
+ 116, 113, 128, 121, 119, 110, 124, 113, 128, 67,
+ 114, 118, 114, 123, 109, 121, 102, 123, 56, 116,
+ 117, 111, 112, 99, 124, 114, 112, 79, 114, 88,
+ 112, 113, 115, 117, 126, 127, 130, 132, 123, 122,
+ 111, 104, 111, 102, 112, 102, 129, 118, 129, 115,
+ 123, 124, 130, 133, 114, 117, 125, 127, 112, 117,
+ 124, 125, 119, 120, 117, 116, 105, 104, 110, 110,
+ 125, 124, 118, 116, 124, 123, 124, 121, 133, 132,
+ 111, 111, 124, 124, 120, 119, 116, 116, 134, 130,
+ 114, 116, 112, 113, 109, 111, 116, 118, 95, 98
+};
+
+static const uint8_t ff_wmavoice_dq_lsp16r3[0x600] = {
+ 84, 82, 95, 94, 125, 131, 98, 102, 94, 93, 104, 104,
+ 127, 113, 87, 77, 125, 114, 109, 94, 94, 91, 106, 105,
+ 168, 125, 163, 120, 128, 100, 119, 99, 108, 97, 108, 106,
+ 86, 85, 128, 125, 79, 73, 103, 102, 123, 123, 116, 117,
+ 84, 76, 135, 131, 133, 133, 129, 130, 125, 123, 115, 114,
+ 94, 97, 79, 81, 115, 115, 94, 93, 128, 127, 126, 125,
+ 124, 111, 105, 114, 104, 117, 109, 110, 124, 125, 118, 117,
+ 107, 110, 106, 110, 93, 93, 149, 148, 118, 119, 111, 110,
+ 147, 157, 143, 156, 134, 136, 118, 121, 106, 107, 105, 105,
+ 114, 83, 114, 46, 106, 53, 110, 83, 107, 94, 105, 103,
+ 92, 90, 109, 106, 172, 160, 114, 110, 109, 110, 110, 109,
+ 90, 98, 98, 109, 102, 98, 97, 92, 100, 100, 101, 102,
+ 123, 117, 124, 98, 82, 80, 117, 115, 112, 110, 109, 108,
+ 107, 111, 100, 115, 105, 120, 104, 105, 83, 82, 95, 96,
+ 109, 120, 72, 71, 97, 104, 69, 74, 99, 102, 118, 117,
+ 137, 133, 142, 135, 105, 110, 121, 121, 125, 122, 114, 112,
+ 151, 186, 115, 132, 103, 111, 100, 104, 99, 101, 104, 105,
+ 18, 38, 56, 65, 76, 83, 85, 91, 101, 103, 108, 110,
+ 144, 135, 126, 121, 115, 113, 79, 80, 118, 117, 117, 117,
+ 117, 124, 115, 115, 126, 113, 130, 116, 112, 106, 108, 105,
+ 77, 76, 76, 80, 109, 109, 125, 129, 130, 133, 116, 118,
+ 96, 86, 109, 99, 102, 69, 84, 69, 107, 103, 114, 113,
+ 78, 118, 82, 114, 84, 129, 69, 112, 78, 98, 96, 103,
+ 89, 137, 96, 111, 105, 97, 93, 93, 101, 105, 105, 105,
+ 141, 123, 102, 93, 91, 79, 87, 81, 102, 99, 109, 108,
+ 94, 92, 124, 123, 130, 134, 100, 107, 71, 75, 92, 91,
+ 94, 104, 107, 83, 106, 101, 113, 114, 122, 122, 114, 114,
+ 118, 124, 103, 106, 95, 116, 90, 93, 107, 104, 109, 107,
+ 116, 118, 76, 72, 88, 88, 132, 132, 140, 141, 116, 116,
+ 90, 81, 111, 95, 139, 97, 123, 96, 112, 100, 110, 108,
+ 112, 116, 133, 140, 112, 120, 80, 85, 55, 55, 85, 84,
+ 125, 94, 111, 104, 116, 103, 112, 86, 93, 84, 99, 98,
+ 180, 179, 197, 197, 169, 163, 149, 146, 130, 124, 116, 115,
+ 76, 47, 36, 11, 43, 28, 66, 53, 82, 80, 102, 99,
+ 119, 123, 176, 201, 113, 120, 112, 111, 103, 105, 106, 110,
+ 145, 114, 112, 89, 120, 93, 123, 104, 131, 123, 113, 111,
+ 97, 109, 82, 106, 75, 104, 103, 115, 120, 124, 111, 114,
+ 114, 111, 113, 105, 34, 33, 63, 63, 105, 106, 122, 122,
+ 51, 41, 96, 92, 125, 125, 118, 118, 118, 119, 113, 113,
+ 111, 180, 108, 178, 107, 171, 110, 160, 105, 136, 102, 117,
+ 76, 79, 90, 92, 80, 88, 88, 93, 123, 124, 122, 122,
+ 131, 128, 123, 122, 151, 158, 108, 107, 129, 128, 119, 119,
+ 97, 99, 114, 120, 121, 125, 151, 157, 82, 89, 95, 96,
+ 128, 94, 130, 95, 149, 113, 149, 120, 127, 115, 113, 109,
+ 167, 171, 83, 80, 84, 79, 106, 106, 112, 110, 107, 108,
+ 130, 139, 81, 88, 107, 106, 112, 112, 119, 118, 114, 112,
+ 108, 105, 100, 98, 120, 116, 122, 117, 38, 37, 72, 73,
+ 118, 125, 110, 120, 114, 126, 135, 142, 139, 142, 118, 119,
+ 119, 119, 156, 145, 78, 75, 94, 94, 112, 110, 113, 113,
+ 101, 108, 98, 104, 103, 109, 117, 118, 167, 167, 132, 132,
+ 116, 108, 118, 111, 149, 136, 85, 74, 95, 92, 113, 112,
+ 74, 69, 104, 107, 96, 100, 117, 121, 103, 105, 103, 103,
+ 110, 106, 111, 101, 82, 72, 96, 92, 132, 130, 120, 121,
+ 116, 113, 138, 139, 104, 103, 131, 131, 68, 69, 92, 92,
+ 97, 97, 146, 151, 122, 132, 97, 95, 117, 116, 115, 116,
+ 139, 134, 110, 110, 124, 129, 100, 110, 86, 91, 100, 102,
+ 116, 136, 88, 90, 137, 139, 103, 114, 114, 117, 111, 110,
+ 82, 83, 104, 102, 97, 99, 97, 97, 58, 56, 84, 84,
+ 83, 122, 76, 105, 112, 126, 120, 134, 112, 120, 108, 110,
+ 114, 128, 73, 90, 72, 76, 98, 100, 95, 96, 101, 102,
+ 101, 108, 118, 126, 94, 102, 81, 83, 138, 140, 131, 130,
+ 88, 100, 112, 124, 105, 106, 122, 123, 121, 121, 114, 114,
+ 76, 108, 73, 83, 93, 95, 110, 111, 98, 99, 103, 103,
+ 105, 112, 98, 108, 114, 95, 117, 98, 120, 116, 116, 115,
+ 231, 238, 150, 146, 124, 126, 115, 122, 117, 121, 112, 112,
+ 74, 73, 72, 74, 60, 61, 62, 61, 85, 85, 101, 101,
+ 67, 69, 50, 51, 83, 83, 110, 110, 118, 113, 112, 111,
+ 199, 124, 184, 115, 176, 117, 165, 120, 138, 115, 116, 114,
+ 52, 116, 36, 107, 49, 99, 72, 106, 91, 107, 104, 105,
+ 140, 138, 141, 135, 154, 147, 166, 159, 139, 136, 116, 115,
+ 130, 119, 180, 157, 183, 149, 136, 121, 119, 114, 111, 110,
+ 104, 129, 113, 154, 111, 148, 108, 132, 105, 117, 106, 111,
+ 114, 35, 99, 65, 113, 94, 110, 98, 111, 107, 107, 106,
+ 106, 110, 128, 135, 162, 175, 143, 155, 115, 116, 109, 109,
+ 168, 155, 112, 109, 125, 125, 126, 122, 126, 124, 111, 112,
+ 128, 96, 160, 77, 151, 77, 121, 80, 114, 94, 107, 103,
+ 97, 104, 101, 116, 56, 79, 74, 83, 92, 95, 104, 106,
+ 63, 68, 76, 77, 110, 107, 96, 90, 85, 83, 97, 96,
+ 116, 110, 46, 42, 103, 100, 122, 120, 102, 101, 104, 104,
+ 106, 101, 109, 98, 96, 61, 67, 35, 72, 61, 96, 93,
+ 88, 80, 81, 76, 113, 110, 144, 143, 88, 89, 93, 94,
+ 95, 96, 100, 101, 136, 132, 166, 160, 148, 147, 115, 116,
+ 80, 78, 130, 129, 120, 108, 91, 85, 95, 91, 104, 102,
+ 151, 147, 106, 109, 110, 110, 64, 69, 68, 67, 96, 96,
+ 90, 166, 97, 128, 99, 120, 104, 121, 109, 118, 105, 109,
+ 122, 138, 110, 143, 75, 97, 83, 94, 89, 94, 102, 103,
+ 136, 142, 103, 110, 83, 89, 99, 101, 138, 138, 120, 122,
+ 168, 88, 105, 90, 109, 107, 110, 111, 106, 105, 103, 102,
+ 68, 72, 102, 104, 92, 102, 65, 75, 89, 94, 106, 106,
+ 83, 74, 93, 85, 73, 66, 106, 102, 100, 92, 99, 97,
+ 93, 99, 101, 96, 116, 112, 125, 120, 88, 88, 96, 96,
+ 44, 98, 93, 115, 104, 116, 103, 107, 112, 113, 107, 107,
+ 93, 83, 105, 99, 93, 84, 127, 125, 141, 143, 117, 118,
+ 106, 103, 126, 121, 137, 123, 123, 114, 147, 142, 127, 123,
+ 103, 110, 89, 91, 121, 124, 66, 71, 68, 69, 96, 97,
+ 114, 105, 68, 65, 69, 67, 96, 94, 131, 130, 123, 121,
+ 111, 104, 130, 121, 95, 95, 72, 74, 88, 88, 105, 104,
+ 135, 124, 110, 98, 114, 111, 159, 158, 111, 113, 104, 106,
+ 103, 108, 94, 107, 55, 57, 115, 118, 121, 122, 111, 111,
+ 97, 99, 106, 111, 119, 126, 59, 62, 111, 112, 124, 125,
+ 86, 93, 100, 110, 118, 145, 113, 132, 120, 125, 112, 112,
+ 101, 115, 78, 149, 81, 114, 111, 121, 108, 112, 107, 108,
+ 104, 104, 94, 96, 84, 83, 135, 132, 71, 69, 88, 86,
+ 100, 98, 62, 60, 81, 80, 90, 89, 63, 66, 89, 90,
+ 123, 116, 108, 99, 90, 86, 91, 92, 65, 65, 88, 88,
+ 84, 79, 115, 109, 123, 111, 99, 99, 134, 136, 121, 123,
+ 127, 137, 84, 88, 104, 107, 128, 130, 74, 69, 89, 89,
+ 118, 112, 143, 132, 141, 131, 113, 113, 99, 102, 104, 105,
+ 117, 115, 100, 99, 131, 126, 90, 88, 145, 144, 128, 127,
+ 112, 114, 131, 133, 85, 84, 118, 119, 151, 152, 117, 117,
+ 110, 105, 162, 140, 116, 107, 140, 134, 124, 122, 113, 113,
+ 107, 110, 124, 133, 98, 103, 99, 107, 109, 113, 112, 112,
+ 115, 105, 82, 77, 125, 122, 133, 132, 118, 120, 113, 113,
+ 101, 88, 84, 80, 97, 99, 91, 91, 94, 94, 101, 100,
+ 121, 86, 139, 108, 106, 93, 103, 99, 112, 108, 108, 107,
+ 113, 83, 105, 102, 125, 125, 114, 115, 110, 112, 108, 109,
+ 93, 112, 113, 121, 125, 131, 101, 101, 107, 109, 111, 111,
+ 98, 102, 117, 126, 80, 84, 107, 109, 83, 84, 96, 97,
+ 132, 136, 112, 118, 94, 93, 121, 118, 99, 98, 102, 103,
+ 122, 127, 128, 133, 118, 104, 102, 88, 100, 94, 104, 102,
+ 115, 116, 102, 105, 140, 142, 135, 130, 90, 88, 100, 101,
+ 94, 86, 112, 112, 89, 121, 92, 101, 109, 108, 110, 112,
+ 99, 93, 129, 114, 109, 99, 131, 119, 102, 97, 103, 103,
+ 103, 116, 124, 101, 115, 95, 105, 101, 94, 91, 100, 100,
+ 113, 90, 94, 86, 92, 92, 117, 111, 106, 103, 106, 105,
+ 115, 99, 110, 91, 107, 104, 81, 90, 108, 113, 112, 113,
+ 113, 114, 93, 101, 101, 102, 101, 126, 93, 103, 104, 105,
+ 117, 106, 124, 107, 104, 119, 108, 133, 104, 111, 104, 106
+};
+
+static const float ff_wmavoice_lsp10_intercoeff_a[32][2][10] = {
+ { { 0.5108627081, 0.0480548441, -1.5099149644, 0.6736935377,
+ 0.7536551058, 0.7651474178, 0.8510628343, 0.6667704582,
+ 0.7576012611, 0.7091397047 },
+ { 0.1351471841, -0.1965375543, -1.6313457787, 0.3218626380,
+ 0.4132472873, 0.4663473070, 0.5805781186, 0.3962165117,
+ 0.4818550050, 0.4907165468 } },
+ { { 0.8556320667, 0.7774704993, -0.0175759494, -0.1882298589,
+ 0.1892164350, 0.4850396216, 0.6270319819, 0.6327089071,
+ 0.6513319910, 0.6075088978 },
+ { 0.4374088347, 0.3505934179, -0.0762144327, -0.2830760479,
+ -0.0626451969, 0.1500318050, 0.2602472305, 0.2781780064,
+ 0.3167395592, 0.3596626520 } },
+ { { 0.1899779737, 0.0650856197, 0.1699010432, 0.9122628570,
+ 0.9097705483, 0.7433397174, 0.6304935217, 0.5164704025,
+ 0.4174703658, 0.5215242505 },
+ { 0.0704856217, 0.0169009864, 0.0188394487, 0.5587704182,
+ 0.5194473267, 0.3539164960, 0.2426626086, 0.1721164286,
+ 0.1371548772, 0.2594856918 } },
+ { { 0.8858859241, 0.9100474715, 0.8921859264, 0.9332397878,
+ 1.0225475132, 1.0555013716, 1.0983552337, 1.1290244758,
+ 1.0363244414, 0.9277705550 },
+ { 0.4810934663, 0.5782935023, 0.6835935414, 0.7650781870,
+ 0.9018090069, 0.9996321201, 1.0219936669, 1.0474705994,
+ 0.9109474719, 0.7774704993 } },
+ { { 0.4359549880, 0.2275702953, 0.0993548632, 0.1763395071,
+ 0.1055856347, 0.1018471718, 0.1170087159, 0.1221317947,
+ 0.1834010482, 0.2988780141 },
+ { 0.1573702693, 0.1041317880, 0.0506856143, 0.0781702399,
+ 0.0058932900, -0.0026913285, -0.0031067133, 0.0070702136,
+ 0.0116394460, 0.0566394627 } },
+ { { 0.8528628349, 0.8028782010, 0.4680088460, 0.9055474699,
+ 1.3742399514, 1.1093629301, 0.4122780561, 0.4003703594,
+ 0.6360319853, 0.6415704489 },
+ { 0.4252934456, 0.3823703527, 0.1676856577, 0.5241550207,
+ 1.1995706558, 0.9088013172, 0.1224087179, 0.0730471611,
+ 0.3071857095, 0.3772472739 } },
+ { { 0.5508781075, 0.2829549313, -0.0022067130, 0.1042702496,
+ 1.0318244398, 1.3258476257, 1.3550630212, 0.9931936562,
+ 0.7195243239, 0.6807550788 },
+ { 0.2679318488, 0.0960317850, -0.1357529163, -0.1291759908,
+ 0.6451012194, 0.9968628883, 0.9510321021, 0.6608166099,
+ 0.3799472749, 0.3735780418 } },
+ { { 0.9967244267, 1.0255244374, 0.9800398052, 0.7939474285,
+ 0.8288397491, 0.8390166759, 0.8660166860, 0.9247936308,
+ 0.9127474725, 0.8684397638 },
+ { 0.7921474278, 0.9416859448, 0.8547320664, 0.5348165631,
+ 0.6231550574, 0.6703012288, 0.6987550855, 0.8147858977,
+ 0.7406397164, 0.6496012211 } },
+ { { 0.1439394951, -0.3193529844, -0.2024914026, -0.1854606271,
+ 0.0877240896, 0.1617318094, 0.3087087870, 0.3777318895,
+ 0.3910242021, 0.4797780812 },
+ { -0.0157067180, -0.1778452396, -0.1554836929, -0.1759760082,
+ -0.0607759655, -0.0161221027, 0.0393317640, 0.0758856237,
+ 0.1163856387, 0.1947548985 } },
+ { { 1.1021629274, 0.9958244264, 0.4658626914, 0.3089164793,
+ 0.3740626574, 0.2962472439, 0.3170857131, 0.2420395315,
+ 0.2649549246, 0.2936857045 },
+ { 0.4700857699, 0.1809087396, 0.0311625302, 0.0106009841,
+ 0.0311625302, 0.0266625285, 0.0221625268, 0.0156548321,
+ 0.0551163852, 0.1010164022 } },
+ { { 0.2925087810, 0.3418011069, 0.7339243293, 0.7322627902,
+ 0.7288704813, 0.7924935818, 0.7724166512, 0.7819012702,
+ 0.8325782120, 0.7954705060 },
+ { 0.0559471548, -0.0456144214, -0.0462374985, -0.1005144417,
+ -0.0511528850, -0.0455451906, -0.0044220984, 0.0451471508,
+ 0.1232394874, 0.2085318267 } },
+ { { 0.2230702937, -0.9052532017, 1.2441552877, 1.0825706124,
+ 0.9088705480, 0.8797243834, 0.8648397624, 0.8091089725,
+ 0.7633474171, 0.7468704879 },
+ { -0.2030452490, -1.4167303145, 1.3542322516, 0.8369397521,
+ 0.6148473620, 0.5560704172, 0.5450627208, 0.4978473186,
+ 0.4200319052, 0.4904396236 } },
+ { { 0.6088242829, 0.5965704322, 0.6547242999, 0.8554936051,
+ -0.2989298999, 0.2404472232, 0.3573780358, 0.7499166429,
+ 0.7691628039, 0.6824858487 },
+ { 0.2582395375, 0.2721549273, 0.3462318778, 0.4820626974,
+ -0.4780299664, -0.0712990463, 0.0200163722, 0.4246703684,
+ 0.4660011530, 0.4172626734 } },
+ { { 1.1749937236, 1.0773090720, 1.0566782951, 1.0249013603,
+ 0.9947167337, 0.9626628757, 0.9562244117, 0.9072782397,
+ 0.7654243410, 0.6448935270 },
+ { 1.1595552564, 0.9340013266, 0.3959395885, 0.3693549633,
+ 0.3915780485, 0.3104395568, 0.3499011099, 0.2236933708,
+ 0.1638087332, 0.1811856627 } },
+ { { 0.9572628736, 0.9389859438, 0.6619243026, 0.6849089265,
+ 0.7276935577, 0.7839781940, 0.7987243533, 0.7748397291,
+ 0.7101089358, 0.7277627885 },
+ { 0.5809935033, 0.5575934947, 0.3544703424, 0.3636780381,
+ 0.3736472726, 0.4486242235, 0.4684934616, 0.4481396079,
+ 0.3456780314, 0.4478626847 } },
+ { { 0.1259394884, 1.3096476197, 1.0794552267, 1.0009475052,
+ 0.9061013162, 0.9216782451, 0.8954397738, 0.9160013199,
+ 0.8575012982, 0.7479089499 },
+ { -0.3689222336, 1.5293861628, 0.7323320210, 0.4102703631,
+ 0.3825780451, 0.2828164697, 0.2644010782, 0.2455010712,
+ 0.2482010722, 0.2335241437 } },
+ { { 0.5380704105, 0.1600702703, -0.0657605827, -0.2390452623,
+ -0.3885837793, -0.4150299430, -0.3001760542, -0.1451683044,
+ 0.1312010288, 0.2798395455 },
+ { 0.2074933648, 0.0560163856, -0.0956682861, -0.2893068194,
+ -0.3889991641, -0.3918376267, -0.3550068438, -0.2649375796,
+ -0.0554451942, 0.1167317927 } },
+ { { 0.6092396677, 0.5101011693, 0.4012011290, 0.5416011810,
+ 0.5715781152, 0.6476627588, 0.6988243163, 0.7306012511,
+ 0.7531704903, 0.6534781456 },
+ { 0.2060395181, 0.1409625709, 0.1024702489, 0.1834010482,
+ 0.1946856678, 0.2547779977, 0.3134857118, 0.3283011019,
+ 0.3837549686, 0.3501780331 } },
+ { { 0.4516011477, 0.5351627171, 0.8068243563, 0.7049858570,
+ 0.7165473998, 0.6005858183, 0.4870473146, 0.2500010729,
+ 0.3132087886, 0.4462703764 },
+ { 0.1053087115, 0.1348702610, 0.4457857609, 0.3499703407,
+ 0.3537780344, 0.2628780007, 0.1665087342, 0.0200856030,
+ 0.0329625309, 0.1525241137 } },
+ { { 0.7058166265, 0.7305320203, 1.1684860289, 1.4524707496,
+ 1.3212091625, 1.2613245249, 1.1712552607, 1.1154552400,
+ 1.0487167537, 0.9153782427 },
+ { 0.2286087573, 0.2851703167, 1.2016475797, 1.5154707730,
+ 1.2726091444, 1.1459167898, 0.9801090360, 0.9296397865,
+ 0.8490551412, 0.6772243083 } },
+ { { 0.6686396897, 0.5728935003, 0.4734780788, 0.6970243156,
+ 0.5852165818, -0.0762836635, -0.2054683268, -0.1380375326,
+ 0.1282933354, 0.3467164934 },
+ { 0.2925087810, 0.2344933748, 0.1677548885, 0.2747856975,
+ 0.2097087502, -0.2795452774, -0.3761222363, -0.3183837533,
+ -0.0834836662, 0.1482318044 } },
+ { { 0.6559704542, 0.7737320364, 0.9867551923, 0.9912551939,
+ 0.9508936405, 0.9114320874, 0.8336859047, 0.7905551195,
+ 0.7672935724, 0.7532397211 },
+ { 0.1843702793, 0.2565087676, 0.7571858764, 0.7545551062,
+ 0.6793704629, 0.5981627405, 0.5078165531, 0.4282011390,
+ 0.3948318958, 0.4502165318 } },
+ { { 0.4430857599, 0.6102781296, 0.8485012949, 0.8573628366,
+ 0.9078320861, 0.9979705811, 1.0411013663, 1.0524552166,
+ 1.0194321275, 0.9023628533 },
+ { 0.0070009828, 0.0084548295, 0.1613856554, 0.3484472632,
+ 0.4385857582, 0.5895088911, 0.6367935240, 0.6736935377,
+ 0.7026320100, 0.5924165845 } },
+ { { 1.0532859862, 1.1059706211, 1.1311013997, 1.1250783205,
+ 1.0425552130, 0.9993551970, 0.9673013389, 0.9386397898,
+ 0.8836013079, 0.8336859047 },
+ { 0.9791398048, 1.1481321752, 1.1275706291, 1.0082167387,
+ 0.8809705377, 0.8031551242, 0.7287320197, 0.6496704519,
+ 0.5211088657, 0.4734088480 } },
+ { { -0.0251221061, -0.0443682671, 0.1282241046, 0.3850703537,
+ 0.4252934456, 0.4547857642, 0.4690473080, 0.4873242378,
+ 0.6001012027, 0.5882627368 },
+ { -0.0562759638, -0.0246374905, 0.0070009828, 0.0971394777,
+ 0.1232394874, 0.1278779507, 0.1302317977, 0.1462241113,
+ 0.2073549032, 0.2446010709 } },
+ { { 1.1749244928, 1.1155937016, 0.9236167073, 0.6288319826,
+ 0.6515396833, 0.5391781032, 0.5398011804, 0.4997165501,
+ 0.4066703618, 0.3998857439 },
+ { 0.9403013289, 0.7346166372, 0.1841625869, 0.1319625676,
+ 0.1395087242, 0.0857856274, 0.0952702463, 0.0860625505,
+ 0.0829471648, 0.1132010221 } },
+ { { 0.9047167003, 0.9840551913, 0.9933321178, 0.9360090196,
+ 0.9164859354, 0.9213320911, 0.8701705337, 0.8815936148,
+ 0.8414397538, 0.8188012838 },
+ { 0.0961010158, -0.0147374868, 0.0202240646, 0.1002548635,
+ 0.1407548785, 0.1837472022, 0.1858241260, 0.2064549029,
+ 0.2228626013, 0.2859318554 } },
+ { { 0.4034165144, 0.1918472052, 2.1959402561, 0.4763165414,
+ 0.6577012241, 0.7036704719, 0.6626858413, 0.7650089562,
+ 0.7702704966, 0.6543781459 },
+ { 0.0940933228, -0.1222529113, 2.3491480052, 0.1385394931,
+ 0.3052472472, 0.3665857315, 0.3350857198, 0.4722319245,
+ 0.4313857555, 0.3846549690 } },
+ { { 0.8215012848, 0.8613782227, 1.0399936736, 1.4082322717,
+ 0.4075011313, 0.4091626704, 0.5230473280, 0.6101396680,
+ 0.7510243356, 0.7237474024 },
+ { 0.4810934663, 0.5670088828, 0.9207782447, 1.3007860780,
+ 0.0453548431, 0.0858548582, 0.1803548932, 0.2790087759,
+ 0.3974626660, 0.4581780732 } },
+ { { 1.5921784937, 1.4987169206, 1.1321398616, 0.8235089779,
+ 0.6888550818, 0.6621319950, 0.6192089021, 0.6533396840,
+ 0.7196627855, 0.6549319923 },
+ { 1.5911400318, 1.4768399894, 0.9358705580, 0.4674549997,
+ 0.3522549570, 0.3144549429, 0.2985318601, 0.3559241891,
+ 0.4061857462, 0.3958703578 } },
+ { { 0.7975474298, 0.8712782264, 0.8974474669, 0.3008164763,
+ 0.5562088788, 0.6655935347, 0.8921166956, 1.0918475389,
+ 0.9544936419, 0.8554936051 },
+ { 0.3769703507, 0.4930703938, 0.6619243026, -0.0382759571,
+ 0.1766856611, 0.3015780151, 0.5952550471, 0.8903859258,
+ 0.7395320237, 0.6205935180 } },
+ { { 0.2206472158, 2.4467634261, 1.2920629978, 1.0239321291,
+ 0.9014628530, 0.8552166820, 0.8219859004, 0.9005628526,
+ 0.7614781857, 0.7763628066 },
+ { -0.2722068131, 2.8967635930, 1.3039706945, 0.7695089579,
+ 0.6132550538, 0.5701242685, 0.5737935007, 0.6533396840,
+ 0.5422934890, 0.5150857866 } },
+};
+
+static const float ff_wmavoice_lsp10_intercoeff_b[32][2][10] = {
+ { { 0.4881048799, -0.1998192370, -0.3872502148, 0.0109423101,
+ 0.0406953394, 0.1788437665, 0.1673750877, 0.3409781158,
+ 0.4061202109, 0.5221177042 },
+ { 0.1492218077, -0.1372330189, -0.2683691680, -0.0621950924,
+ -0.0624572337, -0.0068177581, -0.0076041818, 0.0680235624,
+ 0.1055752933, 0.1199930608 } },
+ { { 0.7934338748, 0.0012430847, 0.4239458144, 0.5521328747,
+ 0.6497149467, 0.6423749924, 0.7170197070, 0.7169541717,
+ 0.7778364718, 0.8397018015 },
+ { 0.2768190503, -0.0491535664, -0.0325731337, 0.0261465013,
+ 0.0469867289, 0.0649434030, 0.0781815350, 0.1031504869,
+ 0.1194687784, 0.2451654971 } },
+ { { 0.7212139666, 0.1658677757, 0.0101558864, 0.5636015534,
+ 1.3175852597, 1.1911676526, 1.1266809106, 0.8230558336,
+ 0.8604109585, 0.8094900250 },
+ { 0.3658815324, 0.0816549063, -0.2092563212, 0.1946377754,
+ 1.0856558084, 0.9491457641, 0.8461242616, 0.5193652213,
+ 0.5975488424, 0.5293265879 } },
+ { { 0.9507186115, 0.9078585207, 0.8773190677, 0.8677509129,
+ 0.8024122119, 0.8127667904, 0.8246286809, 0.8779088855,
+ 0.9454102516, 0.9863698184 },
+ { 0.6883807778, 0.6900191605, 0.7059442401, 0.6552854478,
+ 0.5843107104, 0.5553441048, 0.5887671113, 0.6494528055,
+ 0.7725936472, 0.7792782485 } },
+ { { 0.2399882078, 0.1938513517, 0.4441962242, 0.4475385249,
+ 0.3055235147, 0.1745184362, 0.1174371839, 0.0679580271,
+ 0.0782470703, 0.1695377529 },
+ { 0.0170370936, 0.0253600776, 0.2072205544, 0.1907711923,
+ 0.1096384823, 0.0327000320, -0.0134368241, -0.0461389422,
+ -0.0372916758, -0.0243156850 } },
+ { { 0.5457104146, 0.3774812818, 0.5235594809, 0.2994287312,
+ 0.2394639254, 0.5731041729, 0.9971176088, 1.1646913886,
+ 0.9028123021, 0.7777709365 },
+ { 0.2288472056, 0.1181580722, 0.2074171603, 0.0355180502,
+ -0.0024924278, 0.2596487999, 0.7474936247, 0.9103488624,
+ 0.5927647650, 0.4772915542 } },
+ { { 0.6541713476, 0.6412608922, 0.7625012100, 0.7826205492,
+ 0.4839106202, 0.3311478198, 0.4577620327, 0.8572652638,
+ 0.9442306161, 0.8282986581 },
+ { 0.2852075696, 0.2614837885, 0.4221763611, 0.4314823747,
+ 0.1434547007, 0.0435788929, 0.1397191882, 0.5525916219,
+ 0.6752081811, 0.5487250388 } },
+ { { 0.6742251515, 1.0610800683, 1.0500701368, 0.9570100009,
+ 0.9325653315, 0.9243078828, 0.9148707986, 0.8317720294,
+ 0.7696445584, 0.6784849465 },
+ { 0.2283884585, 0.9739181101, 0.5336519182, 0.4974764287,
+ 0.3998288214, 0.3674543798, 0.2719694376, 0.2608939707,
+ 0.2087934017, 0.1675716937 } },
+ { { 0.3736146986, -1.5457833707, 0.9216864705, 0.7959242165,
+ 0.7358283401, 0.7233110964, 0.7271121442, 0.6852350831,
+ 0.6891672015, 0.6589554250 },
+ { 0.1246460676, -1.7167649865, 0.7037160397, 0.4803061783,
+ 0.4694928527, 0.4654951990, 0.5208069980, 0.5305717587,
+ 0.5288023055, 0.5278192759 } },
+ { { 1.0116009116, 0.9882703424, 0.8393741250, 0.8889843524,
+ 0.8934407532, 0.8906227350, 0.9222107530, 0.8973073363,
+ 0.9257496595, 0.9306648076 },
+ { 0.5097970665, -0.0106843412, 0.1419473886, 0.2804890275,
+ 0.3719763160, 0.3694859743, 0.4640534222, 0.5034401417,
+ 0.5592106879, 0.6652468145 } },
+ { { 0.9718209803, 0.7615181804, 0.2172474563, 0.4920369983,
+ 0.4310891628, 0.5038333535, 0.4668059051, 0.5339140594,
+ 0.4453758597, 0.4050061107 },
+ { 0.6543679535, 0.1205173433, -0.0050483048, 0.1580035388,
+ 0.1308719218, 0.1700620353, 0.1740596890, 0.2179683447,
+ 0.1967349052, 0.1703897119 } },
+ { { 0.7663022578, 0.4025157690, 1.3811545074, 1.1642981768,
+ 1.0709758997, 0.9812580645, 1.0092416406, 0.9089070857,
+ 0.7776398659, 0.8189926445 },
+ { 0.3471384346, 0.0602248609, 1.3968829811, 1.0841484964,
+ 0.8940305710, 0.7313719392, 0.7345176339, 0.5304406881,
+ 0.4076275229, 0.4535677731 } },
+ { { 0.1300854981, 0.1323136985, 0.7564064264, 0.7335346043,
+ 0.7924508452, 0.6039057672, 0.6896914840, 0.3694859743,
+ 0.2825861573, 0.3179096878 },
+ { -0.0208423138, -0.0530856848, 0.3449102342, 0.3819376826,
+ 0.4466865659, 0.2807511687, 0.3842969537, 0.1144880950,
+ 0.0617321730, 0.0767397583 } },
+ { { 0.7559476793, 0.8462553322, 0.6452585459, 1.1308751702,
+ 1.0606868565, 0.9498666525, 0.7425129414, 0.6221901178,
+ 0.6574481130, 0.6976212561 },
+ { 0.3420922160, 0.4310236275, 0.2800958157, 0.9317133725,
+ 0.8210897744, 0.6144569516, 0.3227593005, 0.2464762032,
+ 0.2769501209, 0.3521846533 } },
+ { { 0.7609938979, 0.6943444908, 1.1490939856, 0.4350868165,
+ 0.6101971567, 0.6246149242, 0.7370079756, 0.6522052884,
+ 0.6966382265, 0.7565374970 },
+ { 0.3939306438, 0.3449102342, 0.9874839187, 0.0910919905,
+ 0.2804234922, 0.2888775468, 0.4060546756, 0.3284608722,
+ 0.3483836055, 0.4819445610 } },
+ { { 0.7828826904, 1.1833034158, 1.9916158915, 0.8667678833,
+ 0.9218830764, 0.8856420517, 0.9373494089, 0.7415299118,
+ 0.7450032830, 0.7074515522 },
+ { 0.4685098231, 1.1713104546, 1.9853245020, 0.6206828058,
+ 0.6664264500, 0.6033814847, 0.6089519858, 0.3784643114,
+ 0.4212588668, 0.3441893458 } },
+ { { 0.4671335816, 0.4177199602, 0.0804097354, -0.1836975515,
+ -0.1802241802, -0.0775958896, -0.0250365734, 0.0884050429,
+ 0.2136430144, 0.3472039700 },
+ { 0.1187478900, 0.1122598946, -0.0381436348, -0.2284581661,
+ -0.2302276194, -0.1738672554, -0.1350048184, -0.0547896028,
+ 0.0000634491, 0.0545888245 } },
+ { { 0.5545576811, 0.4791920781, 0.8204999566, 0.8462553322,
+ 0.9212277234, 0.8946203887, 0.9659883380, 0.9137566984,
+ 0.9225384295, 0.9207034409 },
+ { 0.1176993251, -0.0429277122, -0.0330318809, 0.0566859543,
+ 0.0983008742, 0.1593797803, 0.1732077301, 0.2320584357,
+ 0.2739354968, 0.3753186166 } },
+ { { 0.7157745361, 0.6367389560, -1.2036890686, 0.7107283175,
+ 0.6885118484, 0.7332724631, 0.7436270416, 0.7113181353,
+ 0.5935511887, 0.6023984551 },
+ { 0.3664058149, 0.3280676603, -1.3082178831, 0.3909815550,
+ 0.3641776145, 0.3926854730, 0.3898674548, 0.4086760879,
+ 0.3127979338, 0.3949792087 } },
+ { { 1.0267395675, 1.0621941686, 1.0415505469, 0.9971176088,
+ 0.9764739871, 0.9904330075, 0.9591071308, 0.9338760376,
+ 0.9026156962, 0.9073997736 },
+ { 0.9855833948, 1.0548542142, 0.9787021875, 0.8573307991,
+ 0.8360973597, 0.8193203211, 0.7386463583, 0.7038471103,
+ 0.6333966553, 0.6434235573 } },
+ { { 0.6235008240, 0.7635497749, 0.8094900250, 0.7227212787,
+ -0.0610809922, -0.1357912421, -0.2359291911, 0.0800165236,
+ 0.3972729445, 0.5078965425 },
+ { 0.2983146310, 0.4983939230, 0.4145742655, 0.3284608722,
+ -0.3203386664, -0.3495018780, -0.4734291434, -0.1808139980,
+ 0.1211071610, 0.2001427412 } },
+ { { 0.8925887942, 0.8804647624, 0.6153089106, 0.6760601401,
+ 0.7887153327, 1.0065546930, 1.0829033256, 1.0347348750,
+ 0.9800128937, 0.9125770628 },
+ { 0.5955827832, 0.6195687056, 0.2924164534, 0.3553958833,
+ 0.5417127609, 0.8713553548, 0.9977729619, 0.8817754686,
+ 0.7645328045, 0.6604627371 } },
+ { { 1.1581378579, 1.0359145105, 0.7731179297, 0.6839243770,
+ 0.6839899123, 0.6664264500, 0.6910677254, 0.6579068601,
+ 0.6779606640, 0.6243527830 },
+ { 1.1508634388, 0.8400294781, 0.2358594835, 0.2542749047,
+ 0.2484422624, 0.2620736063, 0.2676441073, 0.2713796198,
+ 0.3068997562, 0.3223005533 } },
+ { { 0.1376220584, 1.2572927773, 0.8593623936, 0.6218624413,
+ 0.5128116906, 0.5393534899, 0.4436064065, 0.4334484339,
+ 0.4494390488, 0.4002220333 },
+ { -0.1159995794, 1.2433337569, 0.4805027843, 0.2632532418,
+ 0.1769432425, 0.1868390739, 0.1555131972, 0.1530228555,
+ 0.1490252018, 0.1559064090 } },
+ { { 0.1817273200, -0.0085216761, 0.0739872754, 0.1808098257,
+ 0.2770811915, 0.3344901204, 0.4292541742, 0.5404020548,
+ 0.5780193210, 0.5707449019 },
+ { -0.0035409927, -0.0188107193, -0.0057691932, 0.0132360458,
+ 0.0560961366, 0.0534747243, 0.1002013981, 0.1737320125,
+ 0.1706518531, 0.1637706459 } },
+ { { 0.9648087025, 1.0030813217, 0.9501943290, 0.8381944895,
+ 0.7545059025, 0.7621735334, 0.7121700943, 0.7328792512,
+ 0.7534573376, 0.7414643764 },
+ { 0.1872322857, -0.0081939995, 0.0663851798, 0.0963348150,
+ 0.0509188473, 0.0565548837, 0.0471833348, 0.0809340179,
+ 0.1049199402, 0.1751082540 } },
+ { { 0.6792713702, 0.9521603882, 0.5296542645, 0.3657504618,
+ 0.3905883431, 0.3121425807, 0.2726903260, 0.3156159520,
+ 0.2859284580, 0.3179096878 },
+ { 0.2307477295, 0.3771536052, 0.0743804872, 0.0260154307,
+ 0.0477731526, 0.0391880274, 0.0228042006, 0.0572757721,
+ 0.0337485969, 0.0492149293 } },
+ { { 0.8649328947, 0.9505875409, 1.0443030298, 1.1704584956,
+ 1.2709241211, 1.3232212961, 1.2477901578, 1.1513877213,
+ 1.0346038043, 0.9695272446 },
+ { 0.4620873630, 0.5685822368, 0.8975039423, 1.0476453304,
+ 1.2278674245, 1.2290470600, 1.1962138712, 1.0051129162,
+ 0.8706344664, 0.7477557659 } },
+ { { 0.4188340604, 0.6011532843, 0.4726385474, 0.6389671564,
+ 0.6753392518, 0.7842589319, 0.6147846282, 0.6708828509,
+ 0.6406055391, 0.5398777723 },
+ { 0.1012499630, 0.2312064767, 0.1773364544, 0.2800302804,
+ 0.3348177969, 0.4343003929, 0.2822584808, 0.3293128312,
+ 0.3024433553, 0.2401848137 } },
+ { { 0.5049474537, 0.7943513691, 0.9536021650, 0.9407572448,
+ 0.9823721647, 0.9747045338, 1.0145500004, 0.9629737139,
+ 0.9526191354, 0.9283710718 },
+ { 0.0566204190, 0.0973178446, 0.5812305510, 0.5687133074,
+ 0.6834000945, 0.6616423726, 0.7611905038, 0.6683925092,
+ 0.6463071108, 0.6118355393 } },
+ { { 0.8969141245, 0.9359731674, 0.8756151497, 0.8419300020,
+ 0.8353109360, 0.6807131469, 0.3358008265, 0.3386188447,
+ 0.3524467945, 0.4495045841 },
+ { 0.5298508704, 0.4606455863, 0.4934132397, 0.4415748119,
+ 0.4015327394, 0.2052544951, -0.0329663455, -0.0154684186,
+ 0.0418094397, 0.1631152928 } },
+ { { 0.6345762908, 2.5209445655, 1.0373562872, 0.9166402519,
+ 0.8865595460, 0.8907538056, 0.8522190452, 0.7290782034,
+ 0.7385808229, 0.6345107555 },
+ { 0.2641707361, 2.5696372986, 0.8539884984, 0.6532538533,
+ 0.6087553799, 0.5851626694, 0.5276226699, 0.4330552220,
+ 0.3971418738, 0.3599833548 } },
+};
+
+static const float ff_wmavoice_lsp16_intercoeff_a[32][2][16] = {
+ { { 0.5337238312, 0.4810695648, -0.3766536713, -0.1204767227,
+ -0.0898437500, -0.0070896149, 0.1134738922, 0.1337728500,
+ 0.3739156723, 0.3849058151, 0.4220180511, 0.5404901505,
+ 0.5224876404, 0.5502910614, 0.5313453674, 0.4405946732 },
+ { 0.1775283813, 0.1679325104, -0.2702789307, -0.1359367371,
+ -0.1452455521, -0.0888595581, -0.0256662369, -0.0023736954,
+ 0.1074047089, 0.1431636810, 0.1357412338, 0.2045526505,
+ 0.2686481476, 0.3404531479, 0.3209333420, 0.1493968964 } },
+ { { 0.7402400970, 0.0838251114, 0.6486282349, 0.6145095825,
+ 0.7331047058, 0.7183008194, 0.7436847687, 0.7627944946,
+ 0.7653779984, 0.7795667648, 0.8399305344, 0.8393154144,
+ 0.8219690323, 0.7474164963, 0.6681070328, 0.6490793228 },
+ { 0.2850513458, -0.0544128418, -0.0300130844, 0.0204677582,
+ 0.0328931808, 0.0589332581, 0.0796422958, 0.1187639236,
+ 0.1320505142, 0.1539077759, 0.2189874649, 0.2865276337,
+ 0.2973947525, 0.2614307404, 0.2416648865, 0.2428951263 } },
+ { { 0.6129922867, 0.7300701141, 0.2073822021, 0.5005893707,
+ 0.5713691711, 0.5374965668, 0.6293134689, 0.5639057159,
+ 0.7402811050, 0.6982889175, 0.4668397903, 0.6698703766,
+ 0.8758535385, 0.8678569794, 0.8678569794, 0.7810840607 },
+ { 0.2986249924, 0.3269615173, 0.0096416473, 0.1800708771,
+ 0.2474060059, 0.2203407288, 0.3007984161, 0.2674179077,
+ 0.4424810410, 0.4046306610, 0.2063980103, 0.4230022430,
+ 0.6222190857, 0.6574449539, 0.6776618958, 0.6604385376 } },
+ { { 0.7258052826, 0.5073966980, -0.3947381973, 0.5254812241,
+ 1.0561246872, 0.9706230164, 0.9727144241, 0.9185838699,
+ 0.8184833527, 0.9093980789, 0.8645353317, 0.7870302200,
+ 0.6347675323, 0.5123996735, 0.2846002579, 0.3252801895 },
+ { 0.4306297302, 0.2182903290, -0.4902458191, 0.1783485413,
+ 0.7783365250, 0.7152252197, 0.7404451370, 0.6012639999,
+ 0.5421304703, 0.6619558334, 0.6316919327, 0.5596818924,
+ 0.3952398300, 0.3567333221, 0.1505041122, 0.1290159225 } },
+ { { 0.3077287674, 0.2543363571, 0.2834520340, 0.5282287598,
+ 0.5350360870, 0.4943971634, 0.4521999359, 0.3086309433,
+ 0.2372770309, 0.0819387436, -0.1385612488, -0.0848407745,
+ -0.0380916595, 0.1192150116, 0.3228197098, 0.3012905121 },
+ { 0.0567188263, 0.0196886063, 0.0682420731, 0.2102527618,
+ 0.2452325821, 0.2060699463, 0.1620273590, 0.0784120560,
+ 0.0418329239, -0.0508041382, -0.2193880081, -0.1644783020,
+ -0.1361827850, -0.0307512283, 0.1486587524, 0.2356367111 } },
+ { { 0.4387903214, 0.5723943710, 0.6147556305, 0.9973602295,
+ 1.1645498276, 1.1898927689, 1.0326681137, 0.6939010620,
+ 0.6064310074, 0.4686441422, 0.4646663666, 0.4895582199,
+ 0.5654230118, 0.6004848480, 0.6179132462, 0.6439123154 },
+ { 0.1324195862, 0.2426080704, 0.3132238388, 0.7359752655,
+ 0.9749288559, 0.9535636902, 0.8105278015, 0.4118890762,
+ 0.3013315201, 0.2006158829, 0.2331352234, 0.2535161972,
+ 0.3375005722, 0.4103307724, 0.4102897644, 0.4529380798 } },
+ { { 0.7335557938, 0.9203472137, 0.4852113724, 0.8646993637,
+ 0.7304391861, 0.7503690720, 0.6289854050, 0.6900463104,
+ 0.6421079636, 0.5184278488, 0.4444904327, 0.2660236359,
+ 0.2143125534, 0.2406396866, 0.4836940765, 0.5597229004 },
+ { 0.3689947128, 0.4967346191, 0.1176567078, 0.5127687454,
+ 0.3235168457, 0.3426265717, 0.2417469025, 0.3310623169,
+ 0.2629890442, 0.2130823135, 0.1329116821, 0.0468769073,
+ -0.0081968307, 0.0146446228, 0.2440433502, 0.3408632278 } },
+ { { 0.9425325394, 0.9597969055, 0.6160678864, 0.7050962448,
+ 0.8063859940, 0.9063224792, 0.9890356064, 1.0038805008,
+ 1.0338163376, 0.9453620911, 0.9634056091, 0.8068370819,
+ 0.6859455109, 0.8909034729, 0.9990415573, 1.0122871399 },
+ { 0.6895952225, 0.6451835632, 0.3169965744, 0.4268569946,
+ 0.5666122437, 0.7722673416, 0.8845882416, 0.9061584473,
+ 0.9550399780, 0.8118810654, 0.8601064682, 0.6129922867,
+ 0.5069866180, 0.7065315247, 0.7862920761, 0.7766551971 } },
+ { { 0.5641517639, -0.0941905975, 0.0412998199, 0.1810550690,
+ 0.3459482193, 0.4213209152, 0.4401025772, 0.5397109985,
+ 0.5607891083, 0.6348905563, 0.6861915588, 0.7280607224,
+ 0.7267074585, 0.6447324753, 0.5948257446, 0.5475025177 },
+ { 0.1906919479, -0.0519113541, -0.0608100891, -0.0018815994,
+ 0.0383062363, 0.0362558365, 0.0529870987, 0.0692672729,
+ 0.0953073502, 0.1327886581, 0.1390628815, 0.1904459000,
+ 0.2362518311, 0.2063980103, 0.2311668396, 0.2291574478 } },
+ { { 0.9901428223, 0.9589767456, 0.9012374878, 0.8017930984,
+ 0.8929538727, 0.8512077332, 0.8790111542, 0.8832759857,
+ 0.8949632645, 0.9159183502, 0.9293279648, 0.9152622223,
+ 0.9247350693, 0.8753614426, 0.8730239868, 0.8066730499 },
+ { 0.4230432510, -0.0464572906, 0.0182533264, 0.1159753799,
+ 0.2349395752, 0.2740612030, 0.2987070084, 0.3620643616,
+ 0.3923282623, 0.4694643021, 0.5202322006, 0.5356512070,
+ 0.5564012527, 0.5362663269, 0.4791831970, 0.5046901703 } },
+ { { 0.9785375595, 0.8820457458, 0.3965110779, 0.4790191650,
+ 0.3907699585, 0.4195575714, 0.2938270569, 0.4091415405,
+ 0.3659191132, 0.4030723572, 0.4168510437, 0.5030908585,
+ 0.5023117065, 0.5511522293, 0.5354051590, 0.5563192368 },
+ { 0.6592903137, 0.2933759689, 0.0562677383, 0.1286878586,
+ 0.0758285522, 0.1192560196, 0.0508956909, 0.1175336838,
+ 0.0684061050, 0.0988750458, 0.0923957825, 0.1819572449,
+ 0.1965150833, 0.2257537842, 0.3049812317, 0.2993221283 } },
+ { { 0.7120265961, 0.7847747803, 0.6065950394, 0.7235908508,
+ 0.6740531921, 0.6535081863, 0.3734235764, 0.4788551331,
+ 0.4410867691, 0.6927528381, 1.0758495331, 1.1148891449,
+ 1.0708875656, 0.8896322250, 0.6401805878, 0.5057153702 },
+ { 0.4210338593, 0.4763126373, 0.3229017258, 0.4079113007,
+ 0.3922462463, 0.3529195786, 0.1258993149, 0.2168960571,
+ 0.2207508087, 0.4605655670, 0.8759355545, 0.9526205063,
+ 0.8843832016, 0.7001342773, 0.4503545761, 0.3484086990 } },
+ { { 0.5254402161, 0.5349540710, 0.7036199570, 0.6240234375,
+ 0.6464548111, 0.7537727356, 0.8311548233, 0.7334327698,
+ 0.3484907150, 0.1846637726, 0.0894021988, 0.3977823257,
+ 0.7672233582, 0.9224796295, 0.8818407059, 0.7453250885 },
+ { 0.2587652206, 0.2524499893, 0.4135704041, 0.3129367828,
+ 0.3403711319, 0.4473199844, 0.5330266953, 0.4227561951,
+ 0.1080198288, -0.0044651031, -0.0727024078, 0.1583776474,
+ 0.5302381516, 0.7313823700, 0.6735610962, 0.5630855560 } },
+ { { 0.7936325073, 0.8551034927, 0.9755849838, 0.8953323364,
+ 0.9345769882, 0.7202281952, 0.8388233185, 0.7941656113,
+ 0.7550849915, 0.7894906998, 0.8590402603, 0.7813711166,
+ 0.8483371735, 0.8652324677, 0.8586711884, 0.9584846497 },
+ { 0.4781579971, 0.4731960297, 0.8289403915, 0.6175031662,
+ 0.7262973785, 0.3638277054, 0.5544328690, 0.4761896133,
+ 0.4388723373, 0.5021476746, 0.5630445480, 0.4562187195,
+ 0.5190429688, 0.5937595367, 0.6121721268, 0.6973457336 } },
+ { { 1.0724458694, 1.0449705124, 0.8594503403, 0.7604160309,
+ 0.7837905884, 0.8136444092, 0.7623023987, 0.6098756790,
+ 0.6432561874, 0.6395244598, 0.6853713989, 0.7401580811,
+ 0.7399530411, 0.7652549744, 0.7675104141, 0.7393789291 },
+ { 0.9382266998, 0.8419809341, 0.3087539673, 0.3620233536,
+ 0.3547649384, 0.4241094589, 0.2857894897, 0.2123851776,
+ 0.2355957031, 0.2794332504, 0.3219995499, 0.3898267746,
+ 0.3937635422, 0.4058198929, 0.4228382111, 0.4181222916 } },
+ { { 1.0275421143, 1.0940570831, 1.0164289474, 0.9097671509,
+ 0.9400720596, 0.8976287842, 0.9175586700, 0.8900833130,
+ 0.9154262543, 0.9492578506, 1.0011329651, 1.0361537933,
+ 1.0359487534, 0.9320344925, 0.8974237442, 0.8811845779 },
+ { 1.0046186447, 1.0860195160, 0.9442958832, 0.7473344803,
+ 0.7876043320, 0.7410602570, 0.7422084808, 0.6844692230,
+ 0.7256412506, 0.8455486298, 0.8969316483, 0.9362173080,
+ 0.9092340469, 0.8227071762, 0.7481546402, 0.7088689804 } },
+ { { 0.2205047607, -0.0129537582, 0.0972347260, 0.1154832840,
+ 0.0951843262, 0.1532516479, 0.1288108826, 0.1749858856,
+ 0.1591157913, 0.2134923935, 0.2477340698, 0.2634811401,
+ 0.3032999039, 0.3272485733, 0.3170785904, 0.3172016144 },
+ { 0.0032854080, -0.0446119308, 0.0284643173, 0.0155467987,
+ -0.0063104630, 0.0226001740, 0.0086984634, 0.0262088776,
+ 0.0173921585, 0.0360507965, 0.0366659164, 0.0215339661,
+ 0.0412178040, 0.1047391891, 0.1258172989, 0.0609836578 } },
+ { { 0.1495609283, 0.3275766373, 0.8598194122, 0.6847562790,
+ 0.7550849915, 0.5662431717, 0.6930398941, 0.7526245117,
+ 0.7300291061, 0.7284708023, 0.6608896255, 0.5224056244,
+ 0.4273900986, 0.5757160187, 0.4625749588, 0.5123586655 },
+ { -0.0352210999, -0.0428895950, 0.3110914230, 0.2699604034,
+ 0.3307752609, 0.2059469223, 0.2332172394, 0.3204412460,
+ 0.2846412659, 0.3354911804, 0.2448635101, 0.1514062881,
+ 0.1062564850, 0.2613077164, 0.2123441696, 0.3000602722 } },
+ { { 0.6218910217, 0.6033554077, 0.4551525116, 0.3161764145,
+ 0.2864866257, 0.6195125580, 0.7577505112, 1.0062179565,
+ 0.8485012054, 0.6777849197, 0.7455301285, 0.3630485535,
+ 0.2327661514, 0.5563192368, 0.4448595047, 0.3806819916 },
+ { 0.2624969482, 0.2679510117, 0.1839666367, 0.0335903168,
+ 0.0294075012, 0.2902593613, 0.4959144592, 0.7905979156,
+ 0.5748548508, 0.3753919601, 0.4855394363, 0.1089630127,
+ 0.0362968445, 0.3632535934, 0.2681150436, 0.2735691071 } },
+ { { 0.7064495087, 0.4431781769, 0.7628355026, 0.7271585464,
+ 0.7812070847, 0.7806739807, 0.8909854889, 0.8958654404,
+ 0.9126787186, 0.9038209915, 0.9246120453, 0.9624624252,
+ 0.9732475281, 0.7420034409, 0.5060844421, 0.5189199448 },
+ { 0.3457021713, -0.0149221420, 0.3174476624, 0.3580865860,
+ 0.4243965149, 0.4275541306, 0.5887155533, 0.6478490829,
+ 0.6320610046, 0.6627349854, 0.6868886948, 0.7396659851,
+ 0.7551259995, 0.5275316238, 0.3075237274, 0.3806819916 } },
+ { { 0.4376831055, 0.4904603958, 0.6262788773, 0.5901098251,
+ 0.4176712036, 0.0221490860, -0.1612796783, -0.2236118317,
+ -0.1087894440, -0.0022506714, 0.1051902771, 0.3307752609,
+ 0.4167690277, 0.4997692108, 0.4645843506, 0.5228567123 },
+ { 0.1228237152, 0.1671123505, 0.2931299210, 0.2549924850,
+ 0.1435737610, -0.1124801636, -0.2181987762, -0.2723293304,
+ -0.1573429108, -0.0837745667, -0.0325555801, 0.1024427414,
+ 0.1938495636, 0.2825498581, 0.2247285843, 0.2879629135 } },
+ { { 0.6100807190, 0.7900238037, 0.9581155777, 0.8999662399,
+ 0.9277286530, 0.9720993042, 0.9966220856, 0.9630365372,
+ 0.9571723938, 0.8992280960, 0.8370189667, 0.7417984009,
+ 0.7174396515, 0.6122951508, 0.6746683121, 0.7030458450 },
+ { 0.0859165192, 0.0914115906, 0.6077432632, 0.5471334457,
+ 0.5943746567, 0.6805324554, 0.6680250168, 0.6033554077,
+ 0.6302976608, 0.4874258041, 0.3647298813, 0.2770137787,
+ 0.2544183731, 0.2608156204, 0.3331537247, 0.4950942993 } },
+ { { 0.4051227570, 1.1022176743, 0.8262338638, 0.6573219299,
+ 0.5948667526, 0.5426225662, 0.4987850189, 0.4370269775,
+ 0.4421119690, 0.3837165833, 0.3728494644, 0.3706760406,
+ 0.4169740677, 0.3559951782, 0.2994041443, 0.3896217346 },
+ { 0.0716867447, 0.9253911972, 0.2780799866, 0.2460117340,
+ 0.1675224304, 0.1527595520, 0.1278266907, 0.1226596832,
+ 0.1165084839, 0.0982189178, 0.0952253342, 0.1113414764,
+ 0.1498889923, 0.0940361023, 0.0802984238, 0.1560811996 } },
+ { { 0.7024717331, 0.7363853455, 0.9629545212, 0.9635286331,
+ 1.0819597244, 1.1529855728, 1.2984409332, 1.2693252563,
+ 1.2848672867, 1.2877378464, 1.2133083344, 1.0696573257,
+ 1.0864706039, 0.9851808548, 0.8312368393, 0.8047866821 },
+ { 0.3001422882, 0.2273120880, 0.6279602051, 0.6936140060,
+ 0.8097076416, 0.9440498352, 1.1028738022, 1.1766471863,
+ 1.1199741364, 1.1608181000, 1.0665817261, 0.8872537613,
+ 0.9082908630, 0.7602519989, 0.6542053223, 0.7317514420 } },
+ { { 0.0643463135, -0.6808919907, 0.2889881134, 0.6142225266,
+ 0.6356697083, 0.6825828552, 0.6259508133, 0.4945611954,
+ 0.5866651535, 0.6357517242, 0.5208883286, 0.4207878113,
+ 0.5125637054, 0.3758020401, 0.5424175262, 0.6172571182 },
+ { -0.0636806488, -0.7585611343, 0.0850553513, 0.2996912003,
+ 0.3620643616, 0.4444084167, 0.4597454071, 0.3120756149,
+ 0.4016780853, 0.5026807785, 0.4111919403, 0.3183498383,
+ 0.3666572571, 0.1829824448, 0.3269205093, 0.4095926285 } },
+ { { 0.9277286530, 0.9651279449, 0.9602069855, 0.9327726364,
+ 0.9208393097, 0.8868436813, 0.9011554718, 0.8569488525,
+ 0.9015245438, 0.8969726562, 0.9367094040, 0.9445009232,
+ 0.8617057800, 0.8215589523, 0.8333692551, 0.7939195633 },
+ { 0.1719102859, 0.1142530441, 0.1245460510, 0.1646108627,
+ 0.1408672333, 0.0949792862, 0.0271930695, 0.0265779495,
+ -0.0064334869, -0.0109033585, 0.0152187347, 0.0252656937,
+ 0.0166950226, 0.0736141205, 0.1205682755, 0.1895437241 } },
+ { { 0.5964250565, 0.6065130234, 0.7228116989, 0.7348270416,
+ 0.0718097687, 0.2369899750, 0.2456426620, 0.4961194992,
+ 0.6410417557, 0.6765956879, 0.6771287918, 0.7285938263,
+ 0.6706905365, 0.5105543137, 0.5068635941, 0.5430326462 },
+ { 0.2782440186, 0.2620048523, 0.4424400330, 0.4124631882,
+ -0.1158838272, 0.0186223984, 0.0059919357, 0.1853609085,
+ 0.3568563461, 0.3791646957, 0.4100847244, 0.4654865265,
+ 0.4614677429, 0.3209743500, 0.3199081421, 0.3836755753 } },
+ { { 0.8051557541, 0.8506336212, 0.9544658661, 0.5584516525,
+ 0.5874032974, 0.5727224350, 0.6177902222, 0.7659521103,
+ 0.9526205063, 1.0424280167, 1.0705595016, 1.0042905807,
+ 0.6005258560, 0.3886785507, 0.4739751816, 0.6542463303 },
+ { 0.4775428772, 0.5541868210, 0.7128057480, 0.2146816254,
+ 0.2502765656, 0.2488822937, 0.3009214401, 0.4667987823,
+ 0.6929988861, 0.8599834442, 0.8784780502, 0.7463912964,
+ 0.3217535019, 0.1274986267, 0.2767267227, 0.5119485855 } },
+ { { 0.5978193283, 0.5092830658, 1.0738401413, 0.7688636780,
+ 0.8214769363, 0.7682075500, 0.4970626831, 0.2783260345,
+ 0.2652854919, 0.3625154495, 0.5700569153, 0.5044031143,
+ 0.4003248215, 0.5162544250, 0.5727634430, 0.5538587570 },
+ { 0.2752094269, 0.1747808456, 0.8557186127, 0.4280872345,
+ 0.5143680573, 0.4139804840, 0.1810960770, 0.0109539032,
+ 0.0317039490, 0.0842351913, 0.3129367828, 0.2614717484,
+ 0.1564092636, 0.2352676392, 0.3249931335, 0.3505821228 } },
+ { { 0.7093610764, 0.7587757111, 1.8517618179, 1.0092525482,
+ 0.8078622818, 0.8792982101, 0.8210668564, 0.8600654602,
+ 0.6913585663, 0.6436662674, 0.6216859818, 0.6123771667,
+ 0.5940465927, 0.5910940170, 0.6505966187, 0.5801038742 },
+ { 0.3370904922, 0.4681930542, 1.9236078262, 0.8053607941,
+ 0.5321245193, 0.6342344284, 0.5054693222, 0.5788326263,
+ 0.4400615692, 0.4086904526, 0.3924102783, 0.4220180511,
+ 0.3835115433, 0.4230432510, 0.5190839767, 0.3990535736 } },
+ { { 0.6277141571, 1.1122236252, 1.0259838104, 0.9486427307,
+ 0.9184608459, 0.9059944153, 0.9080038071, 0.8282022476,
+ 0.8440313339, 0.7887935638, 0.7468013763, 0.6746683121,
+ 0.6319379807, 0.6246795654, 0.7263793945, 0.7349090576 },
+ { 0.2427721024, 1.0851583481, 0.6180362701, 0.5837125778,
+ 0.4324750900, 0.4684801102, 0.3745307922, 0.3027257919,
+ 0.3646888733, 0.2409267426, 0.2158298492, 0.2052907944,
+ 0.2100887299, 0.2276401520, 0.3409452438, 0.4045896530 } },
+ { { 0.8391513824, 0.8713426590, 1.1366233826, 1.1440868378,
+ 1.1443738937, 1.0877418518, 1.0516138077, 1.0099496841,
+ 0.9216184616, 0.8990640640, 0.9001302719, 0.8993101120,
+ 0.8055248260, 0.8150796890, 0.7272815704, 0.7196130753 },
+ { 0.4634771347, 0.5807189941, 1.1287908554, 1.1066875458,
+ 1.0765056610, 0.9287538528, 0.8956193924, 0.8026132584,
+ 0.6725769043, 0.5856809616, 0.5527515411, 0.5183868408,
+ 0.4529380798, 0.5074377060, 0.4632720947, 0.5554990768 } },
+};
+
+static const float ff_wmavoice_lsp16_intercoeff_b[32][2][16] = {
+ { { 0.5431776047, -0.1212130189, -0.2471650839, 0.0683670044,
+ 0.1418520808, 0.2518971562, 0.3708084226, 0.4141484499,
+ 0.5712364912, 0.5852659345, 0.5670641661, 0.6401320100,
+ 0.6447737217, 0.6726239920, 0.4994724989, 0.5574678183 },
+ { 0.2040718794, -0.1271064281, -0.2266163826, -0.0406349897,
+ -0.0145058036, 0.0283126831, 0.0851084590, 0.0913147926,
+ 0.1307432652, 0.1926501393, 0.2310355306, 0.2828245163,
+ 0.3171940446, 0.4424681067, 0.2960716486, 0.3510941863 } },
+ { { 0.8073900938, 0.0403081179, 0.5392660499, 0.6928597689,
+ 0.6499369740, 0.7328097820, 0.7755761147, 0.7766191959,
+ 0.8820225596, 0.8423333168, 0.8898978233, 0.8488525748,
+ 0.8654375672, 0.6728326082, 0.6169234514, 0.6755967736 },
+ { 0.3653843999, -0.0846008658, -0.0224332213, 0.1120721102,
+ 0.1020585299, 0.1741876006, 0.2129902244, 0.2160151601,
+ 0.3619422317, 0.4185815454, 0.5455245376, 0.5363975763,
+ 0.5429168344, 0.3505726457, 0.3296067119, 0.3620986938 } },
+ { { 0.1843576431, 0.0179861784, 0.3122915626, 0.3600125313,
+ 0.2466817498, 0.2172668576, 0.1975526214, 0.1177569032,
+ 0.1196866035, 0.0849519968, 0.0962694287, 0.1591672301,
+ 0.2300446033, 0.3082756996, 0.4047607183, 0.3925045133 },
+ { -0.0275964737, -0.0794897676, 0.1168181300, 0.1591150761,
+ 0.0915755630, 0.0460972190, 0.0562151074, 0.0084419847,
+ -0.0095511675, -0.0408957601, -0.0376100540, -0.0166962743,
+ 0.0656028390, 0.1226072311, 0.2293144464, 0.2142419219 } },
+ { { 0.4781936407, -1.2478972673, 0.4884679914, 0.7755239606,
+ 0.6785174012, 0.6590117812, 0.6177057624, 0.6427918673,
+ 0.5402048230, 0.5512614846, 0.6424267888, 0.4229103327,
+ 0.5106334686, 0.5136062503, 0.4490395188, 0.4753251672 },
+ { 0.2852236032, -1.3815159798, 0.1904075146, 0.4874770641,
+ 0.4593138695, 0.4182686210, 0.4174863100, 0.4604612589,
+ 0.4089330435, 0.3891666532, 0.4700576067, 0.2383370996,
+ 0.2801646590, 0.3398289084, 0.2766703367, 0.3374298215 } },
+ { { 0.5925153494, 0.3858809471, 1.0754098296, 0.5752002001,
+ 0.5516265631, 0.4853909016, 0.4719351530, 0.5018194318,
+ 0.3037382960, 0.5154316425, 0.8809794784, 0.7755761147,
+ 0.5941321254, 0.3974069953, 0.5925675035, 0.6097261906 },
+ { 0.3008176684, 0.0706617832, 0.8484353423, 0.2574254870,
+ 0.2815728188, 0.1930673718, 0.2523665428, 0.2691601515,
+ 0.1271967888, 0.2653007507, 0.6473292708, 0.5275835395,
+ 0.3928174376, 0.2405275702, 0.4008491635, 0.4556109309 } },
+ { { 0.7339050174, 0.4290645123, 0.6859754324, 0.6349166036,
+ 0.8034263849, 0.8509387374, 0.8591269255, 1.1049811840,
+ 1.3928194642, 1.3423343301, 1.0849018693, 0.8943830729,
+ 0.8579795361, 0.6920774579, 0.5613272190, 0.4303162098 },
+ { 0.4534726143, 0.0901674032, 0.3465046287, 0.3470261693,
+ 0.5217422843, 0.5874564052, 0.6014336944, 0.9161834717,
+ 1.2823571563, 1.2193550467, 0.8868207335, 0.6514494419,
+ 0.6249030232, 0.4453887343, 0.3665317893, 0.2242033482 } },
+ { { 0.4293252826, 0.3303368688, 0.6181751490, 0.9884168506,
+ 0.9915460944, 0.7939864993, 0.3019129038, 0.2443348169,
+ 0.4543070793, 0.5617444515, 0.4895110726, 0.6600027084,
+ 0.6290231943, 0.5580936670, 0.5459417701, 0.4647378922 },
+ { 0.1409133077, -0.0050137639, 0.2551307082, 0.6764833927,
+ 0.7112701535, 0.4648943543, 0.0301380754, -0.0235806108,
+ 0.1018499136, 0.2422486544, 0.2406318784, 0.4000146985,
+ 0.3713299632, 0.3259559274, 0.3820737004, 0.2888743877 } },
+ { { 0.7733334899, 0.8321111202, 1.3098945022, 1.0331128836,
+ 1.0380675197, 0.9479974508, 0.9740223289, 0.9442945123,
+ 0.8926619887, 0.8719046712, 0.8640815616, 0.8404036164,
+ 0.8359183669, 0.7675965428, 0.6895219088, 0.7266034484 },
+ { 0.3655408621, 0.4643206596, 1.2171645761, 0.8341451287,
+ 0.8387868404, 0.6713201404, 0.6814901829, 0.6294404268,
+ 0.5172048807, 0.5205948949, 0.5408828259, 0.5298783183,
+ 0.5781729817, 0.5000983477, 0.4727174640, 0.4326109886 } },
+ { { 0.8902629018, 0.4598354101, 0.6392975450, 0.4483093619,
+ 0.6220867038, 0.6323089004, 0.7063676715, 0.3717993498,
+ 0.6718416810, 0.7876758575, 0.2807383537, 0.3118221760,
+ 0.6703813672, 0.7662405372, 0.7122610807, 0.7851724625 },
+ { 0.6301705837, 0.1221378446, 0.3532846570, 0.1412783861,
+ 0.3471826315, 0.3435318470, 0.4466925859, 0.1390357614,
+ 0.4092981219, 0.5406742096, 0.0690450072, 0.0829179883,
+ 0.4625995755, 0.5700891018, 0.5542864203, 0.6545265317 } },
+ { { -0.1100520492, 0.3803526163, 0.8075987101, 0.6903563738,
+ 0.8012359142, 0.7835035324, 0.8195941448, 0.8381088376,
+ 0.8033220768, 0.7511680126, 0.6393496990, 0.6096218824,
+ 0.6934856176, 0.6690253615, 0.6401841640, 0.5600233674 },
+ { -0.1776958704, -0.0293175578, 0.1520742774, 0.1746048331,
+ 0.2222214937, 0.3052507639, 0.2977927327, 0.3797789216,
+ 0.3395681381, 0.2976884246, 0.2516885400, 0.2403711081,
+ 0.3567789793, 0.3302847147, 0.3368039727, 0.3310148716 } },
+ { { 0.5587195158, 0.4676063657, 0.1392965317, -0.0990996957,
+ -0.0816280842, -0.1146416068, -0.0116894841, 0.0521992445,
+ 0.1626615524, 0.2923687100, 0.4029874802, 0.4528989196,
+ 0.4694839120, 0.5058352947, 0.5369191170, 0.5105291605 },
+ { 0.2193530202, 0.1211469173, 0.0179861784, -0.2022604346,
+ -0.1409794092, -0.2121175528, -0.1152674556, -0.0594626069,
+ -0.0122110248, 0.0274260640, 0.1414870024, 0.2044369578,
+ 0.2167974710, 0.2615978122, 0.3348221183, 0.3707562685 } },
+ { { 0.5948622823, 0.7065241337, 0.9414781928, 0.9340723157,
+ 0.8835350275, 0.9730835557, 0.8503650427, 0.8902629018,
+ 0.8746688366, 0.6910865307, 0.6404449344, 0.6976057887,
+ 0.5916287303, 0.6022160053, 0.7729684114, 0.6096740365 },
+ { 0.1262058616, 0.1300652623, 0.6594290137, 0.6535877585,
+ 0.5639349222, 0.6982316375, 0.4828875065, 0.5577285886,
+ 0.4591052532, 0.2964367270, 0.2695252299, 0.3324751854,
+ 0.2860580683, 0.2902825475, 0.4623388052, 0.3369604349 } },
+ { { 0.8821268678, 0.8539636731, 0.2898653150, 0.7478301525,
+ 0.5109463930, 0.8577187657, 0.4884679914, 0.7846509218,
+ 0.7684310079, 0.7032384276, 0.6691296697, 0.8593355417,
+ 0.9383489490, 0.9808023572, 0.6804992557, 0.6403927803 },
+ { 0.5590324402, 0.4209806323, 0.0259135962, 0.4318808317,
+ 0.2104346752, 0.5453680754, 0.1783599257, 0.4467447400,
+ 0.4352708459, 0.4089330435, 0.3994410038, 0.5984609127,
+ 0.6872792840, 0.7321317792, 0.4408513308, 0.4542027712 } },
+ { { 0.6371070743, 0.6311093569, 0.7152860165, 0.6929640770,
+ 0.2292101383, 0.3234525323, 0.9644259810, 0.9881039262,
+ 0.8722697496, 0.4370440841, 0.4051779509, 0.4944135547,
+ 0.5392660499, 0.5969484448, 0.4268740416, 0.4990552664 },
+ { 0.4233797193, 0.3647063971, 0.4345406890, 0.4180078506,
+ -0.0006328225, 0.0586141944, 0.7620160580, 0.8152132034,
+ 0.6707985997, 0.2095480561, 0.2178405523, 0.2776612639,
+ 0.3142212629, 0.3808741570, 0.2676998377, 0.2804775834 } },
+ { { 0.4509170651, 0.9490405321, 0.8557890654, 0.8271043301,
+ 0.6915559173, 0.7321839333, 0.6257896423, 0.6274064183,
+ 0.5238284469, 0.5194996595, 0.4116972089, 0.3382642865,
+ 0.3755022883, 0.4867990613, 0.5686287880, 0.5106856227 },
+ { 0.0989292860, 0.6244857907, 0.4700576067, 0.3905226588,
+ 0.2630059719, 0.3009741306, 0.2150763869, 0.2067838907,
+ 0.1533781290, 0.1815934777, 0.1023714542, 0.0373874903,
+ 0.0897501707, 0.1849313378, 0.2852757573, 0.2625887394 } },
+ { { 0.9954054952, 0.9554033279, 0.8237664700, 0.9780903459,
+ 0.7261862159, 0.7884581685, 0.7933084965, 0.7393290401,
+ 0.8783196211, 1.0409359932, 1.0217954516, 0.9159227014,
+ 0.8698185086, 0.7057939768, 0.7662926912, 0.7339571714 },
+ { 0.7913266420, 0.6739278436, 0.5061482191, 0.7058982849,
+ 0.3480692506, 0.4338105321, 0.4428853393, 0.3758152127,
+ 0.5962182879, 0.7925261855, 0.7968549728, 0.6629754901,
+ 0.6325175166, 0.4598354101, 0.5310778618, 0.5518873334 } },
+ { { 0.4638512731, 0.0604917407, 0.1897295117, 0.3403504491,
+ 0.4708399177, 0.5241413713, 0.6061275601, 0.6446694136,
+ 0.7313494682, 0.7208143473, 0.6268848777, 0.6081094146,
+ 0.4913364649, 0.3529717326, 0.4954566360, 0.5767126679 },
+ { 0.1353849769, -0.0274400115, 0.0002537966, 0.0272174478,
+ 0.0555371046, 0.0652899146, 0.1010676026, 0.1073260903,
+ 0.1568724513, 0.2207611799, 0.1434167027, 0.2262373567,
+ 0.1177047491, 0.0162650943, 0.2529402375, 0.4087765813 } },
+ { { 0.9700064659, 0.9917025566, 0.9159227014, 0.9309430718,
+ 0.8991290927, 0.9314124584, 0.9059612751, 0.9473194480,
+ 0.9604622722, 0.9377752542, 0.9197821021, 0.8869771957,
+ 0.8506779671, 0.8594920039, 0.8320589662, 0.8739908338 },
+ { 0.2892394662, 0.0551198721, 0.0892807841, 0.1158793569,
+ 0.0905846357, 0.0738953352, 0.0395258069, 0.0240360498,
+ 0.0477139950, 0.0751470327, 0.1171310544, 0.1555164456,
+ 0.1384620667, 0.1818542480, 0.2104868293, 0.1288135648 } },
+ { { 0.4101847410, 0.3326316476, 0.4666675925, 0.5077128410,
+ 0.5892296433, 0.4272912741, 0.0603352785, -0.8668596745,
+ -1.1103670001, -0.0900248885, 0.1626615524, 0.1487885714,
+ 0.4130010605, 0.5119373202, 0.5820323825, 0.5486016273 },
+ { 0.0383262634, 0.1300652623, 0.2295230627, 0.2706204653,
+ 0.3722165823, 0.1698066592, -0.0934670568, -0.8677462935,
+ -1.0724509954, -0.2164463401, -0.0056917667, -0.0301520228,
+ 0.1299088001, 0.2579991817, 0.3482257128, 0.2469425201 } },
+ { { 0.6031547785, 0.5515222549, 0.4292209744, 0.5027582049,
+ 0.8167778254, 1.0925685167, 0.9878953099, 0.7019345760,
+ 0.2509583831, 0.2475162148, 0.5660732388, 0.5145971775,
+ 0.4824181199, 0.5970005989, 0.5996604562, 0.5384315848 },
+ { 0.3677313328, 0.2650399804, 0.1585935354, 0.2213348746,
+ 0.5566333532, 0.8425940871, 0.7604514360, 0.4523773789,
+ 0.0681062341, 0.0737388730, 0.3169854283, 0.2868403792,
+ 0.2661873698, 0.3635068536, 0.4300554395, 0.3743027449 } },
+ { { 0.5017672777, 0.6634970307, 0.6869142056, 0.7066284418,
+ 0.5669598579, 0.0621085167, 0.0634645224, 0.2321307659,
+ 0.8322675824, 0.9855483770, 0.8296598792, 0.6140028238,
+ 0.5462546945, 0.6730412245, 0.6856103539, 0.5975221395 },
+ { 0.2680649161, 0.3324230313, 0.3688787222, 0.3886451125,
+ 0.2774004936, -0.1695076823, -0.1353467703, 0.0159000158,
+ 0.5895425677, 0.7586781979, 0.5639870763, 0.3687744141,
+ 0.3401418328, 0.4477356672, 0.4782979488, 0.4034568667 } },
+ { { 0.8838479519, 0.9025712609, 0.7326533198, 0.8124490380,
+ 0.8956347704, 1.1007045507, 1.2731780410, 1.2029786706,
+ 1.0839109421, 0.9664078355, 0.7356782556, 0.6942157745,
+ 0.6917645335, 0.6383587718, 0.6503020525, 0.5989302993 },
+ { 0.5576764345, 0.4596789479, 0.3790487647, 0.5514179468,
+ 0.7333834767, 0.9612445831, 1.1976589561, 1.1094664335,
+ 0.8868207335, 0.6789346337, 0.4643206596, 0.4029353261,
+ 0.4384522438, 0.3871847987, 0.4326109886, 0.3691916466 } },
+ { { 0.8520861268, 0.8413423896, 0.7238392830, 0.9103943706,
+ 0.7072542906, 0.6479029655, 0.4557673931, 0.1908247471,
+ -0.0569070578, -0.1013423204, 0.2517406940, 0.4854952097,
+ 0.5820845366, 0.5886037946, 0.6177579165, 0.6226603985 },
+ { 0.6160889864, 0.4592095613, 0.4752208591, 0.6685559750,
+ 0.4326109886, 0.4077335000, 0.2314006090, 0.0173603296,
+ -0.2208272815, -0.3014574647, 0.0321199298, 0.2559130192,
+ 0.3603254557, 0.3466089368, 0.4072119594, 0.4776199460 } },
+ { { 0.7083495259, 0.9001721740, 0.6795083284, 1.2743254304,
+ 1.3672639728, 1.2563322783, 0.8557369113, 0.8287732601,
+ 0.7942472696, 0.8006622195, 0.7034991980, 0.5479236245,
+ 0.6391932368, 0.6248508692, 0.5495925546, 0.4719351530 },
+ { 0.4000146985, 0.6493632793, 0.4583229423, 1.1484255195,
+ 1.2521599531, 1.1232351065, 0.6150459051, 0.5347808003,
+ 0.4726653099, 0.5269576907, 0.4278128147, 0.2745841742,
+ 0.3868718743, 0.4183729291, 0.3474434018, 0.3150035739 } },
+ { { 0.9070043564, 0.7648323774, 0.4281778932, 0.5475063920,
+ 0.4134704471, 0.4706834555, 0.4549329281, 0.4648422003,
+ 0.4572798610, 0.4823138118, 0.4666154385, 0.4841913581,
+ 0.4018922448, 0.4297946692, 0.4646857381, 0.6091003418 },
+ { 0.4925360084, 0.2065231204, 0.0948612690, 0.1716842055,
+ 0.0992422104, 0.1332988143, 0.1255800128, 0.1257364750,
+ 0.0955392718, 0.1118634939, 0.1372103691, 0.1525958180,
+ 0.0902717113, 0.1591672301, 0.2335910797, 0.3767018318 } },
+ { { 0.3185500503, 0.8677845001, 0.7776622772, 0.8160476685,
+ 0.8624126315, 0.8057211637, 0.8852561116, 0.8471314907,
+ 0.9145145416, 0.8945916891, 0.8638729453, 0.8531292081,
+ 0.7425104380, 0.6215651631, 0.6501455903, 0.6341864467 },
+ { -0.0499705672, 0.0687842369, 0.3051464558, 0.3368039727,
+ 0.4942049384, 0.3823344707, 0.5683158636, 0.5044271350,
+ 0.6278236508, 0.5777035952, 0.5745221972, 0.5502184033,
+ 0.4244228005, 0.3163595796, 0.3525545001, 0.3582914472 } },
+ { { 0.3200625181, 0.9415303469, 0.6067534089, 0.3568832874,
+ 0.1600538492, 0.2938811779, 0.2037589550, 0.3017564416,
+ 0.2572168708, 0.4796018004, 0.6938506961, 0.6847758889,
+ 0.7232134342, 0.6111343503, 0.5159531832, 0.4856516719 },
+ { 0.0680540800, 0.6285016537, 0.2514277697, 0.0790064335,
+ -0.0687981844, 0.0521992445, -0.0055874586, 0.0537117124,
+ 0.0188206434, 0.1883213520, 0.4493002892, 0.4300554395,
+ 0.4750122428, 0.3658016324, 0.3119786382, 0.2818335891 } },
+ { { 0.6864969730, 1.0815640092, 0.9838794470, 0.8845259547,
+ 0.9438772798, 0.8888025880, 0.8178730607, 0.8581881523,
+ 0.7128347754, 0.7120524645, 0.7345308661, 0.7945601940,
+ 0.7854853868, 0.8261655569, 0.6941114664, 0.6646444201 },
+ { 0.2847542167, 0.9535257816, 0.6691818237, 0.5026538968,
+ 0.5945493579, 0.4125838280, 0.3886451125, 0.3740941286,
+ 0.2453778982, 0.2928902507, 0.3219922185, 0.4065861106,
+ 0.3838469386, 0.4289602041, 0.3910441995, 0.3821780086 } },
+ { { 1.1335094571, 1.0390062928, 0.7019867301, 0.6203134656,
+ 0.6951545477, 0.4863818288, 0.6171320677, 0.6247465611,
+ 0.5907421112, 0.6711115241, 0.7322882414, 0.7042293549,
+ 0.5635698438, 0.6174449921, 0.6727283001, 0.6431047916 },
+ { 1.0146503448, 0.7762541175, 0.2200310230, 0.2459515929,
+ 0.2703596950, 0.1376276016, 0.2522100806, 0.2622758150,
+ 0.2389107943, 0.2956544161, 0.3799875379, 0.3653843999,
+ 0.2561216354, 0.2842326760, 0.4034568667, 0.3700782657 } },
+ { { 0.6342907548, 0.9627570510, 0.5214815140, -0.0226939917,
+ 0.5616401434, 0.7231091261, 0.7417802811, 0.9092991352,
+ 0.9739701748, 0.7804785967, 0.6771092415, 0.6352295280,
+ 0.4660417438, 0.5869870186, 0.6692339778, 0.5986173749 },
+ { 0.3988673091, 0.6997441053, 0.2316613793, -0.2566571236,
+ 0.2685343027, 0.4484136701, 0.4490395188, 0.6886874437,
+ 0.7703085542, 0.5847443938, 0.4539941549, 0.4098196626,
+ 0.2579991817, 0.3376384377, 0.4754816294, 0.5095382333 } },
+ { { 0.4443456531, 2.0296727419, 0.6569256186, 0.6439914107,
+ 0.6436263323, 0.5507399440, 0.6095175743, 0.6066491008,
+ 0.5347808003, 0.2529402375, 0.4443978071, 0.7000570297,
+ 0.8259569407, 0.5927761197, 0.5078171492, 0.4418422580 },
+ { 0.2430831194, 1.9133691788, 0.3723730445, 0.3764410615,
+ 0.3874977231, 0.3212099075, 0.3832210898, 0.4474227428,
+ 0.3644977808, 0.0814055204, 0.2752621770, 0.4647378922,
+ 0.6619845629, 0.4304205179, 0.3143777251, 0.2705683112 } },
+ { { 0.9740744829, 1.0730628967, 0.9743352532, 0.9098728299,
+ 0.9453375936, 0.9661470652, 0.9270836711, 0.9643738270,
+ 0.9989519715, 0.9627048969, 0.9348546267, 0.9865393043,
+ 0.9399657249, 0.9752218723, 0.8440544009, 0.8819182515 },
+ { 0.9258319736, 1.0357205868, 0.8463491797, 0.8108844161,
+ 0.8391519189, 0.8566235304, 0.8305986524, 0.8880724311,
+ 0.9181653261, 0.8670021892, 0.8305986524, 0.8995984793,
+ 0.8300249577, 0.8711223602, 0.7195626497, 0.8138571978 } },
+};
+
+static const double ff_wmavoice_mean_lsf10[2][10] = {
+ { 0.2235394066, 0.4097484909, 0.7025292732, 1.1077160169,
+ 1.3939179044, 1.6741291716, 1.9552949226, 2.2199793918,
+ 2.5103400247, 2.7829212906 },
+ { 0.1493683393, 0.3714357373, 0.7702730245, 1.0609411394,
+ 1.3270362536, 1.5806033119, 1.8398507524, 2.1116740248,
+ 2.3823505771, 2.6865718527 }
+};
+
+static const double ff_wmavoice_mean_lsf16[2][16] = {
+ { 0.0999206754, 0.2345933590, 0.4621011210, 0.6772546160,
+ 0.8346396060, 1.0067495130, 1.1571691668, 1.3292508688,
+ 1.4941465650, 1.6600755584, 1.8461284908, 2.0529487333,
+ 2.2690810112, 2.4949894820, 2.7172752965, 2.9164840903 },
+ { 0.0918298402, 0.2475621892, 0.4782937721, 0.6284774045,
+ 0.7861951264, 0.9303736000, 1.0940441024, 1.2521029300,
+ 1.4434732098, 1.6551410742, 1.8917962963, 2.0967280403,
+ 2.2981430375, 2.4826173497, 2.6827972461, 2.8811350800 }
+};
+
+static const float ff_wmavoice_std_codebook[1000] = {
+ -0.185013, -0.150405, -0.707267, -0.284100, 0.882898,
+ -0.788627, 0.061005, 0.374431, 0.053843, -0.909826,
+ 0.543602, 0.219326, 0.285698, 0.154709, -0.455005,
+ 0.426276, -0.868852, -0.952324, -0.550001, 0.813814,
+ -0.352815, 0.242122, 0.820495, -0.189574, -0.449538,
+ 0.499132, -0.247783, 0.598159, 0.732040, -0.564406,
+ -0.631788, -0.452973, 0.285189, -0.339055, 0.262927,
+ 0.168087, -0.127682, -0.676067, -0.457481, 0.926161,
+ -0.585893, -0.913880, 0.145487, 0.699804, 0.240829,
+ 0.690482, 0.126081, 0.371977, 0.738158, 0.576080,
+ 0.185791, -0.614657, -0.181799, 0.006285, 0.195768,
+ 0.368663, -0.494583, 0.947985, -0.033178, -0.762543,
+ -0.616421, 0.335034, -0.215516, 0.668769, 0.995979,
+ -0.952588, -0.163144, -0.131704, -0.628655, 0.379374,
+ -0.205543, -0.214549, 0.465494, 0.939944, -0.514744,
+ -0.293676, 0.630426, 0.611336, -0.921699, 0.368584,
+ 0.187416, 0.264092, 0.753927, -0.994382, -0.729623,
+ -0.050304, 0.374280, -0.224205, -0.102319, -0.658897,
+ 0.013252, 0.281260, 0.676137, 0.797736, -0.049971,
+ 0.672115, 0.845148, 0.786885, -0.459588, -0.783507,
+ 0.166259, 0.334869, 0.001944, -0.368247, 0.274813,
+ 0.487200, 0.338077, -0.094761, 0.098536, 0.416378,
+ -0.726176, -0.714048, -0.319530, -0.972249, -0.708430,
+ -0.049153, -0.022553, 0.665850, 0.726642, 0.875127,
+ -0.993047, -0.260106, 0.156387, 0.683090, -0.462370,
+ -0.893584, 0.355205, -0.617222, 0.893301, 0.895617,
+ -0.400729, 0.059559, 0.230486, 0.601215, 0.691313,
+ -0.494701, 0.088415, 0.029390, 0.410539, -0.813049,
+ -0.554232, 0.684362, -0.527097, 0.126238, 0.712113,
+ -0.235528, -0.922915, -0.310440, -0.569678, 0.803727,
+ -0.435313, -0.562725, -0.456380, 0.721075, -0.879635,
+ 0.081250, 0.827491, 0.475570, 0.464029, 0.720792,
+ 0.371187, -0.936700, -0.219649, -0.398327, 0.664515,
+ -0.528336, 0.106972, -0.247070, 0.501053, -0.482490,
+ -0.060119, 0.946821, -0.798127, 0.412784, 0.073058,
+ 0.913986, -0.822744, 0.150143, -0.396453, -0.392421,
+ -0.046130, 0.168234, 0.044854, 0.497490, -0.110691,
+ 0.165219, -0.421259, -0.283200, -0.359212, -0.957231,
+ -0.562409, -0.988025, -0.893931, 0.217942, -0.386352,
+ 0.770585, 0.689606, 0.720620, -0.476485, 0.190659,
+ -0.761870, 0.463395, 0.137480, -0.559997, -0.123821,
+ -0.789461, -0.646011, 0.053435, 0.360682, -0.042464,
+ 0.661014, -0.685448, -0.874230, -0.294133, 0.812042,
+ 0.015078, 0.871086, -0.609218, 0.731878, -0.488126,
+ -0.566448, -0.830530, -0.476150, -0.460379, 0.387412,
+ 0.137497, -0.689794, 0.077018, -0.141883, -0.166280,
+ -0.732322, 0.096247, -0.702884, 0.405158, 0.536250,
+ 0.173295, 0.615696, 0.890239, -0.773270, -0.023622,
+ -0.152226, 0.887744, 0.290930, -0.026456, -0.406389,
+ 0.102972, 0.988622, -0.535303, 0.493754, 0.720500,
+ -0.023428, 0.927306, 0.889970, 0.500421, -0.533073,
+ 0.277382, -0.362081, -0.222867, -0.645599, 0.496035,
+ 0.610853, -0.377922, -0.407718, 0.907969, -0.972764,
+ -0.871468, 0.081264, 0.642933, -0.981230, 0.307994,
+ -0.380689, -0.133456, 0.195738, 0.910241, 0.840088,
+ 0.789349, 0.013213, 0.828710, -0.745954, -0.493033,
+ 0.549210, 0.230618, -0.565727, 0.439180, -0.268961,
+ -0.098800, -0.283438, 0.368958, 0.678333, 0.070963,
+ -0.135007, 0.289186, 0.693041, 0.457275, 0.197155,
+ 0.720277, 0.585807, -0.721581, 0.363210, 0.604577,
+ 0.586413, 0.982521, -0.528878, -0.217849, 0.892762,
+ -0.688791, -0.428500, -0.094025, -0.860081, -0.174454,
+ 0.412942, 0.689129, -0.943836, 0.847215, 0.128309,
+ -0.212797, -0.251585, 0.844871, -0.843839, -0.573252,
+ -0.084167, 0.021154, 0.715935, -0.391126, -0.521570,
+ -0.086910, -0.670848, -0.935763, 0.191509, 0.692361,
+ 0.668814, -0.222078, 0.674882, -0.860064, 0.560073,
+ 0.567644, -0.548855, -0.868427, -0.526382, -0.408936,
+ -0.042881, 0.886560, -0.719807, 0.013283, 0.733775,
+ 0.408502, 0.800487, -0.517810, 0.253372, 0.956648,
+ -0.091062, -0.830794, -0.022198, -0.375127, -0.221920,
+ 0.456232, 0.537963, 0.107232, 0.520469, -0.270529,
+ -0.200406, 0.189284, 0.507393, -0.525524, 0.329220,
+ 0.067466, -0.957881, 0.780365, 0.199039, -0.484262,
+ -0.628570, -0.843843, -0.597703, -0.348377, 0.169441,
+ -0.863928, -0.939875, -0.030073, -0.381738, 0.313497,
+ -0.073425, 0.527200, 0.482703, 0.904377, -0.847927,
+ -0.739217, 0.360609, 0.690035, 0.368015, -0.118921,
+ -0.580493, -0.832391, -0.929638, 0.926900, -0.357915,
+ 0.399582, -0.005634, -0.315796, 0.179947, -0.806596,
+ 0.393360, 0.732931, -0.415833, -0.724526, 0.957347,
+ -0.892887, 0.475366, 0.173583, -0.418554, -0.302536,
+ 0.627315, 0.782000, 0.497542, 0.139082, 0.570111,
+ 0.732375, -0.454643, 0.302218, -0.019505, 0.881778,
+ -0.057606, 0.273041, 0.414170, -0.503501, -0.079602,
+ -0.083941, 0.007178, -0.171925, 0.506856, 0.520953,
+ 0.631684, -0.099784, 0.253885, -0.784149, 0.175691,
+ 0.211231, -0.677036, -0.348943, -0.615186, -0.095591,
+ 0.348521, -0.987871, -0.313590, -0.153938, 0.151210,
+ -0.743479, -0.421562, 0.696567, 0.558739, 0.558933,
+ 0.578346, -0.498867, -0.168026, -0.007485, -0.002368,
+ 0.752372, 0.908575, -0.995190, -0.419553, 0.415430,
+ 0.525763, -0.787869, -0.684353, -0.220353, -0.572018,
+ 0.491337, 0.990879, -0.249054, -0.857606, -0.624307,
+ 0.655355, 0.490915, -0.612178, -0.658235, -0.663023,
+ 0.539032, -0.401714, -0.084585, 0.235599, -0.842975,
+ -0.525653, -0.186055, -0.341841, 0.306321, 0.806460,
+ 0.655791, 0.058693, 0.715035, 0.660601, 0.639140,
+ 0.130465, 0.186363, 0.851271, 0.446112, 0.966011,
+ -0.720746, -0.062551, 0.956890, 0.030200, 0.079843,
+ -0.667418, -0.314445, -0.429243, -0.279596, 0.027320,
+ -0.092266, -0.740564, 0.625606, 0.823149, 0.495035,
+ 0.782632, -0.702504, -0.691020, -0.559209, 0.603818,
+ -0.884560, -0.903419, -0.337489, 0.830475, 0.757182,
+ -0.698349, -0.039060, -0.056455, -0.847078, -0.592948,
+ -0.090444, -0.567824, 0.344501, -0.133554, 0.462375,
+ -0.575656, 0.199028, -0.852070, -0.004899, 0.919432,
+ 0.175251, 0.902835, -0.821132, -0.199143, 0.725984,
+ 0.673903, -0.416511, -0.976519, 0.982883, 0.024279,
+ 0.627298, -0.901677, 0.120861, -0.710191, 0.928798,
+ -0.121958, -0.408540, -0.110261, 0.821588, -0.255618,
+ 0.296790, -0.268856, 0.176557, -0.358709, 0.597589,
+ -0.361067, 0.065635, -0.203382, -0.213137, -0.939264,
+ -0.283951, 0.962113, 0.963571, -0.105083, -0.237030,
+ 0.689556, -0.431180, 0.346459, 0.713037, -0.448297,
+ -0.629262, 0.340335, -0.349973, 0.491599, 0.630144,
+ -0.421175, -0.630359, -0.778396, 0.468564, -0.808771,
+ -0.034014, -0.234646, -0.077627, -0.857457, 0.406645,
+ -0.480038, -0.218524, -0.527720, 0.316580, 0.568338,
+ -0.466984, -0.967371, 0.530452, -0.503413, -0.072454,
+ -0.706578, -0.813857, 0.496366, 0.639881, 0.899179,
+ -0.951931, -0.989381, 0.239514, -0.301904, 0.502218,
+ -0.130341, 0.276921, 0.871860, 0.091262, -0.254515,
+ -0.936911, -0.942752, 0.510839, -0.014539, -0.800209,
+ -0.082516, 0.505423, -0.018733, 0.389763, -0.177997,
+ -0.450395, 0.922779, -0.145368, -0.919943, -0.580634,
+ 0.782178, -0.626521, -0.394491, 0.278545, -0.986640,
+ -0.495312, 0.326614, -0.976021, 0.744203, -0.975290,
+ 0.526197, -0.386139, 0.301631, 0.398057, 0.705124,
+ -0.952884, 0.461146, 0.762372, 0.557954, -0.553393,
+ 0.962163, -0.524562, 0.952030, -0.056570, 0.865202,
+ -0.225967, 0.493035, 0.787981, 0.628665, 0.573093,
+ -0.792653, 0.410844, 0.946571, -0.187144, -0.310612,
+ 0.959931, 0.317544, -0.983998, 0.983911, 0.061747,
+ -0.959287, 0.510108, 0.675608, 0.342344, -0.091835,
+ 0.380731, 0.389460, -0.630689, 0.143103, -0.052586,
+ -0.184083, 0.105266, 0.422852, -0.232052, -0.951303,
+ 0.288054, 0.541981, 0.541732, 0.076035, 0.170646,
+ 0.114825, 0.283382, -0.418510, 0.061396, -0.903763,
+ 0.270879, 0.021327, 0.413782, 0.286881, 0.005238,
+ -0.524472, 0.327594, -0.484654, -0.848864, -0.330063,
+ 0.423511, 0.531868, -0.940603, 0.792822, -0.325029,
+ 0.006811, -0.391261, 0.780237, -0.570337, 0.376687,
+ 0.828934, 0.717717, -0.081333, 0.370666, -0.206248,
+ -0.910686, -0.514510, -0.922867, -0.329196, 0.546886,
+ -0.826629, 0.941683, -0.431786, 0.587152, 0.228564,
+ 0.573452, -0.937320, -0.443843, -0.911202, -0.786184,
+ 0.226094, 0.512309, 0.745684, 0.285491, 0.305131,
+ -0.579345, -0.707698, 0.913870, -0.799108, -0.278035,
+ 0.290556, -0.970174, -0.560318, -0.790776, 0.400492,
+ 0.233434, -0.701462, 0.885982, 0.310567, -0.030658,
+ 0.432868, 0.483938, -0.088976, -0.998918, 0.071090,
+ -0.860412, 0.574534, 0.133770, -0.304255, 0.663332,
+ 0.347586, 0.921839, 0.175641, 0.093270, 0.207330,
+ -0.519228, 0.513925, 0.499633, -0.605358, 0.714817,
+ -0.778402, 0.685198, 0.744643, -0.338720, 0.894422,
+ 0.145135, 0.894714, -0.807041, 0.031117, 0.205281,
+ 0.162301, -0.536015, -0.310781, -0.926675, -0.534932,
+ 0.760308, -0.787088, -0.960398, -0.105922, -0.091343,
+ 0.702934, -0.758336, -0.169504, -0.121425, 0.334935,
+ -0.962173, 0.359347, -0.151140, 0.537460, 0.753989,
+ -0.436323, 0.759058, 0.439187, -0.691680, -0.579662,
+ 0.333608, 0.453454, -0.684948, 0.526567, -0.515429,
+ 0.520333, -0.311132, -0.051443, -0.790448, -0.237807,
+ 0.413625, 0.969861, -0.024895, 0.453226, -0.136061,
+ 0.883762, 0.156160, 0.105603, -0.285741, -0.965264,
+ -0.559462, -0.247914, 0.394083, 0.289398, -0.710455,
+ 0.148072, 0.853074, -0.951397, -0.412742, -0.838606,
+ -0.531059, 0.920866, 0.614848, -0.216007, 0.447434,
+ -0.900580, -0.695673, -0.863698, 0.047977, -0.486121,
+ -0.101505, -0.538399, -0.516261, 0.873600, 0.914828,
+ 0.347678, 0.757362, 0.070988, -0.546718, -0.528380,
+ 0.105724, -0.106180, 0.223706, -0.500194, -0.816782,
+ 0.513251, 0.647878, -0.963708, 0.561854, -0.764864,
+ -0.802314, -0.969205, -0.843997, 0.812534, -0.185212,
+ 0.603436, 0.911954, 0.119114, 0.739738, -0.040069,
+ 0.632993, -0.361767, 0.421532, -0.883268, -0.488168,
+ 0.336360, 0.464411, -0.730806, -0.592652, 0.917693,
+ -0.259186, 0.513071, -0.188487, 0.964520, -0.987122,
+ -0.005270, 0.477771, 0.660756, 0.031023, 0.039625,
+ 0.895892, 0.228709, 0.070419, -0.948105, 0.041243,
+ 0.885207, 0.655331, -0.046803, 0.004321, 0.395069,
+ 0.913128, -0.362686, -0.966698, 0.334661, -0.245954,
+ -0.454865, -0.328980, -0.781543, -0.185671, 0.078368,
+ -0.863850, 0.555143, -0.408560, -0.052338, 0.519663,
+ -0.395683, 0.942393, -0.002565, -0.734927, -0.026585,
+ -0.962941, -0.839035, -0.797876, 0.107479, -0.787140,
+ 0.243367, -0.007314, 0.868191, -0.803435, 0.997007,
+ 0.263261, -0.890307, -0.365679, 0.296563, 0.444354,
+ 0.388367, 0.841698, -0.884626, 0.606824, -0.343973,
+ 0.193743, 0.742974, -0.788830, 0.785182, -0.309364,
+ 0.730833, -0.610500, -0.366971, -0.271732, -0.345427,
+ 0.606444, -0.234673, -0.184462, 0.808568, 0.872806,
+ 0.028398, 0.051936, -0.134508, -0.103410, 0.248500,
+ -0.137501, -0.840150, 0.358194, 0.496819, 0.456413,
+ -0.197453, -0.114814, 0.298111, -0.082078, -0.507990,
+ 0.954138, -0.888336, -0.765016, -0.834692, 0.896847,
+ -0.074380, 0.896141, -0.713654, 0.558649, -0.375591,
+ -0.059081, 0.165093, 0.389736, 0.756458, -0.026339,
+ 0.262542, -0.215144, -0.974403, -0.871966, 0.681446
+};
+
+static const float ff_wmavoice_gain_silence[256] = {
+ 0.0000188351, 0.0000249147, 0.0000294447, 0.0000365973,
+ 0.0000423193, 0.0000464916, 0.0000498295, 0.0000525713,
+ 0.0000550747, 0.0000574589, 0.0000596046, 0.0000615120,
+ 0.0000634193, 0.0000649691, 0.0000665188, 0.0000679493,
+ 0.0000692606, 0.0000704527, 0.0000716448, 0.0000728369,
+ 0.0000737906, 0.0000747442, 0.0000755787, 0.0000762939,
+ 0.0000770092, 0.0000778437, 0.0000785589, 0.0000792742,
+ 0.0000799894, 0.0000807047, 0.0000814199, 0.0000822544,
+ 0.0000829697, 0.0000838041, 0.0000845194, 0.0000854731,
+ 0.0000865459, 0.0000876188, 0.0000889301, 0.0000904799,
+ 0.0000923872, 0.0000950098, 0.0000988245, 0.0001032352,
+ 0.0001088381, 0.0001147985, 0.0001225471, 0.0001319647,
+ 0.0001431704, 0.0001568794, 0.0001744032, 0.0001952648,
+ 0.0002206564, 0.0002535582, 0.0002965927, 0.0003464222,
+ 0.0004109144, 0.0004891157, 0.0005909204, 0.0007261038,
+ 0.0008867979, 0.0010721684, 0.0012696981, 0.0015079975,
+ 0.0017461777, 0.0019979477, 0.0022052526, 0.0023679733,
+ 0.0025173426, 0.0026556253, 0.0027927160, 0.0029264688,
+ 0.0030447245, 0.0031807423, 0.0033060312, 0.0034313202,
+ 0.0035454035, 0.0036598444, 0.0037686825, 0.0038731098,
+ 0.0039769411, 0.0040702820, 0.0041661263, 0.0042562485,
+ 0.0043400526, 0.0044249296, 0.0045082569, 0.0045900345,
+ 0.0046693087, 0.0047430992, 0.0048171282, 0.0048881769,
+ 0.0049589872, 0.0050252676, 0.0050880909, 0.0051497221,
+ 0.0052082539, 0.0052671432, 0.0053246021, 0.0053800344,
+ 0.0054348707, 0.0054861307, 0.0055367947, 0.0055862665,
+ 0.0056355000, 0.0056805611, 0.0057252645, 0.0057705641,
+ 0.0058110952, 0.0058538914, 0.0058966875, 0.0059366226,
+ 0.0059723854, 0.0060091019, 0.0060437918, 0.0060794353,
+ 0.0061159134, 0.0061485767, 0.0061824322, 0.0062153339,
+ 0.0062497854, 0.0062820911, 0.0063197613, 0.0063550472,
+ 0.0063927174, 0.0064336061, 0.0064769983, 0.0065194368,
+ 0.0065603256, 0.0066006184, 0.0066410303, 0.0066826344,
+ 0.0067234039, 0.0067654848, 0.0068060160, 0.0068466663,
+ 0.0068866014, 0.0069231987, 0.0069609880, 0.0069983006,
+ 0.0070366859, 0.0070750713, 0.0071122646, 0.0071535110,
+ 0.0071973801, 0.0072410107, 0.0072846413, 0.0073343515,
+ 0.0073832273, 0.0074360371, 0.0074878931, 0.0075426102,
+ 0.0076007843, 0.0076560974, 0.0077134371, 0.0077683926,
+ 0.0078265667, 0.0078855753, 0.0079488754, 0.0080170631,
+ 0.0080827475, 0.0081528425, 0.0082212687, 0.0082877874,
+ 0.0083510876, 0.0084129572, 0.0084775686, 0.0085455179,
+ 0.0086110830, 0.0086781979, 0.0087503195, 0.0088242292,
+ 0.0089002848, 0.0089734793, 0.0090423822, 0.0091133118,
+ 0.0091816187, 0.0092473030, 0.0093164444, 0.0093911886,
+ 0.0094678402, 0.0095427036, 0.0096175671, 0.0096931458,
+ 0.0097666979, 0.0098397732, 0.0099166632, 0.0099946260,
+ 0.0100749731, 0.0101612806, 0.0102528334, 0.0103493929,
+ 0.0104434490, 0.0105448961, 0.0106583834, 0.0107737780,
+ 0.0108981133, 0.0110142231, 0.0111318827, 0.0112472773,
+ 0.0113576651, 0.0114786625, 0.0116028786, 0.0117331743,
+ 0.0118676424, 0.0120122433, 0.0121580362, 0.0123010874,
+ 0.0124633312, 0.0126402378, 0.0128232241, 0.0130140781,
+ 0.0132108927, 0.0134289265, 0.0136625767, 0.0138912201,
+ 0.0141364336, 0.0144006014, 0.0146615505, 0.0149335861,
+ 0.0152134895, 0.0155050755, 0.0158376694, 0.0162067413,
+ 0.0165973902, 0.0169926882, 0.0174319744, 0.0179271698,
+ 0.0184448957, 0.0190744400, 0.0197248459, 0.0204203129,
+ 0.0212460756, 0.0221523046, 0.0231562853, 0.0243031979,
+ 0.0256397724, 0.0271918774, 0.0289602280, 0.0310072899,
+ 0.0333702564, 0.0363805294, 0.0401413441, 0.0443998575,
+ 0.0498176813, 0.0562580824, 0.0640066862, 0.0732775927,
+ 0.0836604834, 0.0962959528, 0.1122496128, 0.1335854530,
+ 0.1608980894, 0.1990102530, 0.2616490126, 0.3926030397
+};
+
+static const float ff_wmavoice_gain_universal[64] = {
+ 0.0000000000, 0.0000000000, 0.0000015497, 0.0000015497,
+ 0.0000095367, 0.0000164509, 0.0000379086, 0.0000494719,
+ 0.0000799894, 0.0001058578, 0.0001349449, 0.0001627207,
+ 0.0001972914, 0.0002325773, 0.0002671480, 0.0003106594,
+ 0.0003589392, 0.0004127026, 0.0004582405, 0.0005071163,
+ 0.0005759001, 0.0006588697, 0.0007554293, 0.0008602142,
+ 0.0009772778, 0.0011068583, 0.0012603998, 0.0013889074,
+ 0.0015437603, 0.0016924143, 0.0018980503, 0.0021264553,
+ 0.0023632050, 0.0025693178, 0.0028522015, 0.0031896830,
+ 0.0034654140, 0.0037885904, 0.0041683912, 0.0046081543,
+ 0.0050576925, 0.0055632591, 0.0061818361, 0.0068151951,
+ 0.0073953867, 0.0081818104, 0.0091186762, 0.0102789402,
+ 0.0119919777, 0.0134155750, 0.0154829025, 0.0173798800,
+ 0.0199711323, 0.0229473114, 0.0268185139, 0.0319474936,
+ 0.0393068790, 0.0460114479, 0.0523469448, 0.0637906790,
+ 0.0845471621, 0.1105458736, 0.1499300003, 0.2219169140
+};
+
+static const float ff_wmavoice_gain_codebook_acb[128] = {
+ 0.05, 0.14, 0.16, 0.05, 0.17, 0.25, 0.07, 0.21,
+ 0.12, 0.22, 0.23, 0.13, 0.24, 0.32, 0.14, 0.29,
+ 0.31, 0.41, 0.43, 0.32, 0.43, 0.51, 0.34, 0.48,
+ 0.38, 0.47, 0.49, 0.38, 0.49, 0.57, 0.40, 0.54,
+ 0.49, 0.59, 0.61, 0.50, 0.61, 0.69, 0.52, 0.66,
+ 0.56, 0.65, 0.67, 0.56, 0.67, 0.75, 0.58, 0.72,
+ 0.65, 0.74, 0.76, 0.65, 0.76, 0.84, 0.67, 0.81,
+ 0.71, 0.80, 0.82, 0.71, 0.82, 0.90, 0.73, 0.87,
+ 0.81, 0.90, 0.92, 0.81, 0.93, 1.01, 0.83, 0.97,
+ 0.87, 0.96, 0.98, 0.87, 0.98, 1.06, 0.89, 1.03,
+ 0.92, 1.02, 1.04, 0.93, 1.04, 1.12, 0.95, 1.09,
+ 0.93, 1.02, 1.04, 0.93, 1.04, 1.12, 0.95, 1.09,
+ 0.94, 1.04, 1.05, 0.10, 1.06, 1.14, 0.96, 1.11,
+ 0.98, 1.08, 1.10, 0.99, 1.10, 1.18, 1.01, 1.15,
+ 1.06, 1.15, 1.17, 1.06, 1.17, 1.25, 1.08, 1.22,
+ 1.16, 1.25, 1.27, 1.16, 1.28, 1.36, 1.18, 1.32
+};
+
+static const float ff_wmavoice_gain_codebook_fcb[128] = {
+ 0.430, 0.541, 0.858, 0.905, 1.379, 1.459, 2.046, 3.561,
+ 0.185, 0.296, 0.613, 0.660, 1.134, 1.215, 1.801, 3.316,
+ 0.257, 0.368, 0.686, 0.732, 1.207, 1.287, 1.874, 3.388,
+ 0.478, 0.588, 0.906, 0.952, 1.427, 1.507, 2.094, 3.608,
+ 0.779, 0.890, 1.207, 1.253, 1.728, 1.808, 2.395, 3.909,
+ 0.249, 0.360, 0.677, 0.724, 1.198, 1.279, 1.865, 3.380,
+ 0.547, 0.658, 0.975, 1.022, 1.496, 1.577, 2.163, 3.678,
+ 0.331, 0.442, 0.759, 0.806, 1.280, 1.361, 1.947, 3.462,
+ 0.583, 0.694, 1.011, 1.057, 1.532, 1.612, 2.199, 3.713,
+ 0.384, 0.495, 0.812, 0.859, 1.333, 1.414, 2.000, 3.515,
+ 0.785, 0.896, 1.213, 1.260, 1.734, 1.815, 2.401, 3.916,
+ 1.928, 2.039, 2.356, 2.403, 2.877, 2.957, 3.544, 5.059,
+ 0.214, 0.325, 0.642, 0.005, 1.163, 1.244, 1.830, 3.345,
+ 0.599, 0.710, 1.027, 1.074, 1.548, 1.629, 2.215, 3.730,
+ 0.412, 0.523, 0.840, 0.887, 1.362, 1.442, 2.029, 3.543,
+ 0.910, 1.021, 1.338, 1.384, 1.859, 1.939, 2.526, 4.040
+};
+
+static const float ff_wmavoice_ipol1_coeffs[8][17] = {
+ { -0.0018155784, 0.0051400312, -0.0126258885, 0.0268154419,
+ -0.0517020743, 0.0961942221, -0.1921164688, 0.6285545824,
+ 0.6308171151, -0.1921342459, 0.0960653644, -0.0515680681,
+ 0.0267091128, -0.0125539196, 0.0050976076, -0.0017920607,
+ 0.0006907531 },
+ { -0.0030119629, 0.0071403184, -0.0157934162, 0.0309953480,
+ -0.0557823736, 0.0969368290, -0.1782128509, 0.4801855979,
+ 0.7613050340, -0.1786532696, 0.0803771760, -0.0389267015,
+ 0.0177022810, -0.0068173436, 0.0018546581, -0.0000857157,
+ -0.0004282868 },
+ { -0.0036417283, 0.0078486321, -0.0163685936, 0.0304777338,
+ -0.0519338618, 0.0847979258, -0.1436148431, 0.3262237605,
+ 0.8632577061, -0.1341681625, 0.0500416081, -0.0185848991,
+ 0.0046363524, 0.0009580161, -0.0023221741, 0.0019657183,
+ -0.0015539061 },
+ { -0.0037196307, 0.0073876535, -0.0146595868, 0.0259542684,
+ -0.0416534986, 0.0630142610, -0.0958572026, 0.1784339990,
+ 0.9280143976, -0.0575229186, 0.0072485465, 0.0074699190,
+ -0.0110662053, 0.0098749646, -0.0069331308, 0.0041159806,
+ -0.0025635813 },
+ { -0.0033188616, 0.0060192454, -0.0112465904, 0.0185749526,
+ -0.0271167825, 0.0356589290, -0.0428523305, 0.0472882274,
+ 0.9499985575, 0.0492091286, -0.0437018941, 0.0361179407,
+ -0.0273700613, 0.0187084037, -0.0113109085, 0.0060465694,
+ -0.0033285026 },
+ { -0.0025490071, 0.0040823850, -0.0068592466, 0.0097293532,
+ -0.0108041526, 0.0070230183, 0.0080115446, -0.0589959878,
+ 0.9273047447, 0.1806929555, -0.0966834794, 0.0634181346,
+ -0.0418578978, 0.0260526291, -0.0147021576, 0.0074030068,
+ -0.0037224069 },
+ { -0.0015364708, 0.0019313511, -0.0022503408, 0.0008217385,
+ 0.0048708571, -0.0189622506, 0.0506337392, -0.1351341452,
+ 0.8618999123, 0.3286687729, -0.1442930843, 0.0850781347,
+ -0.0520511451, 0.0305201071, -0.0163786146, 0.0078470460,
+ -0.0036361245 },
+ { -0.0004100171, -0.0001162733, 0.0019149571, -0.0069270437,
+ 0.0178811825, -0.0391932014, 0.0807464118, -0.1791058179,
+ 0.7594153284, 0.4826357064, -0.1786170151, 0.0970333587,
+ -0.0557823028, 0.0309665180, -0.0157635096, 0.0071185785,
+ -0.0029972247 },
+};
+
+static const float ff_wmavoice_ipol2_coeffs[3][16] = {
+ { -0.0276240534, 0.0251942366, -0.0160592399, 0.0055688801,
+ -0.0029313546, 0.0200064587, -0.0758505310, 0.2648358640,
+ 0.8563459515, -0.1360490318, 0.0410402636, -0.0081391358,
+ 0.0025864919, -0.0104795941, 0.0212381664, -0.0273968070 },
+ { -0.0392575669, 0.0331059131, -0.0187493577, 0.0053062555,
+ -0.0068223253, 0.0412485781, -0.1434589471, 0.5888634918,
+ 0.5888634918, -0.1434589471, 0.0412485781, -0.0068223253,
+ 0.0053062555, -0.0187493577, 0.0331059131, -0.0392575669 },
+ { -0.0273968070, 0.0212381664, -0.0104795941, 0.0025864919,
+ -0.0081391358, 0.0410402636, -0.1360490318, 0.8563459515,
+ 0.2648358640, -0.0758505310, 0.0200064587, -0.0029313546,
+ 0.0055688801, -0.0160592399, 0.0251942366, -0.0276240534 },
+};
+
+#endif /* AVCODEC_WMAVOICE_DATA_H */
Index: ffmpeg-svn/Changelog
===================================================================
--- ffmpeg-svn.orig/Changelog 2010-01-11 12:01:18.000000000 -0500
+++ ffmpeg-svn/Changelog 2010-01-19 19:27:47.000000000 -0500
@@ -49,6 +49,7 @@
- Auravision Aura 1 and 2 decoders
- Deluxe Paint Animation playback system
- SIPR decoding for modes 8k5, 6k5 and 5k0
+- WMAVoice decoder
Index: ffmpeg-svn/MAINTAINERS
===================================================================
--- ffmpeg-svn.orig/MAINTAINERS 2010-01-11 12:01:18.000000000 -0500
+++ ffmpeg-svn/MAINTAINERS 2010-01-19 19:24:41.000000000 -0500
@@ -205,6 +205,7 @@
vqavideo.c Mike Melanson
wavpack.c Kostya Shishkov
wmaprodec.c Sascha Sommer
+ wmavoice.c Ronald S. Bultje
wmv2.c Michael Niedermayer
wnv1.c Kostya Shishkov
xan.c Mike Melanson
Index: ffmpeg-svn/doc/general.texi
===================================================================
--- ffmpeg-svn.orig/doc/general.texi 2010-01-19 19:27:03.000000000 -0500
+++ ffmpeg-svn/doc/general.texi 2010-01-19 19:27:25.000000000 -0500
@@ -641,6 +641,7 @@
@item Windows Media Audio 1 @tab X @tab X
@item Windows Media Audio 2 @tab X @tab X
@item Windows Media Audio Pro @tab @tab X
+ at item Windows Media Audio Voice @tab @tab X
@end multitable
@code{X} means that encoding (resp. decoding) is supported.
More information about the ffmpeg-devel
mailing list