[zaptel-commits] branch group/menuselect r1164 - in /team/group/menuselect: ./ build_tools/

zaptel-commits at lists.digium.com zaptel-commits at lists.digium.com
Fri Jun 23 21:21:17 MST 2006


Author: russell
Date: Fri Jun 23 23:21:16 2006
New Revision: 1164

URL: http://svn.digium.com/view/zaptel?rev=1164&view=rev
Log:
Merged revisions 1162 via svnmerge from 
https://origsvn.digium.com/svn/zaptel/trunk

........
r1162 | kpfleming | 2006-06-23 11:11:45 -0400 (Fri, 23 Jun 2006) | 2 lines

add infrastructure for zaptel transcoders

........

Added:
    team/group/menuselect/zttranscode.c
      - copied unchanged from r1162, trunk/zttranscode.c
Modified:
    team/group/menuselect/   (props changed)
    team/group/menuselect/Makefile
    team/group/menuselect/build_tools/genudevrules
    team/group/menuselect/makeopts.xml
    team/group/menuselect/zaptel.c
    team/group/menuselect/zaptel.h

Propchange: team/group/menuselect/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Jun 23 23:21:16 2006
@@ -1,1 +1,1 @@
-/trunk:1-1158
+/trunk:1-1163

Modified: team/group/menuselect/Makefile
URL: http://svn.digium.com/view/zaptel/team/group/menuselect/Makefile?rev=1164&r1=1163&r2=1164&view=diff
==============================================================================
--- team/group/menuselect/Makefile (original)
+++ team/group/menuselect/Makefile Fri Jun 23 23:21:16 2006
@@ -134,7 +134,6 @@
   BUILD_XPP=yes
   MENUSELECT_MODULES:=$(filter-out xpp,$(MENUSELECT_MODULES))
 endif
-
 MODULES:=$(MENUSELECT_MODULES)
 
 MODULESO:=$(MODULES:%=%.o)
@@ -335,6 +334,7 @@
 	rm -f $(INSTALL_PREFIX)/dev/zap/251
 	rm -f $(INSTALL_PREFIX)/dev/zap/250
 	mknod $(INSTALL_PREFIX)/dev/zap/ctl c 196 0
+	mknod $(INSTALL_PREFIX)/dev/zap/transcode c 196 250
 	mknod $(INSTALL_PREFIX)/dev/zap/timer c 196 253
 	mknod $(INSTALL_PREFIX)/dev/zap/channel c 196 254
 	mknod $(INSTALL_PREFIX)/dev/zap/pseudo c 196 255

Modified: team/group/menuselect/build_tools/genudevrules
URL: http://svn.digium.com/view/zaptel/team/group/menuselect/build_tools/genudevrules?rev=1164&r1=1163&r2=1164&view=diff
==============================================================================
--- team/group/menuselect/build_tools/genudevrules (original)
+++ team/group/menuselect/build_tools/genudevrules Fri Jun 23 23:21:16 2006
@@ -23,6 +23,7 @@
 cat <<EOF
 # zaptel devices with ownership/permissions for running as non-root
 KERNEL${match}"zapctl", NAME="zap/ctl", OWNER="asterisk", GROUP="asterisk", MODE="0660"
+KERNEL${match}"zaptranscode", NAME="zap/transcode", OWNER="asterisk", GROUP="asterisk", MODE="0660"
 KERNEL${match}"zaptimer", NAME="zap/timer", OWNER="asterisk", GROUP="asterisk", MODE="0660"
 KERNEL${match}"zapchannel", NAME="zap/channel", OWNER="asterisk", GROUP="asterisk", MODE="0660"
 KERNEL${match}"zappseudo", NAME="zap/pseudo", OWNER="asterisk", GROUP="asterisk", MODE="0660"

Modified: team/group/menuselect/makeopts.xml
URL: http://svn.digium.com/view/zaptel/team/group/menuselect/makeopts.xml?rev=1164&r1=1163&r2=1164&view=diff
==============================================================================
--- team/group/menuselect/makeopts.xml (original)
+++ team/group/menuselect/makeopts.xml Fri Jun 23 23:21:16 2006
@@ -51,6 +51,9 @@
 	<member name="ztdynamic" displayname="Dynamic">
 		<defaultenabled>yes</defaultenabled>
 	</member>
+	<member name="zttranscode" displayname="Zaptel Transcoders">
+		<defaultenabled>yes</defaultenabled>
+	</member>
 </category>
 
 <category name="MENUSELECT_UTILS" displayname="Utilities" positive_output="yes">

