Version 0.1.0 from FTP
[asterisk/asterisk.git] / include / asterisk / translate.h
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Translate via the use of pseudo channels
5  * 
6  * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #ifndef _ASTERISK_TRANSLATE_H
15 #define _ASTERISK_TRANSLATE_H
16
17 #define MAX_FORMAT 32
18
19 #if defined(__cplusplus) || defined(c_plusplus)
20 extern "C" {
21 #endif
22
23 #include <asterisk/frame.h>
24
25 /* Declared by individual translators */
26 struct ast_translator_pvt;
27
28 struct ast_translator {
29         char name[80];
30         int srcfmt;
31         int dstfmt;
32         struct ast_translator_pvt *(*new)();
33         int (*framein)(struct ast_translator_pvt *pvt, struct ast_frame *in);
34         struct ast_frame * (*frameout)(struct ast_translator_pvt *pvt);
35         void (*destroy)(struct ast_translator_pvt *pvt);
36         /* For performance measurements */
37         /* Generate an example frame */
38         struct ast_frame * (*sample)(void);
39         /* Cost in milliseconds for encoding/decoding 1 second of sound */
40         int cost;
41         /* For linking, not to be modified by the translator */
42         struct ast_translator *next;
43 };
44
45 struct ast_trans_pvt;
46
47 /* Create a pseudo channel which translates from a real channel into our
48    desired format.  When a translator is installed, you should not use the
49    sub channel until you have stopped the translator.  For all other
50    actions, use the real channel. Generally, translators should be created 
51    when needed and immediately destroyed when no longer needed.  */
52
53 /* Directions */
54 #define AST_DIRECTION_OUT  1
55 #define AST_DIRECTION_IN   2
56 #define AST_DIRECTION_BOTH 3
57
58 extern struct ast_channel *ast_translator_create(struct ast_channel *real, int format, int direction);
59 extern void ast_translator_destroy(struct ast_channel *tran);
60 /* Register a Codec translator */
61 extern int ast_register_translator(struct ast_translator *t);
62 /* Unregister same */
63 extern int ast_unregister_translator(struct ast_translator *t);
64 /* Given a list of sources, and a designed destination format, which should
65    I choose? */
66 extern int ast_translator_best_choice(int dst, int srcs);
67 extern struct ast_trans_pvt *ast_translator_build_path(int source, int dest);
68 extern void ast_translator_free_path(struct ast_trans_pvt *tr);
69 extern struct ast_frame_chain *ast_translate(struct ast_trans_pvt *tr, struct ast_frame *f);
70
71
72 #if defined(__cplusplus) || defined(c_plusplus)
73 }
74 #endif
75
76 #endif