Mercurial > libavcodec.hg
annotate libopencore-amr.c @ 9837:80936dd6be46 libavcodec
10l: Add vc1dec.o to the list of WMV3 objects, same as for VC-1.
Even after the split into shared and decoder-specific code, WMV3
continues to have the same dependencies as VC-1.
author | diego |
---|---|
date | Thu, 11 Jun 2009 09:40:24 +0000 |
parents | 038c7940a21e |
children | 7955db355703 |
rev | line source |
---|---|
9818
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
1 /* |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
2 * AMR Audio decoder stub |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
3 * Copyright (c) 2003 the ffmpeg project |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
4 * |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
5 * This file is part of FFmpeg. |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
6 * |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
7 * FFmpeg is free software; you can redistribute it and/or |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Lesser General Public |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
9 * License as published by the Free Software Foundation; either |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
10 * version 2.1 of the License, or (at your option) any later version. |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
11 * |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
12 * FFmpeg is distributed in the hope that it will be useful, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
15 * Lesser General Public License for more details. |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
16 * |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Lesser General Public |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
18 * License along with FFmpeg; if not, write to the Free Software |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
20 */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
21 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
22 #include "avcodec.h" |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
23 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
24 static void amr_decode_fix_avctx(AVCodecContext *avctx) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
25 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
26 const int is_amr_wb = 1 + (avctx->codec_id == CODEC_ID_AMR_WB); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
27 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
28 if (!avctx->sample_rate) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
29 avctx->sample_rate = 8000 * is_amr_wb; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
30 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
31 if (!avctx->channels) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
32 avctx->channels = 1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
33 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
34 avctx->frame_size = 160 * is_amr_wb; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
35 avctx->sample_fmt = SAMPLE_FMT_S16; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
36 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
37 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
38 #if CONFIG_LIBOPENCORE_AMRNB |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
39 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
40 #include <opencore-amrnb/interf_dec.h> |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
41 #include <opencore-amrnb/interf_enc.h> |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
42 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
43 static const char nb_bitrate_unsupported[] = |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
44 "bitrate not supported: use one of 4.75k, 5.15k, 5.9k, 6.7k, 7.4k, 7.95k, 10.2k or 12.2k\n"; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
45 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
46 /* Common code for fixed and float version*/ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
47 typedef struct AMR_bitrates { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
48 int rate; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
49 enum Mode mode; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
50 } AMR_bitrates; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
51 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
52 /* Match desired bitrate */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
53 static int getBitrateMode(int bitrate) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
54 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
55 /* make the correspondance between bitrate and mode */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
56 AMR_bitrates rates[] = { { 4750, MR475}, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
57 { 5150, MR515}, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
58 { 5900, MR59}, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
59 { 6700, MR67}, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
60 { 7400, MR74}, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
61 { 7950, MR795}, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
62 {10200, MR102}, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
63 {12200, MR122}, }; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
64 int i; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
65 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
66 for (i = 0; i < 8; i++) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
67 if (rates[i].rate == bitrate) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
68 return rates[i].mode; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
69 /* no bitrate matching, return an error */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
70 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
71 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
72 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
73 typedef struct AMRContext { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
74 int frameCount; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
75 void *decState; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
76 int *enstate; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
77 int enc_bitrate; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
78 } AMRContext; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
79 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
80 static av_cold int amr_nb_decode_init(AVCodecContext *avctx) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
81 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
82 AMRContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
83 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
84 s->frameCount = 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
85 s->decState = Decoder_Interface_init(); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
86 if (!s->decState) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
87 av_log(avctx, AV_LOG_ERROR, "Decoder_Interface_init error\r\n"); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
88 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
89 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
90 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
91 amr_decode_fix_avctx(avctx); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
92 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
93 if (avctx->channels > 1) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
94 av_log(avctx, AV_LOG_ERROR, "amr_nb: multichannel decoding not supported\n"); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
95 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
96 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
97 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
98 return 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
99 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
100 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
101 static av_cold int amr_nb_decode_close(AVCodecContext *avctx) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
102 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
103 AMRContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
104 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
105 Decoder_Interface_exit(s->decState); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
106 return 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
107 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
108 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
109 static int amr_nb_decode_frame(AVCodecContext *avctx, void *data, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
110 int *data_size, AVPacket *avpkt) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
111 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
112 const uint8_t *buf = avpkt->data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
113 int buf_size = avpkt->size; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
114 AMRContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
115 const uint8_t *amrData = buf; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
116 static const uint8_t block_size[16] = { 12, 13, 15, 17, 19, 20, 26, 31, 5, 0, 0, 0, 0, 0, 0, 0 }; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
117 enum Mode dec_mode; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
118 int packet_size; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
119 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
120 /* av_log(NULL, AV_LOG_DEBUG, "amr_decode_frame buf=%p buf_size=%d frameCount=%d!!\n", |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
121 buf, buf_size, s->frameCount); */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
122 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
123 dec_mode = (buf[0] >> 3) & 0x000F; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
124 packet_size = block_size[dec_mode] + 1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
125 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
126 if (packet_size > buf_size) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
127 av_log(avctx, AV_LOG_ERROR, "amr frame too short (%u, should be %u)\n", |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
128 buf_size, packet_size); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
129 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
130 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
131 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
132 s->frameCount++; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
133 /* av_log(NULL, AV_LOG_DEBUG, "packet_size=%d amrData= 0x%X %X %X %X\n", |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
134 packet_size, amrData[0], amrData[1], amrData[2], amrData[3]); */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
135 /* call decoder */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
136 Decoder_Interface_Decode(s->decState, amrData, data, 0); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
137 *data_size = 160 * 2; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
138 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
139 return packet_size; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
140 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
141 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
142 AVCodec libopencore_amrnb_decoder = { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
143 "libopencore_amrnb", |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
144 CODEC_TYPE_AUDIO, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
145 CODEC_ID_AMR_NB, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
146 sizeof(AMRContext), |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
147 amr_nb_decode_init, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
148 NULL, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
149 amr_nb_decode_close, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
150 amr_nb_decode_frame, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
151 .long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band"), |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
152 }; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
153 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
154 static av_cold int amr_nb_encode_init(AVCodecContext *avctx) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
155 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
156 AMRContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
157 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
158 s->frameCount = 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
159 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
160 if (avctx->sample_rate != 8000) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
161 av_log(avctx, AV_LOG_ERROR, "Only 8000Hz sample rate supported\n"); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
162 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
163 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
164 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
165 if (avctx->channels != 1) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
166 av_log(avctx, AV_LOG_ERROR, "Only mono supported\n"); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
167 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
168 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
169 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
170 avctx->frame_size = 160; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
171 avctx->coded_frame = avcodec_alloc_frame(); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
172 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
173 s->enstate=Encoder_Interface_init(0); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
174 if (!s->enstate) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
175 av_log(avctx, AV_LOG_ERROR, "Encoder_Interface_init error\n"); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
176 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
177 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
178 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
179 if ((s->enc_bitrate = getBitrateMode(avctx->bit_rate)) < 0) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
180 av_log(avctx, AV_LOG_ERROR, nb_bitrate_unsupported); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
181 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
182 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
183 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
184 return 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
185 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
186 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
187 static av_cold int amr_nb_encode_close(AVCodecContext *avctx) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
188 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
189 AMRContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
190 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
191 Encoder_Interface_exit(s->enstate); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
192 av_freep(&avctx->coded_frame); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
193 return 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
194 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
195 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
196 static int amr_nb_encode_frame(AVCodecContext *avctx, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
197 unsigned char *frame/*out*/, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
198 int buf_size, void *data/*in*/) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
199 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
200 AMRContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
201 int written; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
202 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
203 if ((s->enc_bitrate = getBitrateMode(avctx->bit_rate)) < 0) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
204 av_log(avctx, AV_LOG_ERROR, nb_bitrate_unsupported); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
205 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
206 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
207 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
208 written = Encoder_Interface_Encode(s->enstate, s->enc_bitrate, data, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
209 frame, 0); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
210 /* av_log(NULL, AV_LOG_DEBUG, "amr_nb_encode_frame encoded %u bytes, bitrate %u, first byte was %#02x\n", |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
211 written, s->enc_bitrate, frame[0] ); */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
212 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
213 return written; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
214 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
215 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
216 AVCodec libopencore_amrnb_encoder = { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
217 "libopencore_amrnb", |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
218 CODEC_TYPE_AUDIO, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
219 CODEC_ID_AMR_NB, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
220 sizeof(AMRContext), |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
221 amr_nb_encode_init, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
222 amr_nb_encode_frame, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
223 amr_nb_encode_close, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
224 NULL, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
225 .sample_fmts = (enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE}, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
226 .long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band"), |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
227 }; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
228 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
229 #endif |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
230 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
231 /* -----------AMR wideband ------------*/ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
232 #if CONFIG_LIBOPENCORE_AMRWB |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
233 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
234 #ifdef _TYPEDEF_H |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
235 //To avoid duplicate typedefs from typedef in amr-nb |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
236 #define typedef_h |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
237 #endif |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
238 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
239 #include <opencore-amrwb/dec_if.h> |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
240 #include <opencore-amrwb/if_rom.h> |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
241 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
242 static const char wb_bitrate_unsupported[] = |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
243 "bitrate not supported: use one of 6.6k, 8.85k, 12.65k, 14.25k, 15.85k, 18.25k, 19.85k, 23.05k, or 23.85k\n"; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
244 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
245 /* Common code for fixed and float version*/ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
246 typedef struct AMRWB_bitrates { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
247 int rate; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
248 int mode; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
249 } AMRWB_bitrates; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
250 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
251 typedef struct AMRWBContext { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
252 int frameCount; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
253 void *state; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
254 int mode; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
255 Word16 allow_dtx; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
256 } AMRWBContext; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
257 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
258 static av_cold int amr_wb_decode_init(AVCodecContext *avctx) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
259 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
260 AMRWBContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
261 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
262 s->frameCount = 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
263 s->state = D_IF_init(); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
264 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
265 amr_decode_fix_avctx(avctx); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
266 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
267 if (avctx->channels > 1) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
268 av_log(avctx, AV_LOG_ERROR, "amr_wb: multichannel decoding not supported\n"); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
269 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
270 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
271 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
272 return 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
273 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
274 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
275 static int amr_wb_decode_frame(AVCodecContext *avctx, void *data, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
276 int *data_size, AVPacket *avpkt) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
277 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
278 const uint8_t *buf = avpkt->data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
279 int buf_size = avpkt->size; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
280 AMRWBContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
281 const uint8_t *amrData = buf; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
282 int mode; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
283 int packet_size; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
284 static const uint8_t block_size[16] = {18, 24, 33, 37, 41, 47, 51, 59, 61, 6, 6, 0, 0, 0, 1, 1}; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
285 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
286 if (!buf_size) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
287 /* nothing to do */ |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
288 return 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
289 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
290 mode = (amrData[0] >> 3) & 0x000F; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
291 packet_size = block_size[mode]; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
292 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
293 if (packet_size > buf_size) { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
294 av_log(avctx, AV_LOG_ERROR, "amr frame too short (%u, should be %u)\n", |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
295 buf_size, packet_size + 1); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
296 return -1; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
297 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
298 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
299 s->frameCount++; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
300 D_IF_decode(s->state, amrData, data, _good_frame); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
301 *data_size = 320 * 2; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
302 return packet_size; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
303 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
304 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
305 static int amr_wb_decode_close(AVCodecContext *avctx) |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
306 { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
307 AMRWBContext *s = avctx->priv_data; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
308 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
309 D_IF_exit(s->state); |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
310 return 0; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
311 } |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
312 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
313 AVCodec libopencore_amrwb_decoder = { |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
314 "libopencore_amrwb", |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
315 CODEC_TYPE_AUDIO, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
316 CODEC_ID_AMR_WB, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
317 sizeof(AMRWBContext), |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
318 amr_wb_decode_init, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
319 NULL, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
320 amr_wb_decode_close, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
321 amr_wb_decode_frame, |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
322 .long_name = NULL_IF_CONFIG_SMALL("OpenCORE Adaptive Multi-Rate (AMR) Wide-Band"), |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
323 }; |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
324 |
038c7940a21e
Add support for external OpenCORE libraries for AMR-NB/WB support.
diego
parents:
diff
changeset
|
325 #endif /* CONFIG_LIBOPENCORE_AMRWB */ |