codecs: Add Codec 2 mode 2400.
[asterisk/asterisk.git] / include / asterisk / format_cache.h
1 /*
2  * Asterisk -- An open source telephony toolkit.
3  *
4  * Copyright (C) 2014, Digium, Inc.
5  *
6  * Joshua Colp <jcolp@digium.com>
7  *
8  * See http://www.asterisk.org for more information about
9  * the Asterisk project. Please do not directly contact
10  * any of the maintainers of this project for assistance;
11  * the project provides a web site, mailing lists and IRC
12  * channels for your use.
13  *
14  * This program is free software, distributed under the terms of
15  * the GNU General Public License Version 2. See the LICENSE file
16  * at the top of the source tree.
17  */
18
19 /*!
20  * \file
21  * \brief Media Format Cache API
22  *
23  * \author Joshua Colp <jcolp@digium.com>
24  */
25
26 #ifndef _AST_FORMAT_CACHE_H_
27 #define _AST_FORMAT_CACHE_H_
28
29 struct ast_format;
30
31 /*!
32  * \brief Built-in cached signed linear 8kHz format.
33  */
34 extern struct ast_format *ast_format_slin;
35
36 /*!
37  * \brief Built-in cached signed linear 12kHz format.
38  */
39 extern struct ast_format *ast_format_slin12;
40
41 /*!
42  * \brief Built-in cached signed linear 16kHz format.
43  */
44 extern struct ast_format *ast_format_slin16;
45
46 /*!
47  * \brief Built-in cached signed linear 24kHz format.
48  */
49 extern struct ast_format *ast_format_slin24;
50
51 /*!
52  * \brief Built-in cached signed linear 32kHz format.
53  */
54 extern struct ast_format *ast_format_slin32;
55
56 /*!
57  * \brief Built-in cached signed linear 44kHz format.
58  */
59 extern struct ast_format *ast_format_slin44;
60
61 /*!
62  * \brief Built-in cached signed linear 48kHz format.
63  */
64 extern struct ast_format *ast_format_slin48;
65
66 /*!
67  * \brief Built-in cached signed linear 96kHz format.
68  */
69 extern struct ast_format *ast_format_slin96;
70
71 /*!
72  * \brief Built-in cached signed linear 192kHz format.
73  */
74 extern struct ast_format *ast_format_slin192;
75
76 /*!
77  * \brief Built-in cached ulaw format.
78  */
79 extern struct ast_format *ast_format_ulaw;
80
81 /*!
82  * \brief Built-in cached alaw format.
83  */
84 extern struct ast_format *ast_format_alaw;
85
86 /*!
87  * \brief Built-in cached testlaw format.
88  */
89 extern struct ast_format *ast_format_testlaw;
90
91 /*!
92  * \brief Built-in cached gsm format.
93  */
94 extern struct ast_format *ast_format_gsm;
95
96 /*!
97  * \brief Built-in cached adpcm format.
98  */
99 extern struct ast_format *ast_format_adpcm;
100
101 /*!
102  * \brief Built-in cached g722 format.
103  */
104 extern struct ast_format *ast_format_g722;
105
106 /*!
107  * \brief Built-in cached g726 format.
108  */
109 extern struct ast_format *ast_format_g726;
110
111 /*!
112  * \brief Built-in cached g726 aal2 format.
113  */
114 extern struct ast_format *ast_format_g726_aal2;
115
116 /*!
117  * \brief Built-in cached ilbc format.
118  */
119 extern struct ast_format *ast_format_ilbc;
120
121 /*!
122  * \brief Built-in cached ilbc format.
123  */
124 extern struct ast_format *ast_format_lpc10;
125
126 /*!
127  * \brief Built-in cached speex format.
128  */
129 extern struct ast_format *ast_format_speex;
130
131 /*!
132  * \brief Built-in cached speex at 16kHz format.
133  */
134 extern struct ast_format *ast_format_speex16;
135
136 /*!
137  * \brief Built-in cached speex at 32kHz format.
138  */
139 extern struct ast_format *ast_format_speex32;
140
141 /*!
142  * \brief Built-in cached g723.1 format.
143  */
144 extern struct ast_format *ast_format_g723;
145
146 /*!
147  * \brief Built-in cached g729 format.
148  */
149 extern struct ast_format *ast_format_g729;
150
151 /*!
152  * \brief Built-in cached g719 format.
153  */
154 extern struct ast_format *ast_format_g719;
155
156 /*!
157  * \brief Built-in cached h261 format.
158  */
159 extern struct ast_format *ast_format_h261;
160
161 /*!
162  * \brief Built-in cached h263 format.
163  */
164 extern struct ast_format *ast_format_h263;
165
166 /*!
167  * \brief Built-in cached h263 plus format.
168  */
169 extern struct ast_format *ast_format_h263p;
170
171 /*!
172  * \brief Built-in cached h264 format.
173  */
174 extern struct ast_format *ast_format_h264;
175
176 /*!
177  * \brief Built-in cached mp4 format.
178  */
179 extern struct ast_format *ast_format_mp4;
180
181 /*!
182  * \brief Built-in cached vp8 format.
183  */
184 extern struct ast_format *ast_format_vp8;
185
186 /*!
187  * \brief Built-in cached jpeg format.
188  */
189 extern struct ast_format *ast_format_jpeg;
190
191 /*!
192  * \brief Built-in cached png format.
193  */
194 extern struct ast_format *ast_format_png;
195
196 /*!
197  * \brief Built-in cached siren14 format.
198  */
199 extern struct ast_format *ast_format_siren14;
200
201 /*!
202  * \brief Built-in cached siren7 format.
203  */
204 extern struct ast_format *ast_format_siren7;
205
206 /*!
207  * \brief Built-in cached opus format.
208  */
209 extern struct ast_format *ast_format_opus;
210
211 /*!
212  * \brief Built-in cached Codec 2 format.
213  */
214 extern struct ast_format *ast_format_codec2;
215
216 /*!
217  * \brief Built-in cached t140 format.
218  */
219 extern struct ast_format *ast_format_t140;
220
221 /*!
222  * \brief Built-in cached t140 red format.
223  */
224 extern struct ast_format *ast_format_t140_red;
225
226 /*!
227  * \brief Built-in "null" format.
228  */
229 extern struct ast_format *ast_format_none;
230
231 /*!
232  * \brief Built-in SILK format.
233  */
234 extern struct ast_format *ast_format_silk8;
235 extern struct ast_format *ast_format_silk12;
236 extern struct ast_format *ast_format_silk16;
237 extern struct ast_format *ast_format_silk24;
238
239 /*!
240  * \brief Initialize format cache support within the core.
241  *
242  * \retval 0 success
243  * \retval -1 failure
244  */
245 int ast_format_cache_init(void);
246
247 /*!
248  * \brief Set a named format cache entry.
249  *
250  * \param format A pointer to the format to cache
251  *
252  * \retval 0 success
253  * \retval -1 failure
254  */
255 int ast_format_cache_set(struct ast_format *format);
256
257 /*!
258  * \brief Retrieve a named format from the cache.
259  *
260  * \param name Name of the cached format
261  *
262  * \retval non-NULL if found
263  * \retval NULL if not found
264  *
265  * \note The returned format has its reference count incremented. It must be
266  * dropped using ao2_ref or ao2_cleanup.
267  */
268 struct ast_format *__ast_format_cache_get(const char *name,
269         const char *tag, const char *file, int line, const char *func);
270
271 #define ast_format_cache_get(name) \
272         __ast_format_cache_get((name), "ast_format_cache_get", __FILE__, __LINE__, __PRETTY_FUNCTION__)
273 #define ast_t_format_cache_get(name, tag) \
274         __ast_format_cache_get((name), (tag), __FILE__, __LINE__, __PRETTY_FUNCTION__)
275
276
277 /*!
278  * \brief Retrieve the best signed linear format given a sample rate.
279  *
280  * \param rate The sample rate
281  *
282  * \details
283  * This is a convenience function that returns one of the global
284  * ast_format_slinxxx formats.
285  *
286  * \return pointer to the signed linear format
287  *
288  * \note The returned format has NOT had its reference count incremented.
289  */
290 struct ast_format *ast_format_cache_get_slin_by_rate(unsigned int rate);
291
292 /*!
293  * \brief Determines if a format is one of the cached slin formats
294  *
295  * \param format The format to check
296  *
297  * \retval 0 if the format is not an SLIN format
298  * \retval 1 if the format is an SLIN format
299  */
300 int ast_format_cache_is_slinear(struct ast_format *format);
301
302 #endif /* _AST_FORMAT_CACHE_H */