Modified: team/group/menuselect/zaptel.c
URL: http://svn.digium.com/view/zaptel/team/group/menuselect/zaptel.c?rev=1164&r1=1163&r2=1164&view=diff
==============================================================================
--- team/group/menuselect/zaptel.c (original)
+++ team/group/menuselect/zaptel.c Fri Jun 23 23:21:16 2006
@@ -150,6 +150,7 @@
 "-22.5db (CSU)"
 } ;
 
+EXPORT_SYMBOL(zt_transcode_fops);
 EXPORT_SYMBOL(zt_init_tone_state);
 EXPORT_SYMBOL(zt_dtmf_tone);
 EXPORT_SYMBOL(zt_register);
@@ -190,6 +191,7 @@
 static devfs_handle_t pseudo;
 static devfs_handle_t ctl;
 static devfs_handle_t timer;
+static devfs_handle_t transcode;
 #endif
 
 /* udev necessary data structures.  Yeah! */
@@ -283,6 +285,7 @@
 
 static struct zt_span *master;
 static struct file_operations zt_fops;
+struct file_operations *zt_transcode_fops = NULL;
 
 static struct
 {
@@ -2389,10 +2392,24 @@
 static int zt_open(struct inode *inode, struct file *file)
 {
 	int unit = UNIT(file);
+	int ret = -ENXIO;
 	struct zt_chan *chan;
 	/* Minor 0: Special "control" descriptor */
 	if (!unit) 
 		return zt_ctl_open(inode, file);
+	if (unit == 250) {
+		if (!zt_transcode_fops)
+			request_module("zttranscode");
+		if (zt_transcode_fops && zt_transcode_fops->open) {
+			if (try_module_get(zt_transcode_fops->owner)) {
+				ret = zt_transcode_fops->open(inode, file);
+				if (ret)
+					module_put(zt_transcode_fops->owner);
+			}
+			return ret;
+		}
+		return -ENXIO;
+	}
 	if (unit == 253) {
 		if (maxspans) {
 			return zt_timing_open(inode, file);
@@ -2714,6 +2731,11 @@
 		return zt_ctl_release(inode, file);
 	if (unit == 253) {
 		return zt_timer_release(inode, file);
+	}
+	if (unit == 250) {
+		res = zt_transcode_fops->release(inode, file);
+		module_put(zt_transcode_fops->owner);
+		return res;
 	}
 	if (unit == 254) {
 		chan = file->private_data;
@@ -4492,6 +4514,10 @@
 
 	if (!unit)
 		return zt_ctl_ioctl(inode, file, cmd, data);
+
+	if (unit == 250)
+		return zt_transcode_fops->ioctl(inode, file, cmd, data);
+
 	if (unit == 253) {
 		timer = file->private_data;
 		if (timer)
@@ -6369,6 +6395,14 @@
 	return(ret);  /* return what we found */
 }
 
+static int zt_mmap(struct file *file, struct vm_area_struct *vm)
+{
+	int unit = UNIT(file);
+	if (unit == 250)
+		return zt_transcode_fops->mmap(file, vm);
+	return -ENOSYS;
+}
+
 static unsigned int zt_poll(struct file *file, struct poll_table_struct *wait_table)
 {
 	int unit = UNIT(file);
@@ -6376,6 +6410,9 @@
 
 	if (!unit)
 		return -EINVAL;
+
+	if (unit == 250)
+		return zt_transcode_fops->poll(file, wait_table);
 
 	if (unit == 253)
 		return zt_timer_poll(file, wait_table);
@@ -6758,7 +6795,7 @@
 	read: zt_read,
 	write: zt_write,
 	poll: zt_poll,
-	mmap: NULL,
+	mmap: zt_mmap,
 	flush: NULL,
 	fsync: NULL,
 	fasync: NULL,
@@ -6833,6 +6870,7 @@
 
 #ifdef CONFIG_ZAP_UDEV /* udev support functions */
 	zap_class = class_create(THIS_MODULE, "zaptel");
+	CLASS_DEV_CREATE(zap_class, MKDEV(ZT_MAJOR, 250), NULL, "zaptranscode");
 	CLASS_DEV_CREATE(zap_class, MKDEV(ZT_MAJOR, 253), NULL, "zaptimer");
 	CLASS_DEV_CREATE(zap_class, MKDEV(ZT_MAJOR, 254), NULL, "zapchannel");
 	CLASS_DEV_CREATE(zap_class, MKDEV(ZT_MAJOR, 255), NULL, "zappseudo");
@@ -6848,6 +6886,7 @@
 	timer = devfs_register(zaptel_devfs_dir, "timer", DEVFS_FL_DEFAULT, ZT_MAJOR, 253, mode, &zt_fops, NULL);
 	channel = devfs_register(zaptel_devfs_dir, "channel", DEVFS_FL_DEFAULT, ZT_MAJOR, 254, mode, &zt_fops, NULL);
 	pseudo = devfs_register(zaptel_devfs_dir, "pseudo", DEVFS_FL_DEFAULT, ZT_MAJOR, 255, mode, &zt_fops, NULL);
+	transcode = devfs_register(zaptel_devfs_dir, "transcode", DEVFS_FL_DEFAULT, ZT_MAJOR, 250, mode, &zt_fops, NULL);
 	ctl = devfs_register(zaptel_devfs_dir, "ctl", DEVFS_FL_DEFAULT, ZT_MAJOR, 0, mode, &zt_fops, NULL);
 	}
 #else
@@ -6884,6 +6923,7 @@
 			kfree(tone_zones[x]);
 #ifdef CONFIG_DEVFS_FS
 	devfs_unregister(timer);
+	devfs_unregister(transcode);
 	devfs_unregister(channel);
 	devfs_unregister(pseudo);
 	devfs_unregister(ctl);
@@ -6891,6 +6931,7 @@
 	devfs_unregister_chrdev(ZT_MAJOR, "zaptel");
 #else
 #ifdef CONFIG_ZAP_UDEV
+	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, 250)); /* transcode */
 	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, 253)); /* timer */
 	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, 254)); /* channel */
 	class_device_destroy(zap_class, MKDEV(ZT_MAJOR, 255)); /* pseudo */

