annotate g729dec.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents 8a4984c5cacc
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
1 /*
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
2 * G.729 decoder
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
3 * Copyright (c) 2008 Vladimir Voroshilov
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
4 *
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
5 * This file is part of FFmpeg.
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
6 *
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
11 *
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
15 * Lesser General Public License for more details.
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
16 *
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
20 */
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
21 #include <stdlib.h>
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
22 #include <inttypes.h>
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
23 #include <limits.h>
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
24 #include <stdio.h>
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
25 #include <string.h>
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
26 #include <math.h>
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
27 #include <assert.h>
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
28
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
29 #include "avcodec.h"
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
30 #include "libavutil/avutil.h"
9428
0dce4fe6e6f3 Rename bitstream.h to get_bits.h.
stefano
parents: 8048
diff changeset
31 #include "get_bits.h"
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
32
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
33 #include "g729.h"
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
34 #include "lsp.h"
8048
ecb1962c12f3 Rename acelp_math.[ch] to celp_math.[ch] to prepare for QCELP decoder merge.
diego
parents: 7872
diff changeset
35 #include "celp_math.h"
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
36 #include "acelp_filters.h"
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
37 #include "acelp_pitch_delay.h"
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
38 #include "acelp_vectors.h"
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
39 #include "g729data.h"
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
40
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
41 /**
7668
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
42 * minimum quantized LSF value (3.2.4)
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
43 * 0.005 in Q13
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
44 */
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
45 #define LSFQ_MIN 40
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
46
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
47 /**
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
48 * maximum quantized LSF value (3.2.4)
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
49 * 3.135 in Q13
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
50 */
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
51 #define LSFQ_MAX 25681
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
52
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
53 /**
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
54 * minimum LSF distance (3.2.4)
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
55 * 0.0391 in Q13
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
56 */
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
57 #define LSFQ_DIFF_MIN 321
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
58
bdb1bdcd4cd0 Move from g729.h all definitions which are used only in g729dec.c
voroshil
parents: 7597
diff changeset
59 /**
7693
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
60 * minimum gain pitch value (3.8, Equation 47)
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
61 * 0.2 in (1.14)
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
62 */
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
63 #define SHARP_MIN 3277
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
64
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
65 /**
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
66 * maximum gain pitch value (3.8, Equation 47)
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
67 * (EE) This does not comply with the specification.
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
68 * Specification says about 0.8, which should be
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
69 * 13107 in (1.14), but reference C code uses
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
70 * 13017 (equals to 0.7945) instead of it.
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
71 */
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
72 #define SHARP_MAX 13017
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
73
9824
7679262f1459 K&R formatting of already submitted G.729 code
voroshil
parents: 9823
diff changeset
74 typedef struct {
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
75 uint8_t ac_index_bits[2]; ///< adaptive codebook index for second subframe (size in bits)
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
76 uint8_t parity_bit; ///< parity bit for pitch delay
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
77 uint8_t gc_1st_index_bits; ///< gain codebook (first stage) index (size in bits)
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
78 uint8_t gc_2nd_index_bits; ///< gain codebook (second stage) index (size in bits)
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
79 uint8_t fc_signs_bits; ///< number of pulses in fixed-codebook vector
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
80 uint8_t fc_indexes_bits; ///< size (in bits) of fixed-codebook index entry
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
81 } G729FormatDescription;
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
82
9876
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
83 typedef struct {
9888
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
84 int pitch_delay_int_prev; ///< integer part of previous subframe's pitch delay (4.1.3)
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
85
9884
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
86 /// (2.13) LSP quantizer outputs
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
87 int16_t past_quantizer_output_buf[MA_NP + 1][10];
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
88 int16_t* past_quantizer_outputs[MA_NP + 1];
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
89
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
90 int16_t lsfq[10]; ///< (2.13) quantized LSF coefficients from previous frame
9876
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
91 int16_t lsp_buf[2][10]; ///< (0.15) LSP coefficients (previous and current frames) (3.2.5)
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
92 int16_t *lsp[2]; ///< pointers to lsp_buf
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
93 } G729Context;
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
94
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
95 static const G729FormatDescription format_g729_8k = {
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
96 .ac_index_bits = {8,5},
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
97 .parity_bit = 1,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
98 .gc_1st_index_bits = GC_1ST_IDX_BITS_8K,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
99 .gc_2nd_index_bits = GC_2ND_IDX_BITS_8K,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
100 .fc_signs_bits = 4,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
101 .fc_indexes_bits = 13,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
102 };
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
103
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
104 static const G729FormatDescription format_g729d_6k4 = {
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
105 .ac_index_bits = {8,4},
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
106 .parity_bit = 0,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
107 .gc_1st_index_bits = GC_1ST_IDX_BITS_6K4,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
108 .gc_2nd_index_bits = GC_2ND_IDX_BITS_6K4,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
109 .fc_signs_bits = 2,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
110 .fc_indexes_bits = 9,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
111 };
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
112
7693
dc309e45a671 Another set of definitions for G.729
voroshil
parents: 7668
diff changeset
113 /**
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
114 * \brief pseudo random number generator
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
115 */
9820
b72fbafc9408 Internal routine should not use name of standard function.
voroshil
parents: 9819
diff changeset
116 static inline uint16_t g729_prng(uint16_t value)
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
117 {
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
118 return 31821 * value + 13849;
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
119 }
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
120
7773
272a13ae94c0 Parity bit calculation routine for G.729
voroshil
parents: 7693
diff changeset
121 /**
272a13ae94c0 Parity bit calculation routine for G.729
voroshil
parents: 7693
diff changeset
122 * Get parity bit of bit 2..7
272a13ae94c0 Parity bit calculation routine for G.729
voroshil
parents: 7693
diff changeset
123 */
9819
fbc565735c4d Remove ff_g729_ and g729_ prefixes from static routines.
voroshil
parents: 9428
diff changeset
124 static inline int get_parity(uint8_t value)
7773
272a13ae94c0 Parity bit calculation routine for G.729
voroshil
parents: 7693
diff changeset
125 {
272a13ae94c0 Parity bit calculation routine for G.729
voroshil
parents: 7693
diff changeset
126 return (0x6996966996696996ULL >> (value >> 2)) & 1;
272a13ae94c0 Parity bit calculation routine for G.729
voroshil
parents: 7693
diff changeset
127 }
272a13ae94c0 Parity bit calculation routine for G.729
voroshil
parents: 7693
diff changeset
128
9884
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
129 static void lsf_decode(int16_t* lsfq, int16_t* past_quantizer_outputs[MA_NP + 1],
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
130 int16_t ma_predictor,
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
131 int16_t vq_1st, int16_t vq_2nd_low, int16_t vq_2nd_high)
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
132 {
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
133 int i,j;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
134 static const uint8_t min_distance[2]={10, 5}; //(2.13)
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
135 int16_t* quantizer_output = past_quantizer_outputs[MA_NP];
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
136
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
137 for (i = 0; i < 5; i++) {
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
138 quantizer_output[i] = cb_lsp_1st[vq_1st][i ] + cb_lsp_2nd[vq_2nd_low ][i ];
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
139 quantizer_output[i + 5] = cb_lsp_1st[vq_1st][i + 5] + cb_lsp_2nd[vq_2nd_high][i + 5];
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
140 }
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
141
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
142 for (j = 0; j < 2; j++) {
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
143 for (i = 1; i < 10; i++) {
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
144 int diff = (quantizer_output[i - 1] - quantizer_output[i] + min_distance[j]) >> 1;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
145 if (diff > 0) {
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
146 quantizer_output[i - 1] -= diff;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
147 quantizer_output[i ] += diff;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
148 }
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
149 }
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
150 }
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
151
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
152 for (i = 0; i < 10; i++) {
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
153 int sum = quantizer_output[i] * cb_ma_predictor_sum[ma_predictor][i];
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
154 for (j = 0; j < MA_NP; j++)
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
155 sum += past_quantizer_outputs[j][i] * cb_ma_predictor[ma_predictor][j][i];
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
156
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
157 lsfq[i] = sum >> 15;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
158 }
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
159
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
160 /* Rotate past_quantizer_outputs. */
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
161 memmove(past_quantizer_outputs + 1, past_quantizer_outputs, MA_NP * sizeof(int16_t*));
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
162 past_quantizer_outputs[0] = quantizer_output;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
163
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
164 ff_acelp_reorder_lsf(lsfq, LSFQ_DIFF_MIN, LSFQ_MIN, LSFQ_MAX, 10);
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
165 }
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
166
9853
ae38e13a63d6 G.729 decoder initialization routine (skeleton)
voroshil
parents: 9852
diff changeset
167 static av_cold int decoder_init(AVCodecContext * avctx)
ae38e13a63d6 G.729 decoder initialization routine (skeleton)
voroshil
parents: 9852
diff changeset
168 {
9884
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
169 G729Context* ctx = avctx->priv_data;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
170 int i,k;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
171
9824
7679262f1459 K&R formatting of already submitted G.729 code
voroshil
parents: 9823
diff changeset
172 if (avctx->channels != 1) {
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
173 av_log(avctx, AV_LOG_ERROR, "Only mono sound is supported (requested channels: %d).\n", avctx->channels);
11507
25e209f9153a Make g729dec.c:decoder_init() return AVERROR(EINVAL) rather than
stefano
parents: 9888
diff changeset
174 return AVERROR(EINVAL);
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
175 }
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
176
9853
ae38e13a63d6 G.729 decoder initialization routine (skeleton)
voroshil
parents: 9852
diff changeset
177 /* Both 8kbit/s and 6.4kbit/s modes uses two subframes per frame. */
ae38e13a63d6 G.729 decoder initialization routine (skeleton)
voroshil
parents: 9852
diff changeset
178 avctx->frame_size = SUBFRAME_SIZE << 1;
ae38e13a63d6 G.729 decoder initialization routine (skeleton)
voroshil
parents: 9852
diff changeset
179
9884
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
180 for (k = 0; k < MA_NP + 1; k++) {
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
181 ctx->past_quantizer_outputs[k] = ctx->past_quantizer_output_buf[k];
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
182 for (i = 1; i < 11; i++)
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
183 ctx->past_quantizer_outputs[k][i - 1] = (18717 * i) >> 3;
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
184 }
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
185
9876
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
186 ctx->lsp[0] = ctx->lsp_buf[0];
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
187 ctx->lsp[1] = ctx->lsp_buf[1];
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
188 memcpy(ctx->lsp[0], lsp_init, 10 * sizeof(int16_t));
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
189
9853
ae38e13a63d6 G.729 decoder initialization routine (skeleton)
voroshil
parents: 9852
diff changeset
190 return 0;
ae38e13a63d6 G.729 decoder initialization routine (skeleton)
voroshil
parents: 9852
diff changeset
191 }
ae38e13a63d6 G.729 decoder initialization routine (skeleton)
voroshil
parents: 9852
diff changeset
192
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
193 static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
194 AVPacket *avpkt)
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
195 {
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
196 const uint8_t *buf = avpkt->data;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
197 int buf_size = avpkt->size;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
198 int16_t *out_frame = data;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
199 GetBitContext gb;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
200 G729FormatDescription format;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
201 int frame_erasure = 0; ///< frame erasure detected during decoding
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
202 int bad_pitch = 0; ///< parity check failed
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
203 int i;
9876
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
204 G729Context *ctx = avctx->priv_data;
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
205 int16_t lp[2][11]; // (3.12)
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
206 uint8_t ma_predictor; ///< switched MA predictor of LSP quantizer
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
207 uint8_t quantizer_1st; ///< first stage vector of quantizer
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
208 uint8_t quantizer_2nd_lo; ///< second stage lower vector of quantizer (size in bits)
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
209 uint8_t quantizer_2nd_hi; ///< second stage higher vector of quantizer (size in bits)
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
210
9888
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
211 int pitch_delay_int; // pitch delay, integer part
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
212 int pitch_delay_3x; // pitch delay, multiplied by 3
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
213
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
214 if (*data_size < SUBFRAME_SIZE << 2) {
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
215 av_log(avctx, AV_LOG_ERROR, "Error processing packet: output buffer too small\n");
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
216 return AVERROR(EIO);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
217 }
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
218
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
219 if (buf_size == 10) {
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
220 format = format_g729_8k;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
221 av_log(avctx, AV_LOG_DEBUG, "Packet type: %s\n", "G.729 @ 8kbit/s");
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
222 } else if (buf_size == 8) {
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
223 format = format_g729d_6k4;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
224 av_log(avctx, AV_LOG_DEBUG, "Packet type: %s\n", "G.729D @ 6.4kbit/s");
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
225 } else {
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
226 av_log(avctx, AV_LOG_ERROR, "Packet size %d is unknown.\n", buf_size);
11525
892d04e7c4e5 Make g729dec.c:decode_frame() return AVERROR_INVALIDDATA rather than
stefano
parents: 11507
diff changeset
227 return AVERROR_INVALIDDATA;
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
228 }
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
229
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
230 for (i=0; i < buf_size; i++)
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
231 frame_erasure |= buf[i];
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
232 frame_erasure = !frame_erasure;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
233
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
234 init_get_bits(&gb, buf, buf_size);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
235
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
236 ma_predictor = get_bits(&gb, 1);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
237 quantizer_1st = get_bits(&gb, VQ_1ST_BITS);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
238 quantizer_2nd_lo = get_bits(&gb, VQ_2ND_BITS);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
239 quantizer_2nd_hi = get_bits(&gb, VQ_2ND_BITS);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
240
9884
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
241 lsf_decode(ctx->lsfq, ctx->past_quantizer_outputs,
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
242 ma_predictor,
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
243 quantizer_1st, quantizer_2nd_lo, quantizer_2nd_hi);
c2da2b1e1a12 LSF (Line Spectral Frequencies) decoding routine.
voroshil
parents: 9876
diff changeset
244
9876
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
245 ff_acelp_lsf2lsp(ctx->lsp[1], ctx->lsfq, 10);
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
246
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
247 ff_acelp_lp_decode(&lp[0][0], &lp[1][0], ctx->lsp[1], ctx->lsp[0], 10);
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
248
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
249 FFSWAP(int16_t*, ctx->lsp[1], ctx->lsp[0]);
2719d29359c6 Convertion of LSF values to coefficients of linear prediction filter
voroshil
parents: 9865
diff changeset
250
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
251 for (i = 0; i < 2; i++) {
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
252 uint8_t ac_index; ///< adaptive codebook index
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
253 uint8_t pulses_signs; ///< fixed-codebook vector pulse signs
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
254 int fc_indexes; ///< fixed-codebook indexes
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
255 uint8_t gc_1st_index; ///< gain codebook (first stage) index
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
256 uint8_t gc_2nd_index; ///< gain codebook (second stage) index
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
257
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
258 ac_index = get_bits(&gb, format.ac_index_bits[i]);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
259 if(!i && format.parity_bit)
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
260 bad_pitch = get_parity(ac_index) == get_bits1(&gb);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
261 fc_indexes = get_bits(&gb, format.fc_indexes_bits);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
262 pulses_signs = get_bits(&gb, format.fc_signs_bits);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
263 gc_1st_index = get_bits(&gb, format.gc_1st_index_bits);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
264 gc_2nd_index = get_bits(&gb, format.gc_2nd_index_bits);
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
265
9888
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
266 if(!i) {
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
267 if (bad_pitch)
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
268 pitch_delay_3x = 3 * ctx->pitch_delay_int_prev;
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
269 else
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
270 pitch_delay_3x = ff_acelp_decode_8bit_to_1st_delay3(ac_index);
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
271 } else {
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
272 int pitch_delay_min = av_clip(ctx->pitch_delay_int_prev - 5,
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
273 PITCH_DELAY_MIN, PITCH_DELAY_MAX - 9);
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
274
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
275 if(packet_type == FORMAT_G729D_6K4)
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
276 pitch_delay_3x = ff_acelp_decode_4bit_to_2nd_delay3(ac_index, pitch_delay_min);
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
277 else
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
278 pitch_delay_3x = ff_acelp_decode_5_6_bit_to_2nd_delay3(ac_index, pitch_delay_min);
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
279 }
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
280
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
281 /* Round pitch delay to nearest (used everywhere except ff_acelp_interpolate). */
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
282 pitch_delay_int = (pitch_delay_3x + 1) / 3;
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
283
9887
b584c223a6a1 Replace pitch_delay_int array with single variable.
voroshil
parents: 9884
diff changeset
284 ff_acelp_weighted_vector_sum(fc + pitch_delay_int,
b584c223a6a1 Replace pitch_delay_int array with single variable.
voroshil
parents: 9884
diff changeset
285 fc + pitch_delay_int,
9824
7679262f1459 K&R formatting of already submitted G.729 code
voroshil
parents: 9823
diff changeset
286 fc, 1 << 14,
7679262f1459 K&R formatting of already submitted G.729 code
voroshil
parents: 9823
diff changeset
287 av_clip(ctx->gain_pitch, SHARP_MIN, SHARP_MAX),
7679262f1459 K&R formatting of already submitted G.729 code
voroshil
parents: 9823
diff changeset
288 0, 14,
9887
b584c223a6a1 Replace pitch_delay_int array with single variable.
voroshil
parents: 9884
diff changeset
289 SUBFRAME_SIZE - pitch_delay_int);
7780
b35486af268e Another set of approved G.729 chunks (from decoder core)
voroshil
parents: 7773
diff changeset
290
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
291 if (frame_erasure) {
9824
7679262f1459 K&R formatting of already submitted G.729 code
voroshil
parents: 9823
diff changeset
292 ctx->gain_pitch = (29491 * ctx->gain_pitch) >> 15; // 0.90 (0.15)
7679262f1459 K&R formatting of already submitted G.729 code
voroshil
parents: 9823
diff changeset
293 ctx->gain_code = ( 2007 * ctx->gain_code ) >> 11; // 0.98 (0.11)
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
294
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
295 gain_corr_factor = 0;
9824
7679262f1459 K&R formatting of already submitted G.729 code
voroshil
parents: 9823
diff changeset
296 } else {
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
297 ctx->gain_pitch = cb_gain_1st_8k[gc_1st_index][0] +
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
298 cb_gain_2nd_8k[gc_2nd_index][0];
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
299 gain_corr_factor = cb_gain_1st_8k[gc_1st_index][1] +
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
300 cb_gain_2nd_8k[gc_2nd_index][1];
7780
b35486af268e Another set of approved G.729 chunks (from decoder core)
voroshil
parents: 7773
diff changeset
301
9852
af3cc583501e Replace MAX_SUBFRAME_SIZE and ctx->subframe_size with SUBFRAME_SIZE,
voroshil
parents: 9824
diff changeset
302 ff_acelp_weighted_vector_sum(ctx->exc + i * SUBFRAME_SIZE,
af3cc583501e Replace MAX_SUBFRAME_SIZE and ctx->subframe_size with SUBFRAME_SIZE,
voroshil
parents: 9824
diff changeset
303 ctx->exc + i * SUBFRAME_SIZE, fc,
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
304 (!voicing && frame_erasure) ? 0 : ctx->gain_pitch,
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
305 ( voicing && frame_erasure) ? 0 : ctx->gain_code,
9852
af3cc583501e Replace MAX_SUBFRAME_SIZE and ctx->subframe_size with SUBFRAME_SIZE,
voroshil
parents: 9824
diff changeset
306 1 << 13, 14, SUBFRAME_SIZE);
9888
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
307
62705926ba33 Pitch delay decoding
voroshil
parents: 9887
diff changeset
308 ctx->pitch_delay_int_prev = pitch_delay_int;
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
309 }
7780
b35486af268e Another set of approved G.729 chunks (from decoder core)
voroshil
parents: 7773
diff changeset
310
9865
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
311 *data_size = SUBFRAME_SIZE << 2;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
312 return buf_size;
498ceea90017 G.729 decoding routine (skeleton, including parameters decoding).
voroshil
parents: 9853
diff changeset
313 }
7872
18d5d203ba0c Another set of approved changes for G.729: includes, formats structure,
voroshil
parents: 7802
diff changeset
314
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
315 AVCodec g729_decoder =
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
316 {
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
317 "g729",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 11525
diff changeset
318 AVMEDIA_TYPE_AUDIO,
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
319 CODEC_ID_G729,
9823
4a5f2453973d Convert structure names to FFmpeg style
voroshil
parents: 9820
diff changeset
320 sizeof(G729Context),
9819
fbc565735c4d Remove ff_g729_ and g729_ prefixes from static routines.
voroshil
parents: 9428
diff changeset
321 decoder_init,
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
322 NULL,
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
323 NULL,
9819
fbc565735c4d Remove ff_g729_ and g729_ prefixes from static routines.
voroshil
parents: 9428
diff changeset
324 decode_frame,
7597
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
325 .long_name = NULL_IF_CONFIG_SMALL("G.729"),
7060f0338be3 G.729 decoder main code
voroshil
parents:
diff changeset
326 };