00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #ifndef _ASTERISK_FRAME_H
00017 #define _ASTERISK_FRAME_H
00018
00019 #if defined(__cplusplus) || defined(c_plusplus)
00020 extern "C" {
00021 #endif
00022
00023 #include <sys/types.h>
00024 #include <sys/time.h>
00025
00026
00027
00028
00029 #ifndef __BYTE_ORDER
00030 #ifdef __linux__
00031 #include <endian.h>
00032 #elif defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__APPLE__)
00033 #if defined(__OpenBSD__)
00034 #include <machine/types.h>
00035 #endif
00036 #include <machine/endian.h>
00037 #define __BYTE_ORDER BYTE_ORDER
00038 #define __LITTLE_ENDIAN LITTLE_ENDIAN
00039 #define __BIG_ENDIAN BIG_ENDIAN
00040 #else
00041 #ifdef __LITTLE_ENDIAN__
00042 #define __BYTE_ORDER __LITTLE_ENDIAN
00043 #endif
00044
00045 #if defined(i386) || defined(__i386__)
00046 #define __BYTE_ORDER __LITTLE_ENDIAN
00047 #endif
00048
00049 #if defined(sun) && defined(unix) && defined(sparc)
00050 #define __BYTE_ORDER __BIG_ENDIAN
00051 #endif
00052
00053 #endif
00054
00055 #endif
00056
00057 #ifndef __BYTE_ORDER
00058 #error Need to know endianess
00059 #endif
00060
00061 struct ast_codec_pref {
00062 char order[32];
00063 };
00064
00065
00066
00067
00068
00069 struct ast_frame {
00070
00071 int frametype;
00072
00073 int subclass;
00074
00075 int datalen;
00076
00077 int samples;
00078
00079 int mallocd;
00080
00081 int offset;
00082
00083 char *src;
00084
00085 void *data;
00086
00087 struct timeval delivery;
00088
00089 struct ast_frame *prev;
00090
00091 struct ast_frame *next;
00092
00093
00094
00095 };
00096
00097 struct ast_frame_chain {
00098
00099 struct ast_frame *fr;
00100 struct ast_frame_chain *next;
00101 };
00102
00103 #define AST_FRIENDLY_OFFSET 64
00104
00105
00106 #define AST_MIN_OFFSET 32
00107
00108
00109 #define AST_MALLOCD_HDR (1 << 0)
00110
00111 #define AST_MALLOCD_DATA (1 << 1)
00112
00113 #define AST_MALLOCD_SRC (1 << 2)
00114
00115
00116
00117 #define AST_FRAME_DTMF 1
00118
00119 #define AST_FRAME_VOICE 2
00120
00121 #define AST_FRAME_VIDEO 3
00122
00123 #define AST_FRAME_CONTROL 4
00124
00125 #define AST_FRAME_NULL 5
00126
00127 #define AST_FRAME_IAX 6
00128
00129 #define AST_FRAME_TEXT 7
00130
00131 #define AST_FRAME_IMAGE 8
00132
00133 #define AST_FRAME_HTML 9
00134
00135
00136 #define AST_FRAME_CNG 10
00137
00138
00139
00140 #define AST_HTML_URL 1
00141
00142 #define AST_HTML_DATA 2
00143
00144 #define AST_HTML_BEGIN 4
00145
00146 #define AST_HTML_END 8
00147
00148 #define AST_HTML_LDCOMPLETE 16
00149
00150 #define AST_HTML_NOSUPPORT 17
00151
00152 #define AST_HTML_LINKURL 18
00153
00154 #define AST_HTML_UNLINK 19
00155
00156 #define AST_HTML_LINKREJECT 20
00157
00158
00159
00160 #define AST_FORMAT_G723_1 (1 << 0)
00161
00162 #define AST_FORMAT_GSM (1 << 1)
00163
00164 #define AST_FORMAT_ULAW (1 << 2)
00165
00166 #define AST_FORMAT_ALAW (1 << 3)
00167
00168 #define AST_FORMAT_G726 (1 << 4)
00169
00170 #define AST_FORMAT_ADPCM (1 << 5)
00171
00172 #define AST_FORMAT_SLINEAR (1 << 6)
00173
00174 #define AST_FORMAT_LPC10 (1 << 7)
00175
00176 #define AST_FORMAT_G729A (1 << 8)
00177
00178 #define AST_FORMAT_SPEEX (1 << 9)
00179
00180 #define AST_FORMAT_ILBC (1 << 10)
00181
00182 #define AST_FORMAT_MAX_AUDIO (1 << 15)
00183
00184 #define AST_FORMAT_JPEG (1 << 16)
00185
00186 #define AST_FORMAT_PNG (1 << 17)
00187
00188 #define AST_FORMAT_H261 (1 << 18)
00189
00190 #define AST_FORMAT_H263 (1 << 19)
00191
00192 #define AST_FORMAT_MAX_VIDEO (1 << 24)
00193
00194
00195
00196 #define AST_CONTROL_HANGUP 1
00197
00198 #define AST_CONTROL_RING 2
00199
00200 #define AST_CONTROL_RINGING 3
00201
00202 #define AST_CONTROL_ANSWER 4
00203
00204 #define AST_CONTROL_BUSY 5
00205
00206 #define AST_CONTROL_TAKEOFFHOOK 6
00207
00208 #define AST_CONTROL_OFFHOOK 7
00209
00210 #define AST_CONTROL_CONGESTION 8
00211
00212 #define AST_CONTROL_FLASH 9
00213
00214 #define AST_CONTROL_WINK 10
00215
00216 #define AST_CONTROL_OPTION 11
00217
00218 #define AST_CONTROL_RADIO_KEY 12
00219
00220 #define AST_CONTROL_RADIO_UNKEY 13
00221
00222 #define AST_CONTROL_PROGRESS 14
00223
00224 #define AST_CONTROL_PROCEEDING 15
00225
00226 #define AST_SMOOTHER_FLAG_G729 (1 << 0)
00227
00228
00229 #define AST_OPTION_FLAG_REQUEST 0
00230 #define AST_OPTION_FLAG_ACCEPT 1
00231 #define AST_OPTION_FLAG_REJECT 2
00232 #define AST_OPTION_FLAG_QUERY 4
00233 #define AST_OPTION_FLAG_ANSWER 5
00234 #define AST_OPTION_FLAG_WTF 6
00235
00236
00237
00238 #define AST_OPTION_TONE_VERIFY 1
00239
00240
00241 #define AST_OPTION_TDD 2
00242
00243
00244 #define AST_OPTION_RELAXDTMF 3
00245
00246
00247 #define AST_OPTION_AUDIO_MODE 4
00248
00249 struct ast_option_header {
00250
00251 #if __BYTE_ORDER == __BIG_ENDIAN
00252 u_int16_t flag:3;
00253 u_int16_t option:13;
00254 #else
00255 #if __BYTE_ORDER == __LITTLE_ENDIAN
00256 u_int16_t option:13;
00257 u_int16_t flag:3;
00258 #else
00259 #error Byte order not defined
00260 #endif
00261 #endif
00262 u_int8_t data[0];
00263 };
00264
00265
00266
00267
00268
00269
00270
00271 #if 0
00272 struct ast_frame *ast_fralloc(char *source, int len);
00273 #endif
00274
00275
00276
00277
00278
00279
00280
00281 void ast_frfree(struct ast_frame *fr);
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292 struct ast_frame *ast_frisolate(struct ast_frame *fr);
00293
00294
00295
00296
00297
00298
00299
00300 struct ast_frame *ast_frdup(struct ast_frame *fr);
00301
00302
00303 #if 0
00304 void ast_frchain(struct ast_frame_chain *fc);
00305 #endif
00306
00307
00308
00309
00310
00311
00312
00313 struct ast_frame *ast_fr_fdread(int fd);
00314
00315
00316
00317
00318
00319
00320
00321
00322 int ast_fr_fdwrite(int fd, struct ast_frame *frame);
00323
00324
00325
00326
00327
00328
00329
00330 int ast_fr_fdhangup(int fd);
00331
00332
00333
00334
00335
00336
00337 extern char* ast_getformatname(int format);
00338
00339
00340
00341
00342
00343
00344
00345
00346
00347
00348 extern char* ast_getformatname_multiple(char *buf, size_t size, int format);
00349
00350
00351
00352
00353
00354
00355 extern int ast_getformatbyname(char *name);
00356
00357
00358
00359
00360
00361
00362
00363 extern char *ast_codec2str(int codec);
00364
00365
00366
00367 extern int ast_best_codec(int fmts);
00368
00369 struct ast_smoother;
00370
00371 extern struct ast_format_list *ast_get_format_list_index(int index);
00372 extern struct ast_format_list *ast_get_format_list(size_t *size);
00373 extern struct ast_smoother *ast_smoother_new(int bytes);
00374 extern void ast_smoother_set_flags(struct ast_smoother *smoother, int flags);
00375 extern int ast_smoother_get_flags(struct ast_smoother *smoother);
00376 extern void ast_smoother_free(struct ast_smoother *s);
00377 extern void ast_smoother_reset(struct ast_smoother *s, int bytes);
00378 extern int ast_smoother_feed(struct ast_smoother *s, struct ast_frame *f);
00379 extern struct ast_frame *ast_smoother_read(struct ast_smoother *s);
00380
00381 extern void ast_frame_dump(char *name, struct ast_frame *f, char *prefix);
00382
00383
00384 extern void ast_codec_pref_init(struct ast_codec_pref *pref);
00385
00386
00387 extern int ast_codec_pref_index(struct ast_codec_pref *pref, int index);
00388
00389
00390 extern void ast_codec_pref_remove(struct ast_codec_pref *pref, int format);
00391
00392
00393 extern int ast_codec_pref_append(struct ast_codec_pref *pref, int format);
00394
00395
00396
00397
00398 extern int ast_codec_choose(struct ast_codec_pref *pref, int formats, int find_best);
00399
00400
00401 extern void ast_parse_allow_disallow(struct ast_codec_pref *pref, int *mask, char *list, int allowing);
00402
00403
00404 extern int ast_codec_pref_string(struct ast_codec_pref *pref, char *buf, size_t size);
00405
00406
00407 extern void ast_codec_pref_shift(struct ast_codec_pref *pref, char *buf, size_t size, int right);
00408
00409 #if defined(__cplusplus) || defined(c_plusplus)
00410 }
00411 #endif
00412
00413
00414 #endif