Modified: team/group/menuselect/zaptel.h
URL: http://svn.digium.com/view/zaptel/team/group/menuselect/zaptel.h?rev=1164&r1=1163&r2=1164&view=diff
==============================================================================
--- team/group/menuselect/zaptel.h (original)
+++ team/group/menuselect/zaptel.h Fri Jun 23 23:21:16 2006
@@ -34,15 +34,18 @@
 #include "zconfig.h"
 #include <linux/config.h>
 #include <linux/version.h>
+#include <linux/fs.h>
+#include <linux/ioctl.h>
+
 #ifdef CONFIG_ZAPATA_NET	
 #include <linux/hdlc.h>
 #endif
+
 #ifdef CONFIG_ZAPATA_PPP
 #include <linux/ppp_channel.h>
 #include <linux/skbuff.h>
 #include <linux/interrupt.h>
 #endif
-#include <linux/fs.h>
 
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
 #define LINUX26
@@ -56,7 +59,9 @@
 
 #include "ecdis.h"
 #include "fasthdlc.h"
-#endif
+
+#endif /* __KERNEL__ */
+
 #ifdef CONFIG_DEVFS_FS
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
 #include <linux/devfs_fs_kernel.h>
@@ -65,7 +70,6 @@
 //#warning "Zaptel doesn't support DEVFS in post 2.4 kernels.  Disabling DEVFS in zaptel"
 #endif
 #endif /* CONFIG_DEVFS_FS */
-#include <linux/ioctl.h>
 
 #ifndef ELAST
 #define ELAST 500
@@ -635,6 +639,11 @@
  */
 #define	ZT_SETPOLARITY		_IOW (ZT_CODE, 92, int)
 
+/*
+ * Transcoder operations
+ */
+#define ZT_TRANSCODE_OP		_IOWR(ZT_CODE, 93, int)
+
 /* 
  * Startup or Shutdown a span
  */
@@ -664,8 +673,59 @@
 #define ZT_TONEDETECT_ON	(1 << 0)		/* Detect tones */
 #define ZT_TONEDETECT_MUTE	(1 << 1)		/* Mute audio in received channel */
 
