annotate amr.c @ 3454:de0ed6497a13 libavcodec

remove STATS code (probably hasnt been used for years ..., and its not completely clear what it was good for anyway)
author michael
date Sun, 09 Jul 2006 10:33:49 +0000
parents 0b546eab515d
children 444bd402aebe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
1 /*
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
2 * AMR Audio decoder stub
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
3 * Copyright (c) 2003 the ffmpeg project
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
4 *
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
9 *
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
13 * Lesser General Public License for more details.
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
14 *
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
3036
0b546eab515d Update licensing information: The FSF changed postal address.
diego
parents: 2979
diff changeset
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
18 */
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
19 /*
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
20 This code implements amr-nb and amr-wb audio encoder/decoder through external reference
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
21 code from www.3gpp.org. The licence of the code from 3gpp is unclear so you
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
22 have to download the code separately. Two versions exists: One fixed-point
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
23 and one with floats. For some reason the float-encoder is significant faster
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
24 atleast on a P4 1.5GHz (0.9s instead of 9.9s on a 30s audio clip at MR102).
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
25 Both float and fixed point is supported for amr-nb, but only float for
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
26 amr-wb.
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
27
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
28 --AMR-NB--
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
29 The fixed-point (TS26.073) can be downloaded from:
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
30 http://www.3gpp.org/ftp/Specs/archive/26_series/26.073/26073-510.zip
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
31 Extract the soure into ffmpeg/libavcodec/amr
1736
ff0b3acd5b22 something unimportant ...
michael
parents: 1486
diff changeset
32 To use the fixed version run "./configure" with "--enable-amr_nb-fixed"
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
33
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
34 The float version (default) can be downloaded from:
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
35 http://www.3gpp.org/ftp/Specs/archive/26_series/26.104/26104-510.zip
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
36 Extract the soure into ffmpeg/libavcodec/amr_float
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
37
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
38 The specification for amr-nb can be found in TS 26.071
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
39 (http://www.3gpp.org/ftp/Specs/html-info/26071.htm) and some other
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
40 info at http://www.3gpp.org/ftp/Specs/html-info/26-series.htm
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
41
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
42 --AMR-WB--
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
43 The reference code can be downloaded from:
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
44 http://www.3gpp.org/ftp/Specs/archive/26_series/26.204/26204-510.zip
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
45 It should be extracted to "libavcodec/amrwb_float". Enable it with
1736
ff0b3acd5b22 something unimportant ...
michael
parents: 1486
diff changeset
46 "--enable-amr_wb".
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
47
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
48 The specification for amr-wb can be downloaded from:
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
49 http://www.3gpp.org/ftp/Specs/archive/26_series/26.171/26171-500.zip
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
50
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
51 If someone want to use the fixed point version it can be downloaded
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
52 from: http://www.3gpp.org/ftp/Specs/archive/26_series/26.173/26173-571.zip
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
53
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
54 */
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
55
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
56 #include "avcodec.h"
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
57
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
58 #ifdef AMR_NB_FIXED
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
59
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
60 #define MMS_IO
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
61
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
62 #include "amr/sp_dec.h"
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
63 #include "amr/d_homing.h"
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
64 #include "amr/typedef.h"
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
65 #include "amr/sp_enc.h"
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
66 #include "amr/sid_sync.h"
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
67 #include "amr/e_homing.h"
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
68
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
69 #else
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
70 #include "amr_float/interf_dec.h"
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
71 #include "amr_float/interf_enc.h"
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
72 #endif
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
73
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
74 /* Common code for fixed and float version*/
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
75 typedef struct AMR_bitrates
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
76 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
77 int startrate;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
78 int stoprate;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
79 enum Mode mode;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
80
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
81 } AMR_bitrates;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
82
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
83 /* Match desired bitrate with closest one*/
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
84 static enum Mode getBitrateMode(int bitrate)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
85 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
86 /* Adjusted so that all bitrates can be used from commandline where
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
87 only a multiple of 1000 can be specified*/
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
88 AMR_bitrates rates[]={ {0,4999,MR475}, //4
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
89 {5000,5899,MR515},//5
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
90 {5900,6699,MR59},//6
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
91 {6700,7000,MR67},//7
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
92 {7001,7949,MR74},//8
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
93 {7950,9999,MR795},//9
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
94 {10000,11999,MR102},//10
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
95 {12000,64000,MR122},//12
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
96
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
97 };
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
98 int i;
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
99 for(i=0;i<8;i++)
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
100 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
101 if(rates[i].startrate<=bitrate && rates[i].stoprate>=bitrate)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
102 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
103 return(rates[i].mode);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
104 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
105 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
106 /*Return highest possible*/
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
107 return(MR122);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
108 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
109
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
110 #ifdef AMR_NB_FIXED
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
111 /* fixed point version*/
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
112 /* frame size in serial bitstream file (frame type + serial stream + flags) */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
113 #define SERIAL_FRAMESIZE (1+MAX_SERIAL_SIZE+5)
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
114
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
115 typedef struct AMRContext {
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
116 int frameCount;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
117 Speech_Decode_FrameState *speech_decoder_state;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
118 enum RXFrameType rx_type;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
119 enum Mode mode;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
120 Word16 reset_flag;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
121 Word16 reset_flag_old;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
122
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
123 enum Mode enc_bitrate;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
124 Speech_Encode_FrameState *enstate;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
125 sid_syncState *sidstate;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
126 enum TXFrameType tx_frametype;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
127
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
128
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
129 } AMRContext;
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
130
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
131 static int amr_nb_decode_init(AVCodecContext * avctx)
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
132 {
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
133 AMRContext *s = avctx->priv_data;
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
134 s->frameCount=0;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
135 s->speech_decoder_state=NULL;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
136 s->rx_type = (enum RXFrameType)0;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
137 s->mode= (enum Mode)0;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
138 s->reset_flag=0;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
139 s->reset_flag_old=1;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
140
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
141 if(Speech_Decode_Frame_init(&s->speech_decoder_state, "Decoder"))
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
142 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
143 av_log(avctx, AV_LOG_ERROR, "Speech_Decode_Frame_init error\n");
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
144 return -1;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
145 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
146 return 0;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
147 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
148
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
149 static int amr_nb_encode_init(AVCodecContext * avctx)
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
150 {
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
151 AMRContext *s = avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
152 s->frameCount=0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
153 s->speech_decoder_state=NULL;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
154 s->rx_type = (enum RXFrameType)0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
155 s->mode= (enum Mode)0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
156 s->reset_flag=0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
157 s->reset_flag_old=1;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
158
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
159 if(avctx->sample_rate!=8000)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
160 {
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
161 if(avctx->debug)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
162 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
163 av_log(avctx, AV_LOG_DEBUG, "Only 8000Hz sample rate supported\n");
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
164 }
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
165 return -1;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
166 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
167
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
168 if(avctx->channels!=1)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
169 {
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
170 if(avctx->debug)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
171 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
172 av_log(avctx, AV_LOG_DEBUG, "Only mono supported\n");
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
173 }
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
174 return -1;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
175 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
176
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
177 avctx->frame_size=160;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
178 avctx->coded_frame= avcodec_alloc_frame();
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
179
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
180 if(Speech_Encode_Frame_init(&s->enstate, 0, "encoder") || sid_sync_init (&s->sidstate))
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
181 {
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
182 if(avctx->debug)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
183 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
184 av_log(avctx, AV_LOG_DEBUG, "Speech_Encode_Frame_init error\n");
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
185 }
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
186 return -1;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
187 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
188
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
189 s->enc_bitrate=getBitrateMode(avctx->bit_rate);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
190
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
191 return 0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
192 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
193
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
194 static int amr_nb_encode_close(AVCodecContext * avctx)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
195 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
196 AMRContext *s = avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
197 Speech_Encode_Frame_exit(&s->enstate);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
198 sid_sync_exit (&s->sidstate);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
199 av_freep(&avctx->coded_frame);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
200 return 0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
201 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
202
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
203 static int amr_nb_decode_close(AVCodecContext * avctx)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
204 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
205 AMRContext *s = avctx->priv_data;
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
206 Speech_Decode_Frame_exit(&s->speech_decoder_state);
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
207 return 0;
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
208 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
209
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
210 static int amr_nb_decode_frame(AVCodecContext * avctx,
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
211 void *data, int *data_size,
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
212 uint8_t * buf, int buf_size)
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
213 {
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
214 AMRContext *s = avctx->priv_data;
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
215
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
216 uint8_t*amrData=buf;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
217 int offset=0;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
218
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
219 UWord8 toc, q, ft;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
220
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
221 Word16 serial[SERIAL_FRAMESIZE]; /* coded bits */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
222 Word16 *synth;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
223 UWord8 *packed_bits;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
224
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
225 static Word16 packed_size[16] = {12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0};
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
226 int i;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
227
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
228 //printf("amr_decode_frame data_size=%i buf=0x%X buf_size=%d frameCount=%d!!\n",*data_size,buf,buf_size,s->frameCount);
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
229
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
230 synth=data;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
231
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
232 // while(offset<buf_size)
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
233 {
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
234 toc=amrData[offset];
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
235 /* read rest of the frame based on ToC byte */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
236 q = (toc >> 2) & 0x01;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
237 ft = (toc >> 3) & 0x0F;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
238
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
239 //printf("offset=%d, packet_size=%d amrData= 0x%X %X %X %X\n",offset,packed_size[ft],amrData[offset],amrData[offset+1],amrData[offset+2],amrData[offset+3]);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
240
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
241 offset++;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
242
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
243 packed_bits=amrData+offset;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
244
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
245 offset+=packed_size[ft];
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
246
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
247 //Unsort and unpack bits
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
248 s->rx_type = UnpackBits(q, ft, packed_bits, &s->mode, &serial[1]);
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
249
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
250 //We have a new frame
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
251 s->frameCount++;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
252
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
253 if (s->rx_type == RX_NO_DATA)
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
254 {
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
255 s->mode = s->speech_decoder_state->prev_mode;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
256 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
257 else {
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
258 s->speech_decoder_state->prev_mode = s->mode;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
259 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
260
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
261 /* if homed: check if this frame is another homing frame */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
262 if (s->reset_flag_old == 1)
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
263 {
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
264 /* only check until end of first subframe */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
265 s->reset_flag = decoder_homing_frame_test_first(&serial[1], s->mode);
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
266 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
267 /* produce encoder homing frame if homed & input=decoder homing frame */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
268 if ((s->reset_flag != 0) && (s->reset_flag_old != 0))
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
269 {
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
270 for (i = 0; i < L_FRAME; i++)
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
271 {
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
272 synth[i] = EHF_MASK;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
273 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
274 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
275 else
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
276 {
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
277 /* decode frame */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
278 Speech_Decode_Frame(s->speech_decoder_state, s->mode, &serial[1], s->rx_type, synth);
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
279 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
280
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
281 //Each AMR-frame results in 160 16-bit samples
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
282 *data_size+=160*2;
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
283 synth+=160;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
284
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
285 /* if not homed: check whether current frame is a homing frame */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
286 if (s->reset_flag_old == 0)
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
287 {
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
288 /* check whole frame */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
289 s->reset_flag = decoder_homing_frame_test(&serial[1], s->mode);
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
290 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
291 /* reset decoder if current frame is a homing frame */
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
292 if (s->reset_flag != 0)
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
293 {
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
294 Speech_Decode_Frame_reset(s->speech_decoder_state);
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
295 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
296 s->reset_flag_old = s->reset_flag;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
297
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
298 }
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
299 return offset;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
300 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
301
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
302
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
303 static int amr_nb_encode_frame(AVCodecContext *avctx,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
304 unsigned char *frame/*out*/, int buf_size, void *data/*in*/)
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
305 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
306 short serial_data[250] = {0};
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
307
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
308 AMRContext *s = avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
309 int written;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
310
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
311 s->reset_flag = encoder_homing_frame_test(data);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
312
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
313 Speech_Encode_Frame(s->enstate, s->enc_bitrate, data, &serial_data[1], &s->mode);
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
314
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
315 /* add frame type and mode */
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
316 sid_sync (s->sidstate, s->mode, &s->tx_frametype);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
317
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
318 written = PackBits(s->mode, s->enc_bitrate, s->tx_frametype, &serial_data[1], frame);
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
319
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
320 if (s->reset_flag != 0)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
321 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
322 Speech_Encode_Frame_reset(s->enstate);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
323 sid_sync_reset(s->sidstate);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
324 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
325 return written;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
326 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
327
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
328
2895
8fe1dc88294a Fix some #ifdef to allow building amr_wb alone.
diego
parents: 2571
diff changeset
329 #elif defined(AMR_NB) /* Float point version*/
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
330
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
331 typedef struct AMRContext {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
332 int frameCount;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
333 void * decState;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
334 int *enstate;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
335 enum Mode enc_bitrate;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
336 } AMRContext;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
337
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
338 static int amr_nb_decode_init(AVCodecContext * avctx)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
339 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
340 AMRContext *s = avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
341 s->frameCount=0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
342 s->decState=Decoder_Interface_init();
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
343 if(!s->decState)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
344 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
345 av_log(avctx, AV_LOG_ERROR, "Decoder_Interface_init error\r\n");
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
346 return -1;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
347 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
348 return 0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
349 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
350
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
351 static int amr_nb_encode_init(AVCodecContext * avctx)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
352 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
353 AMRContext *s = avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
354 s->frameCount=0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
355
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
356 if(avctx->sample_rate!=8000)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
357 {
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
358 if(avctx->debug)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
359 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
360 av_log(avctx, AV_LOG_DEBUG, "Only 8000Hz sample rate supported\n");
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
361 }
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
362 return -1;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
363 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
364
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
365 if(avctx->channels!=1)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
366 {
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
367 if(avctx->debug)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
368 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
369 av_log(avctx, AV_LOG_DEBUG, "Only mono supported\n");
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
370 }
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
371 return -1;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
372 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
373
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
374 avctx->frame_size=160;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
375 avctx->coded_frame= avcodec_alloc_frame();
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
376
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
377 s->enstate=Encoder_Interface_init(0);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
378 if(!s->enstate)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
379 {
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
380 if(avctx->debug)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
381 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
382 av_log(avctx, AV_LOG_DEBUG, "Encoder_Interface_init error\n");
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
383 }
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
384 return -1;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
385 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
386
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
387 s->enc_bitrate=getBitrateMode(avctx->bit_rate);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
388
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
389 return 0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
390 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
391
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
392 static int amr_nb_decode_close(AVCodecContext * avctx)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
393 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
394 AMRContext *s = avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
395 Decoder_Interface_exit(s->decState);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
396 return 0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
397 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
398
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
399 static int amr_nb_encode_close(AVCodecContext * avctx)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
400 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
401 AMRContext *s = avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
402 Encoder_Interface_exit(s->enstate);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
403 av_freep(&avctx->coded_frame);
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
404 return 0;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
405 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
406
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
407 static int amr_nb_decode_frame(AVCodecContext * avctx,
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
408 void *data, int *data_size,
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
409 uint8_t * buf, int buf_size)
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
410 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
411 AMRContext *s = (AMRContext*)avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
412
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
413 uint8_t*amrData=buf;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
414 static short block_size[16]={ 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 };
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
415 enum Mode dec_mode;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
416 int packet_size;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
417
2287
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
418 /* av_log(NULL,AV_LOG_DEBUG,"amr_decode_frame buf=%p buf_size=%d frameCount=%d!!\n",buf,buf_size,s->frameCount); */
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
419
2287
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
420 if(buf_size==0) {
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
421 /* nothing to do */
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
422 return 0;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
423 }
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
424
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
425 dec_mode = (buf[0] >> 3) & 0x000F;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
426 packet_size = block_size[dec_mode]+1;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
427
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
428 if(packet_size > buf_size) {
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
429 av_log(avctx, AV_LOG_ERROR, "amr frame too short (%u, should be %u)\n", buf_size, packet_size);
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
430 return -1;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
431 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
432
2287
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
433 s->frameCount++;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
434 /* av_log(NULL,AV_LOG_DEBUG,"packet_size=%d amrData= 0x%X %X %X %X\n",packet_size,amrData[0],amrData[1],amrData[2],amrData[3]); */
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
435 /* call decoder */
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
436 Decoder_Interface_Decode(s->decState, amrData, data, 0);
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
437 *data_size=160*2;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
438
2287
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
439 return packet_size;
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
440 }
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
441
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
442 static int amr_nb_encode_frame(AVCodecContext *avctx,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
443 unsigned char *frame/*out*/, int buf_size, void *data/*in*/)
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
444 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
445 AMRContext *s = (AMRContext*)avctx->priv_data;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
446 int written;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
447
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
448 written = Encoder_Interface_Encode(s->enstate,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
449 s->enc_bitrate,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
450 data,
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
451 frame,
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
452 0);
2571
b17d868a8f39 04_AMR_no_debug_output.patch by (Calcium | calcium nurs or jp)
michael
parents: 2287
diff changeset
453 /* av_log(NULL,AV_LOG_DEBUG,"amr_nb_encode_frame encoded %u bytes, bitrate %u, first byte was %#02x\n",written, s->enc_bitrate, frame[0] ); */
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
454
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
455 return written;
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
456 }
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
457
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
458 #endif
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
459
2895
8fe1dc88294a Fix some #ifdef to allow building amr_wb alone.
diego
parents: 2571
diff changeset
460 #if defined(AMR_NB) || defined(AMR_NB_FIXED)
8fe1dc88294a Fix some #ifdef to allow building amr_wb alone.
diego
parents: 2571
diff changeset
461
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
462 AVCodec amr_nb_decoder =
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
463 {
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
464 "amr_nb",
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
465 CODEC_TYPE_AUDIO,
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
466 CODEC_ID_AMR_NB,
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
467 sizeof(AMRContext),
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
468 amr_nb_decode_init,
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
469 NULL,
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
470 amr_nb_decode_close,
1258
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
471 amr_nb_decode_frame,
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
472 };
802614404398 AMR-NB audio support patch by (<joca at rixmail dot se>)
michaelni
parents:
diff changeset
473
1297
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
474 AVCodec amr_nb_encoder =
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
475 {
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
476 "amr_nb",
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
477 CODEC_TYPE_AUDIO,
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
478 CODEC_ID_AMR_NB,
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
479 sizeof(AMRContext),
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
480 amr_nb_encode_init,
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
481 amr_nb_encode_frame,
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
482 amr_nb_encode_close,
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
483 NULL,
1db67cd7808a * 3gp patch by Joca
kabi
parents: 1258
diff changeset
484 };
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
485
2895
8fe1dc88294a Fix some #ifdef to allow building amr_wb alone.
diego
parents: 2571
diff changeset
486 #endif
8fe1dc88294a Fix some #ifdef to allow building amr_wb alone.
diego
parents: 2571
diff changeset
487
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
488 /* -----------AMR wideband ------------*/
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
489 #ifdef AMR_WB
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
490
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
491 #ifdef _TYPEDEF_H
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
492 //To avoid duplicate typedefs from typdef in amr-nb
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
493 #define typedef_h
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
494 #endif
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
495
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
496 #include "amrwb_float/enc_if.h"
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
497 #include "amrwb_float/dec_if.h"
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
498
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
499 /* Common code for fixed and float version*/
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
500 typedef struct AMRWB_bitrates
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
501 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
502 int startrate;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
503 int stoprate;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
504 int mode;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
505
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
506 } AMRWB_bitrates;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
507
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
508 static int getWBBitrateMode(int bitrate)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
509 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
510 /* Adjusted so that all bitrates can be used from commandline where
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
511 only a multiple of 1000 can be specified*/
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
512 AMRWB_bitrates rates[]={ {0,7999,0}, //6.6kHz
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
513 {8000,9999,1},//8.85
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
514 {10000,13000,2},//12.65
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
515 {13001,14999,3},//14.25
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
516 {15000,17000,4},//15.85
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
517 {17001,18000,5},//18.25
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
518 {18001,22000,6},//19.85
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
519 {22001,23000,7},//23.05
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
520 {23001,24000,8},//23.85
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
521
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
522 };
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
523 int i;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
524
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
525 for(i=0;i<9;i++)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
526 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
527 if(rates[i].startrate<=bitrate && rates[i].stoprate>=bitrate)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
528 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
529 return(rates[i].mode);
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
530 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
531 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
532 /*Return highest possible*/
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
533 return(8);
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
534 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
535
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
536
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
537 typedef struct AMRWBContext {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
538 int frameCount;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
539 void *state;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
540 int mode;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
541 Word16 allow_dtx;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
542 } AMRWBContext;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
543
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
544 static int amr_wb_encode_init(AVCodecContext * avctx)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
545 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
546 AMRWBContext *s = (AMRWBContext*)avctx->priv_data;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
547 s->frameCount=0;
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
548
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
549 if(avctx->sample_rate!=16000)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
550 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
551 if(avctx->debug)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
552 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
553 av_log(avctx, AV_LOG_DEBUG, "Only 16000Hz sample rate supported\n");
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
554 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
555 return -1;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
556 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
557
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
558 if(avctx->channels!=1)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
559 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
560 if(avctx->debug)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
561 {
1825
231a6c19e28f av_log()
michael
parents: 1736
diff changeset
562 av_log(avctx, AV_LOG_DEBUG, "Only mono supported\n");
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
563 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
564 return -1;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
565 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
566
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
567 avctx->frame_size=320;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
568 avctx->coded_frame= avcodec_alloc_frame();
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
569
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
570 s->state = E_IF_init();
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
571 s->mode=getWBBitrateMode(avctx->bit_rate);
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
572 s->allow_dtx=0;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
573
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
574 return 0;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
575 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
576
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
577 static int amr_wb_encode_close(AVCodecContext * avctx)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
578 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
579 AMRWBContext *s = (AMRWBContext*) avctx->priv_data;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
580 E_IF_exit(s->state);
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
581 av_freep(&avctx->coded_frame);
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
582 s->frameCount++;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
583 return 0;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
584 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
585
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
586 static int amr_wb_encode_frame(AVCodecContext *avctx,
2979
bfabfdf9ce55 COSMETICS: tabs --> spaces, some prettyprinting
diego
parents: 2967
diff changeset
587 unsigned char *frame/*out*/, int buf_size, void *data/*in*/)
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
588 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
589 AMRWBContext *s = (AMRWBContext*) avctx->priv_data;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
590 int size = E_IF_encode(s->state, s->mode, data, frame, s->allow_dtx);
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
591 return size;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
592 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
593
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
594 static int amr_wb_decode_init(AVCodecContext * avctx)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
595 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
596 AMRWBContext *s = (AMRWBContext *)avctx->priv_data;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
597 s->frameCount=0;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
598 s->state = D_IF_init();
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
599 return 0;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
600 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
601
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
602 extern const UWord8 block_size[];
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
603
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
604 static int amr_wb_decode_frame(AVCodecContext * avctx,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
605 void *data, int *data_size,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
606 uint8_t * buf, int buf_size)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
607 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
608 AMRWBContext *s = (AMRWBContext*)avctx->priv_data;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
609
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
610 uint8_t*amrData=buf;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
611 int mode;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
612 int packet_size;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
613
2287
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
614 if(buf_size==0) {
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
615 /* nothing to do */
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
616 return 0;
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
617 }
2287
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
618
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
619 mode = (amrData[0] >> 3) & 0x000F;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
620 packet_size = block_size[mode];
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
621
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
622 if(packet_size > buf_size) {
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
623 av_log(avctx, AV_LOG_ERROR, "amr frame too short (%u, should be %u)\n", buf_size, packet_size+1);
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
624 return -1;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
625 }
2967
ef2149182f1c COSMETICS: Remove all trailing whitespace.
diego
parents: 2895
diff changeset
626
2287
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
627 s->frameCount++;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
628 D_IF_decode( s->state, amrData, data, _good_frame);
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
629 *data_size=320*2;
679642dc54cf segfault in amr decoder fix patch by (Richard van der Hoff - richvdh0)
michael
parents: 2028
diff changeset
630 return packet_size;
1486
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
631 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
632
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
633 static int amr_wb_decode_close(AVCodecContext * avctx)
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
634 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
635 AMRWBContext *s = (AMRWBContext *)avctx->priv_data;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
636 D_IF_exit(s->state);
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
637 return 0;
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
638 }
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
639
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
640 AVCodec amr_wb_decoder =
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
641 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
642 "amr_wb",
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
643 CODEC_TYPE_AUDIO,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
644 CODEC_ID_AMR_WB,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
645 sizeof(AMRWBContext),
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
646 amr_wb_decode_init,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
647 NULL,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
648 amr_wb_decode_close,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
649 amr_wb_decode_frame,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
650 };
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
651
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
652 AVCodec amr_wb_encoder =
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
653 {
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
654 "amr_wb",
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
655 CODEC_TYPE_AUDIO,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
656 CODEC_ID_AMR_WB,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
657 sizeof(AMRWBContext),
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
658 amr_wb_encode_init,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
659 amr_wb_encode_frame,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
660 amr_wb_encode_close,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
661 NULL,
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
662 };
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
663
f22010affdce AMR-WB support by (Johannes Carlsson <joca at rixmail dot se>)
michaelni
parents: 1297
diff changeset
664 #endif //AMR_WB