mirror of https://github.com/asterisk/asterisk
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
3.2 KiB
112 lines
3.2 KiB
/*
|
|
* Asterisk -- A telephony toolkit for Linux.
|
|
*
|
|
* Translate via the use of pseudo channels
|
|
*
|
|
* Copyright (C) 1999, Mark Spencer
|
|
*
|
|
* 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"
|
|
#include "asterisk/plc.h"
|
|
|
|
/* Declared by individual translators */
|
|
struct ast_translator_pvt;
|
|
|
|
/*! data structure associated with a translator */
|
|
struct ast_translator {
|
|
/*! Name of translator */
|
|
char name[80];
|
|
/*! Source format */
|
|
int srcfmt;
|
|
/*! Destination format */
|
|
int dstfmt;
|
|
/*! Private data associated with the translator */
|
|
struct ast_translator_pvt *(*newpvt)(void);
|
|
/*! Input frame callback */
|
|
int (*framein)(struct ast_translator_pvt *pvt, struct ast_frame *in);
|
|
/*! Output frame callback */
|
|
struct ast_frame * (*frameout)(struct ast_translator_pvt *pvt);
|
|
/*! Destroy translator callback */
|
|
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;
|
|
|
|
/*! Register a translator */
|
|
/*!
|
|
* \param t populated ast_translator structure
|
|
* This registers a codec translator with asterisk
|
|
* Returns 0 on success, -1 on failure
|
|
*/
|
|
extern int ast_register_translator(struct ast_translator *t);
|
|
|
|
/*! Unregister a translator */
|
|
/*!
|
|
* \param t translator to unregister
|
|
* Unregisters the given tranlator
|
|
* Returns 0 on success, -1 on failure
|
|
*/
|
|
extern int ast_unregister_translator(struct ast_translator *t);
|
|
|
|
/*! Chooses the best translation path */
|
|
/*!
|
|
* Given a list of sources, and a designed destination format, which should
|
|
I choose? Returns 0 on success, -1 if no path could be found. Modifies
|
|
dests and srcs in place
|
|
*/
|
|
extern int ast_translator_best_choice(int *dsts, int *srcs);
|
|
|
|
/*!Builds a translator path */
|
|
/*!
|
|
* \param dest destination format
|
|
* \param source source format
|
|
* Build a path (possibly NULL) from source to dest
|
|
* Returns ast_trans_pvt on success, NULL on failure
|
|
* */
|
|
extern struct ast_trans_pvt *ast_translator_build_path(int dest, int source);
|
|
|
|
/*! Frees a translator path */
|
|
/*!
|
|
* \param tr translator path to get rid of
|
|
* Frees the given translator path structure
|
|
*/
|
|
extern void ast_translator_free_path(struct ast_trans_pvt *tr);
|
|
|
|
/*! translates one or more frames */
|
|
/*!
|
|
* \param tr translator structure to use for translation
|
|
* \param f frame to translate
|
|
* \param consume Whether or not to free the original frame
|
|
* Apply an input frame into the translator and receive zero or one output frames. Consume
|
|
* determines whether the original frame should be freed
|
|
* Returns an ast_frame of the new translation format on success, NULL on failure
|
|
*/
|
|
extern struct ast_frame *ast_translate(struct ast_trans_pvt *tr, struct ast_frame *f, int consume);
|
|
|
|
#if defined(__cplusplus) || defined(c_plusplus)
|
|
}
|
|
#endif
|
|
|
|
#endif
|