+#define ZT_TRANSCODE_MAGIC 0x74a9c0de
+
+/* Operations */
+#define ZT_TCOP_RESET		1			/* Reset the channel state / codec selection */
+#define ZT_TCOP_TRANSCODE	2			/* Begin transcoding a block */
+#define ZT_TCOP_GETINFO		3			/* Get information (use zt_transcode_info) */
+
+typedef struct zt_transcode_info {
+	unsigned int op;
+	unsigned int tcnum;
+	char name[80];
+	unsigned int srcfmts;
+	unsigned int dstfmts;
+} ZT_TRANSCODE_INFO;
+
+#define ZT_TCCONF_USETS 	(1 << 0)	/* Use/update timestamp field */
+#define ZT_TCCONF_USESEQ 	(1 << 1)	/* Use/update seqno field */
+
+#define ZT_TCSTAT_DSTRDY	(1 << 0)	/* Destination data is ready */
+#define ZT_TCSTAT_DSTBUSY	(1 << 1)	/* Destination data is outstanding */
+
+#define __ZT_TRANSCODE_BUFSIZ		16384
+#define ZT_TRANSCODE_HDRLEN		256
+#define ZT_TRANSCODE_BUFSIZ		((__ZT_TRANSCODE_BUFSIZ) - (ZT_TRANSCODE_HDRLEN))
+#define ZT_TRANSCODE_DSTOFFSET		(((ZT_TRANSCODE_BUFSIZ) / 2) + ZT_TRANSCODE_HDRLEN)
+#define ZT_TRANSCODE_SRCOFFSET		(((ZT_TRANSCODE_BUFSIZ) / 2) + ZT_TRANSCODE_HDRLEN)
+
+typedef struct zt_transcode_header {
+	unsigned int srcfmt;		/* See formats.h -- use TCOP_RESET when you change */
+	unsigned int srcoffset; 	/* In bytes -- written by user */
+	unsigned int srclen;		/* In bytes -- written by user */
+	unsigned int srctimestamp;	/* In samples -- written by user (only used if ZT_TCCONF_USETS is set) */
+	unsigned int srcseqno;		/* In units -- written by user (only used if ZT_TCCONF_USESEQ is set) */
+
+	unsigned int dstfmt;		/* See formats.h -- use TCOP_RESET when you change */
+	unsigned int dstoffset;  	/* In bytes -- written by user */
+	unsigned int dsttimestamp;	/* In samples -- read by user */
+	unsigned int dstseqno;		/* In units -- read by user (only used if ZT_TCCONF_USESEQ is set) */
+	unsigned int dstlen;  		/* In bytes -- read by user */
+	unsigned int dstsamples;	/* In timestamp units -- read by user */
+
+	unsigned int magic;		/* Magic value -- ZT_TRANSCODE_MAGIC, read by user */
+	unsigned int config;		/* Read/write by user */
+	unsigned int status;		/* Read/write by user */
+
+	/* XXX: fix this to automatically calculate somehow */
+	unsigned char userhdr[ZT_TRANSCODE_HDRLEN - (sizeof(unsigned int) * 14)];	/* Storage for user parameters */
+	unsigned char srcdata[ZT_TRANSCODE_BUFSIZ / 2];	/* Storage of source data */
+	unsigned char dstdata[ZT_TRANSCODE_BUFSIZ / 2];	/* Storage of destination data */
+} ZT_TRANSCODE_HEADER;
+
 struct zt_ring_cadence {
-	int ringcadence [ZT_MAX_CADENCE];
+	int ringcadence[ZT_MAX_CADENCE];
 };
 
 struct zt_tone_def_header {
@@ -1321,6 +1381,33 @@
 #endif	
 };
 
+struct zt_transcoder_channel {
+	void *pvt;
+	struct zt_transcoder *parent;
+	wait_queue_head_t ready;
+	int errorstatus;
+	int offset;
+	unsigned int flags;
+	unsigned int srcfmt;
+	unsigned int dstfmt;
+	struct zt_transcode_header *tch;
+};
+
+#define ZT_TC_FLAG_BUSY       (1 << 0)
+#define ZT_TC_FLAG_TRANSIENT  (1 << 1)
+
+
+struct zt_transcoder {
+	struct zt_transcoder *next;
+	char name[80];
+	int numchannels;
+	unsigned int srcfmts;
+	unsigned int dstfmts;
+	int (*operation)(struct zt_transcoder_channel *channel, int op);
+	/* Transcoder channels */
+	struct zt_transcoder_channel channels[0];
+};
+
 #define ZT_WATCHDOG_NOINTS		(1 << 0)
 
 #define ZT_WATCHDOG_INIT			1000
@@ -1354,67 +1441,100 @@
 };
 
 /* Receive a dynamic span message */
-extern void zt_dynamic_receive(struct zt_span *span, unsigned char *msg, int msglen);
+void zt_dynamic_receive(struct zt_span *span, unsigned char *msg, int msglen);
 
 /* Register a dynamic driver */
