diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 1999-11-21 02:26:43 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 1999-11-21 02:26:43 +0000 |
commit | 4c63f091a4767fbd5c0cefed92446a1a184065d0 (patch) | |
tree | 5d6ff7a3fa451a38d36e8e29c76e2ad73910b110 /include | |
parent | b3f95b5b13bd294be77c0cbe0a807c565ef568b0 (diff) |
Version 0.1.0 from FTP
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@65 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'include')
-rwxr-xr-x | include/asterisk/file.h | 84 | ||||
-rwxr-xr-x | include/asterisk/frame.h | 101 | ||||
-rwxr-xr-x | include/asterisk/translate.h | 76 |
3 files changed, 261 insertions, 0 deletions
diff --git a/include/asterisk/file.h b/include/asterisk/file.h new file mode 100755 index 000000000..da4ffaa42 --- /dev/null +++ b/include/asterisk/file.h @@ -0,0 +1,84 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * Generic File Format Support. + * + * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC + * + * Mark Spencer <markster@linux-support.net> + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#ifndef _ASTERISK_FILE_H +#define _ASTERISK_FILE_H + +#include <asterisk/channel.h> +#include <asterisk/frame.h> +#include <fcntl.h> + + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + + +/* Convenient for waiting */ +#define AST_DIGIT_ANY "0123456789#*" + +/* Defined by individual formats. First item MUST be a + pointer for use by the stream manager */ +struct ast_filestream; + +/* Register a new file format capability */ +int ast_format_register(char *name, char *exts, int format, + struct ast_filestream * (*open)(int fd), + struct ast_filestream * (*rewrite)(int fd, char *comment), + int (*apply)(struct ast_channel *, struct ast_filestream *), + int (*write)(struct ast_filestream *, struct ast_frame *), + struct ast_frame * (*read)(struct ast_filestream *), + void (*close)(struct ast_filestream *), + char * (*getcomment)(struct ast_filestream *)); + +int ast_format_unregister(char *name); + +/* Start streaming a file */ +int ast_streamfile(struct ast_channel *c, char *filename); + +/* Stop playback of a stream */ +int ast_stopstream(struct ast_channel *c); + +/* See if a given file exists in a given format. If fmt is NULL, any format is accepted.*/ +int ast_fileexists(char *filename, char *fmt); + +/* Rename a given file in a given format, or if fmt is NULL, then do so for all */ +int ast_filerename(char *oldname, char *newname, char *fmt); + +/* Delete a given file in a given format, or if fmt is NULL, then do so for all */ +int ast_filedelete(char *filename, char *fmt); + +/* Wait for a stream to stop or for any one of a given digit to arrive, Returns + 0 if the stream finishes, the character if it was interrupted, and -1 on error */ +char ast_waitstream(struct ast_channel *c, char *breakon); + +/* Create an outgoing file stream. oflags are flags for the open() command, and + if check is non-zero, then it will not write a file if there are any files that + start with that name and have an extension */ +struct ast_filestream *ast_writefile(char *filename, char *type, char *comment, int oflags, int check, mode_t mode); + +/* Send a frame to a filestream -- note: does NOT free the frame, call ast_frfree manually */ +int ast_writestream(struct ast_filestream *fs, struct ast_frame *f); + +/* Close a playback or recording stream */ +int ast_closestream(struct ast_filestream *f); + +#define AST_RESERVED_POINTERS 4 + +#if defined(__cplusplus) || defined(c_plusplus) +} +#endif + + + +#endif diff --git a/include/asterisk/frame.h b/include/asterisk/frame.h new file mode 100755 index 000000000..d9fb440f0 --- /dev/null +++ b/include/asterisk/frame.h @@ -0,0 +1,101 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * Asterisk internal frame definitions. + * + * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC + * + * Mark Spencer <markster@linux-support.net> + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#ifndef _ASTERISK_FRAME_H +#define _ASTERISK_FRAME_H + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +/* A frame of data read used to communicate between + between channels and applications */ +struct ast_frame { + int frametype; /* Kind of frame */ + int subclass; /* Subclass, frame dependent */ + int datalen; /* Length of data */ + int timelen; /* Amount of time associated with this frame */ + int mallocd; /* Was the data malloc'd? i.e. should we + free it when we discard the frame? */ + int offset; /* How far into "data" the data really starts */ + char *src; /* Optional source of frame for debugging */ + void *data; /* Pointer to actual data */ +}; + +struct ast_frame_chain { + /* XXX Should ast_frame chain's be just prt of frames, i.e. should they just link? XXX */ + struct ast_frame *fr; + struct ast_frame_chain *next; +}; + +#define AST_FRIENDLY_OFFSET 64 /* It's polite for a a new frame to + have at least this number of bytes + of offset before your real frame data + so that additional headers can be + added. */ + +#define AST_MALLOCD_HDR (1 << 0) /* Need the header be free'd? */ +#define AST_MALLOCD_DATA (1 << 1) /* Need the data be free'd? */ +#define AST_MALLOCD_SRC (1 << 2) /* Need the source be free'd? (haha!) */ + +/* Frame types */ +#define AST_FRAME_DTMF 1 /* A DTMF digit, subclass is the digit */ +#define AST_FRAME_VOICE 2 /* Voice data, subclass is AST_FORMAT_* */ +#define AST_FRAME_VIDEO 3 /* Video frame, maybe?? :) */ +#define AST_FRAME_CONTROL 4 /* A control frame, subclass is AST_CONTROL_* */ +#define AST_FRAME_NULL 5 /* An empty, useless frame */ + +/* Data formats for capabilities and frames alike */ +#define AST_FORMAT_G723_1 (1 << 0) /* G.723.1 compression */ +#define AST_FORMAT_GSM (1 << 1) /* GSM compression */ +#define AST_FORMAT_ULAW (1 << 2) /* Raw mu-law data (G.711) */ +#define AST_FORMAT_ALAW (1 << 3) /* Raw A-law data (G.711) */ +#define AST_FORMAT_MP3 (1 << 4) /* MPEG-2 layer 3 */ +#define AST_FORMAT_ADPCM (1 << 5) /* ADPCM */ +#define AST_FORMAT_SLINEAR (1 << 6) /* Raw 16-bit Signed Linear (8000 Hz) PCM */ +#define AST_FORMAT_MAX_AUDIO (1 << 15) /* Maximum audio format */ +#define AST_FORMAT_JPEG (1 << 16) /* JPEG Images */ +#define AST_FORMAT_PNG (1 << 17) /* PNG Images */ +#define AST_FORMAT_H261 (1 << 18) /* H.261 Video */ +#define AST_FORMAT_H263 (1 << 19) /* H.263 Video */ + +/* Control frame types */ +#define AST_CONTROL_HANGUP 1 /* Other end has hungup */ +#define AST_CONTROL_RING 2 /* Local ring */ +#define AST_CONTROL_RINGING 3 /* Remote end is ringing */ +#define AST_CONTROL_ANSWER 4 /* Remote end has answered */ +#define AST_CONTROL_BUSY 5 /* Remote end is busy */ +#define AST_CONTROL_TAKEOFFHOOK 6 /* Make it go off hook */ +#define AST_CONTROL_OFFHOOK 7 /* Line is off hook */ + +/* Request a frame be allocated. source is an optional source of the frame, + len is the requested length, or "0" if the caller will supply the buffer */ +struct ast_frame *ast_fralloc(char *source, int len); + +/* Free a frame, and the memory it used if applicable */ +void ast_frfree(struct ast_frame *fr); + +/* Take a frame, and if it's not been malloc'd, make a malloc'd copy + and if the data hasn't been malloced then make the + data malloc'd. If you need to store frames, say for queueing, then + you should call this function. */ +struct ast_frame *ast_frisolate(struct ast_frame *fr); + +void ast_frchain(struct ast_frame_chain *fc); + +#if defined(__cplusplus) || defined(c_plusplus) +} +#endif + + +#endif diff --git a/include/asterisk/translate.h b/include/asterisk/translate.h new file mode 100755 index 000000000..68edc046d --- /dev/null +++ b/include/asterisk/translate.h @@ -0,0 +1,76 @@ +/* + * Asterisk -- A telephony toolkit for Linux. + * + * Translate via the use of pseudo channels + * + * Copyright (C) 1999, Adtran Inc. and Linux Support Services, LLC + * + * Mark Spencer <markster@linux-support.net> + * + * This program is free software, distributed under the terms of + * the GNU General Public License + */ + +#ifndef _ASTERISK_TRANSLATE_H +#define _ASTERISK_TRANSLATE_H + +#define MAX_FORMAT 32 + +#if defined(__cplusplus) || defined(c_plusplus) +extern "C" { +#endif + +#include <asterisk/frame.h> + +/* Declared by individual translators */ +struct ast_translator_pvt; + +struct ast_translator { + char name[80]; + int srcfmt; + int dstfmt; + struct ast_translator_pvt *(*new)(); + int (*framein)(struct ast_translator_pvt *pvt, struct ast_frame *in); + struct ast_frame * (*frameout)(struct ast_translator_pvt *pvt); + void (*destroy)(struct ast_translator_pvt *pvt); + /* For performance measurements */ + /* Generate an example frame */ + struct ast_frame * (*sample)(void); + /* Cost in milliseconds for encoding/decoding 1 second of sound */ + int cost; + /* For linking, not to be modified by the translator */ + struct ast_translator *next; +}; + +struct ast_trans_pvt; + +/* Create a pseudo channel which translates from a real channel into our + desired format. When a translator is installed, you should not use the + sub channel until you have stopped the translator. For all other + actions, use the real channel. Generally, translators should be created + when needed and immediately destroyed when no longer needed. */ + +/* Directions */ +#define AST_DIRECTION_OUT 1 +#define AST_DIRECTION_IN 2 +#define AST_DIRECTION_BOTH 3 + +extern struct ast_channel *ast_translator_create(struct ast_channel *real, int format, int direction); +extern void ast_translator_destroy(struct ast_channel *tran); +/* Register a Codec translator */ +extern int ast_register_translator(struct ast_translator *t); +/* Unregister same */ +extern int ast_unregister_translator(struct ast_translator *t); +/* Given a list of sources, and a designed destination format, which should + I choose? */ +extern int ast_translator_best_choice(int dst, int srcs); +extern struct ast_trans_pvt *ast_translator_build_path(int source, int dest); +extern void ast_translator_free_path(struct ast_trans_pvt *tr); +extern struct ast_frame_chain *ast_translate(struct ast_trans_pvt *tr, struct ast_frame *f); + + +#if defined(__cplusplus) || defined(c_plusplus) +} +#endif + +#endif |