-extern int zt_dynamic_register(struct zt_dynamic_driver *driver);
+int zt_dynamic_register(struct zt_dynamic_driver *driver);
 
 /* Unregister a dynamic driver */
-extern void zt_dynamic_unregister(struct zt_dynamic_driver *driver);
+void zt_dynamic_unregister(struct zt_dynamic_driver *driver);
 
 /* Receive on a span.  The zaptel interface will handle all the calculations for
    all member channels of the span, pulling the data from the readchunk buffer */
-extern int zt_receive(struct zt_span *span);
+int zt_receive(struct zt_span *span);
 
 /* Prepare writechunk buffers on all channels for this span */
-extern int zt_transmit(struct zt_span *span);
+int zt_transmit(struct zt_span *span);
 
 /* Abort the buffer currently being receive with event "event" */
-extern void zt_hdlc_abort(struct zt_chan *ss, int event);
+void zt_hdlc_abort(struct zt_chan *ss, int event);
 
 /* Indicate to zaptel that the end of frame was received and rotate buffers */
-extern void zt_hdlc_finish(struct zt_chan *ss);
+void zt_hdlc_finish(struct zt_chan *ss);
 
 /* Put a chunk of data into the current receive buffer */
-extern void zt_hdlc_putbuf(struct zt_chan *ss, unsigned char *rxb, int bytes);
+void zt_hdlc_putbuf(struct zt_chan *ss, unsigned char *rxb, int bytes);
 
 /* Get a chunk of data from the current transmit buffer.  Returns -1 if no data
  * is left to send, 0 if there is data remaining in the current message to be sent
  * and 1 if the currently transmitted message is now done */
-extern int zt_hdlc_getbuf(struct zt_chan *ss, unsigned char *bufptr, unsigned int *size);
+int zt_hdlc_getbuf(struct zt_chan *ss, unsigned char *bufptr, unsigned int *size);
 
 
 /* Register a span.  Returns 0 on success, -1 on failure.  Pref-master is non-zero if
    we should have preference in being the master device */
-extern int zt_register(struct zt_span *span, int prefmaster);
+int zt_register(struct zt_span *span, int prefmaster);
+
+/* Allocate / free memory for a transcoder */
+struct zt_transcoder *zt_transcoder_alloc(int numchans);
+void zt_transcoder_free(struct zt_transcoder *ztc);
+
+/* Register a transcoder */
+int zt_transcoder_register(struct zt_transcoder *tc);
+
+/* Unregister a transcoder */
+int zt_transcoder_unregister(struct zt_transcoder *tc);
+
+/* Alert a transcoder */
+int zt_transcoder_alert(struct zt_transcoder_channel *ztc);
+
+/* Sanity check values */
+static inline int zt_tc_sanitycheck(struct zt_transcode_header *zth, unsigned int outbytes)
+{
+	if (zth->dstoffset >= sizeof(zth->dstdata))
+		return 0;
+	if (zth->dstlen >= sizeof(zth->dstdata))
+		return 0;
+	if (outbytes >= sizeof(zth->dstdata))
+		return 0;
+	if ((zth->dstoffset + zth->dstlen + outbytes) >= sizeof(zth->dstdata))
+		return 0;
+	if (zth->srcoffset >= sizeof(zth->srcdata))
+		return 0;
+	if (zth->srclen >= sizeof(zth->srcdata))
+		return 0;
+	if ((zth->srcoffset + zth->srclen) > sizeof(zth->srcdata))
+		return 0;
+	return 1;
+}
 
 /* Unregister a span */
-extern int zt_unregister(struct zt_span *span);
+int zt_unregister(struct zt_span *span);
 
 /* Gives a name to an LBO */
-extern char *zt_lboname(int lbo);
+char *zt_lboname(int lbo);
 
 /* Tell Zaptel about changes in received rbs bits */
-extern void zt_rbsbits(struct zt_chan *chan, int bits);
+void zt_rbsbits(struct zt_chan *chan, int bits);
 
 /* Tell Zaptel abou changes in received signalling */
-extern void zt_hooksig(struct zt_chan *chan, zt_rxsig_t rxsig);
+void zt_hooksig(struct zt_chan *chan, zt_rxsig_t rxsig);
 
 /* Queue an event on a channel */
-extern void zt_qevent_nolock(struct zt_chan *chan, int event);
+void zt_qevent_nolock(struct zt_chan *chan, int event);
 
 /* Queue an event on a channel, locking it first */
-extern void zt_qevent_lock(struct zt_chan *chan, int event);
+void zt_qevent_lock(struct zt_chan *chan, int event);
 
 /* Notify a change possible change in alarm status */
-extern void zt_alarm_notify(struct zt_span *span);
+void zt_alarm_notify(struct zt_span *span);
 
 /* Initialize a tone state */
-extern void zt_init_tone_state(struct zt_tone_state *ts, struct zt_tone *zt);
+void zt_init_tone_state(struct zt_tone_state *ts, struct zt_tone *zt);
 
 /* Get a given DTMF or MF tone struct, suitable for zt_tone_nextsample.
    Set 'mf' to 0 for DTMF or 1 for MFv1 */
-extern struct zt_tone *zt_dtmf_tone(char digit, int mf);
+struct zt_tone *zt_dtmf_tone(char digit, int mf);
 
 /* Echo cancel a receive and transmit chunk for a given channel.  This
    should be called by the low-level driver as close to the interface
@@ -1422,23 +1542,25 @@
    AT THE ZAPTEL LEVEL.  zt_ec_chunk will not echo cancel if it should
    not be doing so.  rxchunk is modified in-place */
 
-extern void zt_ec_chunk(struct zt_chan *chan, unsigned char *rxchunk, const unsigned char *txchunk);
-extern void zt_ec_span(struct zt_span *span);
+void zt_ec_chunk(struct zt_chan *chan, unsigned char *rxchunk, const unsigned char *txchunk);
+void zt_ec_span(struct zt_span *span);
+
+extern struct file_operations *zt_transcode_fops;
 
 /* Don't use these directly -- they're not guaranteed to
    be there. */
 extern short __zt_mulaw[256];
 extern short __zt_alaw[256];
 #ifdef CONFIG_CALC_XLAW
-extern u_char __zt_lineartoulaw(short a);
-extern u_char __zt_lineartoalaw(short a);
+u_char __zt_lineartoulaw(short a);
+u_char __zt_lineartoalaw(short a);
 #else
 extern u_char __zt_lin2mu[16384];
 extern u_char __zt_lin2a[16384];
 #endif
 
 /* Used by dynamic zaptel -- don't use directly */
-extern void zt_set_dynamic_ioctl(int (*func)(unsigned int cmd, unsigned long data));
+void zt_set_dynamic_ioctl(int (*func)(unsigned int cmd, unsigned long data));
 
 /* Used privately by zaptel.  Avoid touching directly */
 struct zt_tone {
@@ -1604,6 +1726,34 @@
 
 #define	ZT_RADPAR_REMCOMMAND 17	/* Remote conrtol write data block & do cmd */
 
+/* Data formats for capabilities and frames alike (from Asterisk) */
+/*! G.723.1 compression */
+#define ZT_FORMAT_G723_1	(1 << 0)
+/*! GSM compression */
+#define ZT_FORMAT_GSM		(1 << 1)
+/*! Raw mu-law data (G.711) */
+#define ZT_FORMAT_ULAW		(1 << 2)
+/*! Raw A-law data (G.711) */
+#define ZT_FORMAT_ALAW		(1 << 3)
+/*! ADPCM (G.726, 32kbps) */
+#define ZT_FORMAT_G726		(1 << 4)
+/*! ADPCM (IMA) */
+#define ZT_FORMAT_ADPCM		(1 << 5)
+/*! Raw 16-bit Signed Linear (8000 Hz) PCM */
+#define ZT_FORMAT_SLINEAR	(1 << 6)
+/*! LPC10, 180 samples/frame */
+#define ZT_FORMAT_LPC10		(1 << 7)
+/*! G.729A audio */
+#define ZT_FORMAT_G729A		(1 << 8)
+/*! SpeeX Free Compression */
+#define ZT_FORMAT_SPEEX		(1 << 9)
+/*! iLBC Free Compression */
+#define ZT_FORMAT_ILBC		(1 << 10)
+/*! Maximum audio format */
+#define ZT_FORMAT_MAX_AUDIO	(1 << 15)
+/*! Maximum audio mask */
+#define ZT_FORMAT_AUDIO_MASK	((1 << 16) - 1)
+
 #define	ZT_RADPAR_DEEMP 18 /* Audio De-empahsis (on or off) */ 
 
 #define	ZT_RADPAR_PREEMP 19 /* Audio Pre-empahsis (on or off) */ 



More information about the zaptel-commits mailing list