[svn-commits] tilghman: trunk r89071 - in /trunk: channels/ codecs/ include/asterisk/ main/

SVN commits to the Digium repositories svn-commits at lists.digium.com
Tue Nov 6 16:51:48 CST 2007


Author: tilghman
Date: Tue Nov  6 16:51:48 2007
New Revision: 89071

URL: http://svn.digium.com/view/asterisk?view=rev&rev=89071
Log:
Commit some cleanups to the format type code.
 - Remove the AST_FORMAT_MAX_* types, as these are consuming 3 out of our available 32 bits.
 - Add a native slin16 type, so that 16kHz codecs can translate without losing resolution.
   (This doesn't affect anything immediately, until another codec has wb support.)

Modified:
    trunk/channels/chan_gtalk.c
    trunk/channels/chan_h323.c
    trunk/channels/chan_jingle.c
    trunk/channels/chan_mgcp.c
    trunk/channels/chan_phone.c
    trunk/channels/chan_sip.c
    trunk/channels/chan_skinny.c
    trunk/codecs/codec_g722.c
    trunk/include/asterisk/frame.h
    trunk/include/asterisk/translate.h
    trunk/main/file.c
    trunk/main/frame.c
    trunk/main/rtp.c
    trunk/main/translate.c

Modified: trunk/channels/chan_gtalk.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_gtalk.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/channels/chan_gtalk.c (original)
+++ trunk/channels/chan_gtalk.c Tue Nov  6 16:51:48 2007
@@ -198,7 +198,7 @@
 static const struct ast_channel_tech gtalk_tech = {
 	.type = "Gtalk",
 	.description = "Gtalk Channel Driver",
-	.capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1),
+	.capabilities = AST_FORMAT_AUDIO_MASK,
 	.requester = gtalk_request,
 	.send_digit_begin = gtalk_digit_begin,
 	.send_digit_end = gtalk_digit_end,

Modified: trunk/channels/chan_h323.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_h323.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/channels/chan_h323.c (original)
+++ trunk/channels/chan_h323.c Tue Nov  6 16:51:48 2007
@@ -249,7 +249,7 @@
 static const struct ast_channel_tech oh323_tech = {
 	.type = "H323",
 	.description = tdesc,
-	.capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1),
+	.capabilities = AST_FORMAT_AUDIO_MASK,
 	.properties = AST_CHAN_TP_WANTSJITTER | AST_CHAN_TP_CREATESJITTER,
 	.requester = oh323_request,
 	.send_digit_begin = oh323_digit_begin,
@@ -1739,7 +1739,7 @@
 		return NULL;
 	}
 	oldformat = format;
-	format &= ((AST_FORMAT_MAX_AUDIO << 1) - 1);
+	format &= AST_FORMAT_AUDIO_MASK;
 	if (!format) {
 		ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format '%d'\n", format);
 		oh323_destroy(pvt);

Modified: trunk/channels/chan_jingle.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_jingle.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/channels/chan_jingle.c (original)
+++ trunk/channels/chan_jingle.c Tue Nov  6 16:51:48 2007
@@ -198,7 +198,7 @@
 static const struct ast_channel_tech jingle_tech = {
 	.type = "Jingle",
 	.description = "Jingle Channel Driver",
-	.capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1),
+	.capabilities = AST_FORMAT_AUDIO_MASK,
 	.requester = jingle_request,
 	.send_digit_begin = jingle_digit_begin,
 	.send_digit_end = jingle_digit_end,
@@ -340,10 +340,7 @@
 				continue;
 			if (alreadysent & pref_codec)
 				continue;
-			if (pref_codec <= AST_FORMAT_MAX_AUDIO)
-				add_codec_to_answer(p, pref_codec, dcodecs);
-			else
-				add_codec_to_answer(p, pref_codec, dcodecs);
+			add_codec_to_answer(p, pref_codec, dcodecs);
 			alreadysent |= pref_codec;
 		}
 		payload_red = iks_new("payload-type");

Modified: trunk/channels/chan_mgcp.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_mgcp.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/channels/chan_mgcp.c (original)
+++ trunk/channels/chan_mgcp.c Tue Nov  6 16:51:48 2007
@@ -2076,7 +2076,7 @@
 	snprintf(c, sizeof(c), "c=IN IP4 %s\r\n", ast_inet_ntoa(dest.sin_addr));
 	ast_copy_string(t, "t=0 0\r\n", sizeof(t));
 	snprintf(m, sizeof(m), "m=audio %d RTP/AVP", ntohs(dest.sin_port));
-	for (x = 1; x <= AST_FORMAT_MAX_AUDIO; x <<= 1) {
+	for (x = 1; x <= AST_FORMAT_AUDIO_MASK; x <<= 1) {
 		if (p->capability & x) {
 			if (mgcpdebug) {
 				ast_verbose("Answering with capability %d\n", x);
@@ -2142,7 +2142,7 @@
 		return 0;
 	}
 	ast_copy_string(local, "p:20", sizeof(local));
-	for (x=1;x<= AST_FORMAT_MAX_AUDIO; x <<= 1) {
+	for (x = 1; x <= AST_FORMAT_AUDIO_MASK; x <<= 1) {
 		if (p->capability & x) {
 			snprintf(tmp, sizeof(tmp), ", a:%s", ast_rtp_lookup_mime_subtype(1, x, 0));
 			strncat(local, tmp, sizeof(local) - strlen(local) - 1);
@@ -2172,7 +2172,7 @@
 	struct mgcp_endpoint *p = sub->parent;
 
 	ast_copy_string(local, "p:20", sizeof(local));
-	for (x=1;x<= AST_FORMAT_MAX_AUDIO; x <<= 1) {
+	for (x = 1; x <= AST_FORMAT_AUDIO_MASK; x <<= 1) {
 		if (p->capability & x) {
 			snprintf(tmp, sizeof(tmp), ", a:%s", ast_rtp_lookup_mime_subtype(1, x, 0));
 			strncat(local, tmp, sizeof(local) - strlen(local) - 1);

Modified: trunk/channels/chan_phone.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_phone.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/channels/chan_phone.c (original)
+++ trunk/channels/chan_phone.c Tue Nov  6 16:51:48 2007
@@ -594,7 +594,7 @@
 	}
 	p->fr.samples = 240;
 	p->fr.datalen = res;
-	p->fr.frametype = p->lastinput <= AST_FORMAT_MAX_AUDIO ?
+	p->fr.frametype = p->lastinput <= AST_FORMAT_AUDIO_MASK ?
                           AST_FRAME_VOICE : 
 			  p->lastinput <= AST_FORMAT_PNG ? AST_FRAME_IMAGE 
 			  : AST_FRAME_VIDEO;

Modified: trunk/channels/chan_sip.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_sip.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/channels/chan_sip.c (original)
+++ trunk/channels/chan_sip.c Tue Nov  6 16:51:48 2007
@@ -154,8 +154,6 @@
 #endif
 
 #define XMIT_ERROR		-2
-
-#define VIDEO_CODEC_MASK        0x1fc0000 /*!< Video codecs from H.261 thru AST_FORMAT_MAX_VIDEO */
 
 /* #define VOCAL_DATA_HACK */
 
@@ -7228,20 +7226,20 @@
 	}
 
 	/* Now send any other common audio and video codecs, and non-codec formats: */
-	for (x = 1; x <= (needtext ? AST_FORMAT_MAX_TEXT : (needvideo ? AST_FORMAT_MAX_VIDEO : AST_FORMAT_MAX_AUDIO)); x <<= 1) {
+	for (x = 1; x <= (needtext ? AST_FORMAT_TEXT_MASK : (needvideo ? AST_FORMAT_VIDEO_MASK : AST_FORMAT_AUDIO_MASK)); x <<= 1) {
 		if (!(capability & x))	/* Codec not requested */
 			continue;
 
 		if (alreadysent & x)	/* Already added to SDP */
 			continue;
 
-		if (x <= AST_FORMAT_MAX_AUDIO)
+		if (x & AST_FORMAT_AUDIO_MASK)
 			add_codec_to_sdp(p, x, SDP_SAMPLE_RATE(x),
 				 &m_audio, &a_audio, debug, &min_audio_packet_size);
-		else if (x <= AST_FORMAT_MAX_VIDEO) 
+		else if (x & AST_FORMAT_VIDEO_MASK) 
 			add_vcodec_to_sdp(p, x, 90000,
 				 &m_video, &a_video, debug, &min_video_packet_size);
-		else if (x <= AST_FORMAT_MAX_TEXT)
+		else if (x & AST_FORMAT_TEXT_MASK)
 			add_tcodec_to_sdp(p, x, 1000,
 				 &m_text, &a_text, debug, &min_text_packet_size);
 	}

Modified: trunk/channels/chan_skinny.c
URL: http://svn.digium.com/view/asterisk/trunk/channels/chan_skinny.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/channels/chan_skinny.c (original)
+++ trunk/channels/chan_skinny.c Tue Nov  6 16:51:48 2007
@@ -1239,7 +1239,7 @@
 static const struct ast_channel_tech skinny_tech = {
 	.type = "Skinny",
 	.description = tdesc,
-	.capabilities = ((AST_FORMAT_MAX_AUDIO << 1) - 1),
+	.capabilities = AST_FORMAT_AUDIO_MASK,
 	.properties = AST_CHAN_TP_WANTSJITTER | AST_CHAN_TP_CREATESJITTER,
 	.requester = skinny_request,
 	.devicestate = skinny_devicestate,
@@ -5395,7 +5395,7 @@
 
 	oldformat = format;
 	
-	if (!(format &= ((AST_FORMAT_MAX_AUDIO << 1) - 1))) {
+	if (!(format &= AST_FORMAT_AUDIO_MASK)) {
 		ast_log(LOG_NOTICE, "Asked to get a channel of unsupported format '%d'\n", format);
 		return NULL;	
 	}		

Modified: trunk/codecs/codec_g722.c
URL: http://svn.digium.com/view/asterisk/trunk/codecs/codec_g722.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/codecs/codec_g722.c (original)
+++ trunk/codecs/codec_g722.c Tue Nov  6 16:51:48 2007
@@ -74,12 +74,30 @@
 	return 0;
 }
 
+static int lin16tog722_new(struct ast_trans_pvt *pvt)
+{
+	struct g722_encoder_pvt *tmp = pvt->pvt;
+
+	g722_encode_init(&tmp->g722, 64000, 0);
+
+	return 0;
+}
+
 /*! \brief init a new instance of g722_encoder_pvt. */
 static int g722tolin_new(struct ast_trans_pvt *pvt)
 {
 	struct g722_decoder_pvt *tmp = pvt->pvt;
 
 	g722_decode_init(&tmp->g722, 64000, G722_SAMPLE_RATE_8000);
+
+	return 0;
+}
+
+static int g722tolin16_new(struct ast_trans_pvt *pvt)
+{
+	struct g722_decoder_pvt *tmp = pvt->pvt;
+
+	g722_decode_init(&tmp->g722, 64000, 0);
 
 	return 0;
 }
@@ -125,11 +143,39 @@
 	return &f;
 }
 
+static struct ast_frame *g722tolin16_sample(void)
+{
+	static struct ast_frame f = {
+		.frametype = AST_FRAME_VOICE,
+		.subclass = AST_FORMAT_G722,
+		.datalen = sizeof(slin_g722_ex),
+		.samples = sizeof(slin_g722_ex) / sizeof(slin_g722_ex[0]),
+		.src = __PRETTY_FUNCTION__,
+		.data = slin_g722_ex,
+	};
+
+	return &f;
+}
+
 static struct ast_frame *lintog722_sample (void)
 {
 	static struct ast_frame f = {
 		.frametype = AST_FRAME_VOICE,
 		.subclass = AST_FORMAT_SLINEAR,
+		.datalen = sizeof(slin_g722_ex),
+		.samples = sizeof(slin_g722_ex) / sizeof(slin_g722_ex[0]),
+		.src = __PRETTY_FUNCTION__,
+		.data = slin_g722_ex,
+	};
+
+	return &f;
+}
+
+static struct ast_frame *lin16tog722_sample (void)
+{
+	static struct ast_frame f = {
+		.frametype = AST_FRAME_VOICE,
+		.subclass = AST_FORMAT_SLINEAR16,
 		.datalen = sizeof(slin_g722_ex),
 		.samples = sizeof(slin_g722_ex) / sizeof(slin_g722_ex[0]),
 		.src = __PRETTY_FUNCTION__,
@@ -159,6 +205,31 @@
 	.newpvt = lintog722_new,	/* same for both directions */
 	.framein = lintog722_framein,
 	.sample = lintog722_sample,
+	.desc_size = sizeof(struct g722_encoder_pvt),
+	.buffer_samples = BUFFER_SAMPLES,
+	.buf_size = BUFFER_SAMPLES,
+};
+
+static struct ast_translator g722tolin16 = {
+	.name = "g722tolin16",
+	.srcfmt = AST_FORMAT_G722,
+	.dstfmt = AST_FORMAT_SLINEAR16,
+	.newpvt = g722tolin16_new,	/* same for both directions */
+	.framein = g722tolin_framein,
+	.sample = g722tolin16_sample,
+	.desc_size = sizeof(struct g722_decoder_pvt),
+	.buffer_samples = BUFFER_SAMPLES,
+	.buf_size = BUFFER_SAMPLES,
+	.plc_samples = 160,
+};
+
+static struct ast_translator lin16tog722 = {
+	.name = "lin16tog722",
+	.srcfmt = AST_FORMAT_SLINEAR16,
+	.dstfmt = AST_FORMAT_G722,
+	.newpvt = lin16tog722_new,	/* same for both directions */
+	.framein = lintog722_framein,
+	.sample = lin16tog722_sample,
 	.desc_size = sizeof(struct g722_encoder_pvt),
 	.buffer_samples = BUFFER_SAMPLES,
 	.buf_size = BUFFER_SAMPLES,
@@ -198,6 +269,8 @@
 
 	res |= ast_unregister_translator(&g722tolin);
 	res |= ast_unregister_translator(&lintog722);
+	res |= ast_unregister_translator(&g722tolin16);
+	res |= ast_unregister_translator(&lin16tog722);
 
 	return res;
 }
@@ -205,13 +278,14 @@
 static int load_module(void)
 {
 	int res = 0;
-
 
 	if (parse_config(0))
 		return AST_MODULE_LOAD_DECLINE;
 
 	res |= ast_register_translator(&g722tolin);
 	res |= ast_register_translator(&lintog722);
+	res |= ast_register_translator(&g722tolin16);
+	res |= ast_register_translator(&lin16tog722);
 
 	if (res) {
 		unload_module();

Modified: trunk/include/asterisk/frame.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/frame.h?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/include/asterisk/frame.h (original)
+++ trunk/include/asterisk/frame.h Tue Nov  6 16:51:48 2007
@@ -243,8 +243,8 @@
 #define AST_FORMAT_G726		(1 << 11)
 /*! G.722 */
 #define AST_FORMAT_G722		(1 << 12)
-/*! Maximum audio format */
-#define AST_FORMAT_MAX_AUDIO	(1 << 15)
+/*! Raw 16-bit Signed Linear (16000 Hz) PCM */
+#define AST_FORMAT_SLINEAR16	(1 << 15)
 /*! Maximum audio mask */
 #define AST_FORMAT_AUDIO_MASK   ((1 << 16)-1)
 /*! JPEG Images */
@@ -261,14 +261,10 @@
 #define AST_FORMAT_H264		(1 << 21)
 /*! MPEG4 Video */
 #define AST_FORMAT_MP4_VIDEO	(1 << 22)
-/*! Maximum video format */
-#define AST_FORMAT_MAX_VIDEO	(1 << 24)
 #define AST_FORMAT_VIDEO_MASK   (((1 << 25)-1) & ~(AST_FORMAT_AUDIO_MASK))
 /*! T.140 Text format - ITU T.140, RFC 4351*/
 #define AST_FORMAT_T140		(1 << 25)
-/*! Maximum text mask */
-#define AST_FORMAT_MAX_TEXT	(1 << 26)
-#define AST_FORMAT_TEXT_MASK   (((1 << 27)-1) & ~(AST_FORMAT_AUDIO_MASK) & ~(AST_FORMAT_VIDEO_MASK))
+#define AST_FORMAT_TEXT_MASK   (((1 << 30)-1) & ~(AST_FORMAT_AUDIO_MASK) & ~(AST_FORMAT_VIDEO_MASK))
 
 enum ast_control_frame_type {
 	AST_CONTROL_HANGUP = 1,		/*!< Other end has hungup */
@@ -361,9 +357,9 @@
 
 /*! \brief Definition of supported media formats (codecs) */
 struct ast_format_list {
-	int visible;	/*!< Can we see this entry */
 	int bits;	/*!< bitmask value */
 	char *name;	/*!< short name */
+	int samplespersecond; /*!< Number of samples per second (8000/16000) */
 	char *desc;	/*!< Description */
 	int fr_len;	/*!< Single frame length in bytes */
 	int min_ms;	/*!< Min value */

Modified: trunk/include/asterisk/translate.h
URL: http://svn.digium.com/view/asterisk/trunk/include/asterisk/translate.h?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/include/asterisk/translate.h (original)
+++ trunk/include/asterisk/translate.h Tue Nov  6 16:51:48 2007
@@ -44,7 +44,7 @@
  * related to run-time operation (size of buffers, auxiliary
  * descriptors, etc).
  *
- * A coded registers itself by filling the relevant fields
+ * A codec registers itself by filling the relevant fields
  * of a structure and passing it as an argument to
  * ast_register_translator(). The structure should not be
  * modified after a successful registration, and its address

Modified: trunk/main/file.c
URL: http://svn.digium.com/view/asterisk/trunk/main/file.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/main/file.c (original)
+++ trunk/main/file.c Tue Nov  6 16:51:48 2007
@@ -148,7 +148,7 @@
 	int res = -1;
 	int alt = 0;
 	if (f->frametype == AST_FRAME_VIDEO) {
-		if (fs->fmt->format < AST_FORMAT_MAX_AUDIO) {
+		if (fs->fmt->format & AST_FORMAT_AUDIO_MASK) {
 			/* This is the audio portion.  Call the video one... */
 			if (!fs->vfs && fs->filename) {
 				const char *type = ast_getformatname(f->subclass & ~0x1);
@@ -381,7 +381,7 @@
 				struct ast_filestream *s;
 
 				if ( !(chan->writeformat & f->format) &&
-				     !(f->format >= AST_FORMAT_MAX_AUDIO && fmt)) {
+				     !(f->format & AST_FORMAT_AUDIO_MASK && fmt)) {
 					ast_free(fn);
 					continue;	/* not a supported format */
 				}
@@ -407,7 +407,7 @@
 				s->fmt = f;
 				s->trans = NULL;
 				s->filename = NULL;
-				if (s->fmt->format < AST_FORMAT_MAX_AUDIO) {
+				if (s->fmt->format & AST_FORMAT_AUDIO_MASK) {
 					if (chan->stream)
 						ast_closestream(chan->stream);
 					chan->stream = s;
@@ -577,7 +577,7 @@
 	if (buf == NULL)
 		return NULL;
 
-	for (format = AST_FORMAT_MAX_AUDIO << 1; format <= AST_FORMAT_MAX_VIDEO; format = format << 1) {
+	for (format = AST_FORMAT_AUDIO_MASK + 1; format <= AST_FORMAT_VIDEO_MASK; format = format << 1) {
 		int fd;
 		const char *fmt;
 
@@ -710,7 +710,7 @@
 {
 	enum fsread_res res;
 
-	if (s->fmt->format < AST_FORMAT_MAX_AUDIO)
+	if (s->fmt->format & AST_FORMAT_AUDIO_MASK)
 		res = ast_readaudio_callback(s);
 	else
 		res = ast_readvideo_callback(s);
@@ -749,7 +749,7 @@
 	size_t size = 0;
 	/* Stop a running stream if there is one */
 	if (f->owner) {
-		if (f->fmt->format < AST_FORMAT_MAX_AUDIO) {
+		if (f->fmt->format & AST_FORMAT_AUDIO_MASK) {
 			f->owner->stream = NULL;
 			if (f->owner->streamid > -1)
 				ast_sched_del(f->owner->sched, f->owner->streamid);

Modified: trunk/main/frame.c
URL: http://svn.digium.com/view/asterisk/trunk/main/frame.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/main/frame.c (original)
+++ trunk/main/frame.c Tue Nov  6 16:51:48 2007
@@ -104,30 +104,28 @@
 
 /*! \brief Definition of supported media formats (codecs) */
 static struct ast_format_list AST_FORMAT_LIST[] = {
-	{ 1, AST_FORMAT_G723_1 , "g723" , "G.723.1", 20, 30, 300, 30, 30 },	                                  /*!< G723.1 */
-	{ 1, AST_FORMAT_GSM, "gsm" , "GSM", 33, 20, 300, 20, 20 },		                                  /*!< codec_gsm.c */
-	{ 1, AST_FORMAT_ULAW, "ulaw", "G.711 u-law", 80, 10, 150, 10, 20 },	                                  /*!< codec_ulaw.c */
-	{ 1, AST_FORMAT_ALAW, "alaw", "G.711 A-law", 80, 10, 150, 10, 20 },	                                  /*!< codec_alaw.c */
-	{ 1, AST_FORMAT_G726, "g726", "G.726 RFC3551", 40, 10, 300, 10, 20 },	                                  /*!< codec_g726.c */
-	{ 1, AST_FORMAT_ADPCM, "adpcm" , "ADPCM", 40, 10, 300, 10, 20 },	                                  /*!< codec_adpcm.c */
-	{ 1, AST_FORMAT_SLINEAR, "slin", "16 bit Signed Linear PCM", 160, 10, 70, 10, 20, AST_SMOOTHER_FLAG_BE }, /*!< Signed linear */
-	{ 1, AST_FORMAT_LPC10, "lpc10", "LPC10", 7, 20, 20, 20, 20 },		                                  /*!< codec_lpc10.c */ 
-	{ 1, AST_FORMAT_G729A, "g729", "G.729A", 10, 10, 230, 10, 20, AST_SMOOTHER_FLAG_G729 },	                  /*!< Binary commercial distribution */
-	{ 1, AST_FORMAT_SPEEX, "speex", "SpeeX", 10, 10, 60, 10, 20 },		                                  /*!< codec_speex.c */
-	{ 1, AST_FORMAT_ILBC, "ilbc", "iLBC", 50, 30, 30, 30, 30 },		                                  /*!< codec_ilbc.c */ /* inc=30ms - workaround */
-	{ 1, AST_FORMAT_G726_AAL2, "g726aal2", "G.726 AAL2", 40, 10, 300, 10, 20 },	                          /*!< codec_g726.c */
-	{ 1, AST_FORMAT_G722, "g722", "G722", 80, 10, 150, 10, 20 },		                                  /*!< G722 Passthrough */
-	{ 0, AST_FORMAT_MAX_AUDIO, "maxaudio", "Maximum audio format" },	
-	{ 1, AST_FORMAT_JPEG, "jpeg", "JPEG image"},	                                                          /*!< See format_jpeg.c */
-	{ 1, AST_FORMAT_PNG, "png", "PNG image"},	                                                          /*!< PNG Image format */
-	{ 1, AST_FORMAT_H261, "h261", "H.261 Video" },	                                                          /*!< H.261 Video Passthrough */
-	{ 1, AST_FORMAT_H263, "h263", "H.263 Video" },	                                                          /*!< H.263 Passthrough support, see format_h263.c */
-	{ 1, AST_FORMAT_H263_PLUS, "h263p", "H.263+ Video" },	                                                  /*!< H.263plus passthrough support See format_h263.c */
-	{ 1, AST_FORMAT_H264, "h264", "H.264 Video" },	                                                          /*!< Passthrough support, see format_h263.c */
-	{ 1, AST_FORMAT_MP4_VIDEO, "mpeg4", "MPEG4 Video" },                                                      /*!< Passthrough support for MPEG4 */
-	{ 0, AST_FORMAT_MAX_VIDEO, "maxvideo", "Maximum video format" },
-	{ 1, AST_FORMAT_T140, "t140", "Passthrough T.140 Realtime Text" },                                        /*!< Passthrough support for T.140 Realtime Text */
-	{ 0, AST_FORMAT_MAX_TEXT, "maxtext", "Maximum text format" },
+	{ AST_FORMAT_G723_1 , "g723", 8000, "G.723.1", 20, 30, 300, 30, 30 },                                  /*!< G723.1 */
+	{ AST_FORMAT_GSM, "gsm", 8000, "GSM", 33, 20, 300, 20, 20 },                                           /*!< codec_gsm.c */
+	{ AST_FORMAT_ULAW, "ulaw", 8000, "G.711 u-law", 80, 10, 150, 10, 20 },                                 /*!< codec_ulaw.c */
+	{ AST_FORMAT_ALAW, "alaw", 8000, "G.711 A-law", 80, 10, 150, 10, 20 },                                 /*!< codec_alaw.c */
+	{ AST_FORMAT_G726, "g726", 8000, "G.726 RFC3551", 40, 10, 300, 10, 20 },                               /*!< codec_g726.c */
+	{ AST_FORMAT_ADPCM, "adpcm" , 8000, "ADPCM", 40, 10, 300, 10, 20 },                                    /*!< codec_adpcm.c */
+	{ AST_FORMAT_SLINEAR, "slin", 8000, "16 bit Signed Linear PCM", 160, 10, 70, 10, 20, AST_SMOOTHER_FLAG_BE }, /*!< Signed linear */
+	{ AST_FORMAT_LPC10, "lpc10", 8000, "LPC10", 7, 20, 20, 20, 20 },                                       /*!< codec_lpc10.c */ 
+	{ AST_FORMAT_G729A, "g729", 8000, "G.729A", 10, 10, 230, 10, 20, AST_SMOOTHER_FLAG_G729 },             /*!< Binary commercial distribution */
+	{ AST_FORMAT_SPEEX, "speex", 8000, "SpeeX", 10, 10, 60, 10, 20 },                                      /*!< codec_speex.c */
+	{ AST_FORMAT_ILBC, "ilbc", 8000, "iLBC", 50, 30, 30, 30, 30 },                                         /*!< codec_ilbc.c */ /* inc=30ms - workaround */
+	{ AST_FORMAT_G726_AAL2, "g726aal2", 8000, "G.726 AAL2", 40, 10, 300, 10, 20 },                         /*!< codec_g726.c */
+	{ AST_FORMAT_G722, "g722", 16000, "G722", 80, 10, 150, 10, 20 },                                       /*!< codec_g722.c */
+	{ AST_FORMAT_SLINEAR16, "slin16", 16000, "16 bit Signed Linear PCM (16kHz)", 320, 10, 70, 10, 20 },    /*!< Signed linear (16kHz) */
+	{ AST_FORMAT_JPEG, "jpeg", 0, "JPEG image"},                                                           /*!< See format_jpeg.c */
+	{ AST_FORMAT_PNG, "png", 0, "PNG image"},                                                              /*!< PNG Image format */
+	{ AST_FORMAT_H261, "h261", 0, "H.261 Video" },                                                         /*!< H.261 Video Passthrough */
+	{ AST_FORMAT_H263, "h263", 0, "H.263 Video" },                                                         /*!< H.263 Passthrough support, see format_h263.c */
+	{ AST_FORMAT_H263_PLUS, "h263p", 0, "H.263+ Video" },                                                  /*!< H.263plus passthrough support See format_h263.c */
+	{ AST_FORMAT_H264, "h264", 0, "H.264 Video" },                                                         /*!< Passthrough support, see format_h263.c */
+	{ AST_FORMAT_MP4_VIDEO, "mpeg4", 0, "MPEG4 Video" },                                                   /*!< Passthrough support for MPEG4 */
+	{ AST_FORMAT_T140, "t140", 0, "Passthrough T.140 Realtime Text" },                                     /*!< Passthrough support for T.140 Realtime Text */
 };
 
 struct ast_frame ast_null_frame = { AST_FRAME_NULL, };
@@ -525,7 +523,7 @@
 	int x;
 	char *ret = "unknown";
 	for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
-		if (AST_FORMAT_LIST[x].visible && AST_FORMAT_LIST[x].bits == format) {
+		if (AST_FORMAT_LIST[x].bits == format) {
 			ret = AST_FORMAT_LIST[x].name;
 			break;
 		}
@@ -547,7 +545,7 @@
 	size -= len;
 	start = end;
 	for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
-		if (AST_FORMAT_LIST[x].visible && (AST_FORMAT_LIST[x].bits & format)) {
+		if (AST_FORMAT_LIST[x].bits & format) {
 			snprintf(end, size,"%s|",AST_FORMAT_LIST[x].name);
 			len = strlen(end);
 			end += len;
@@ -566,6 +564,7 @@
 	char *realname;
 } ast_codec_alias_table[] = {
 	{ "slinear", "slin"},
+	{ "slinear16", "slin16"},
 	{ "g723.1", "g723"},
 };
 
@@ -586,9 +585,9 @@
 
 	all = strcasecmp(name, "all") ? 0 : 1;
 	for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
-		if (AST_FORMAT_LIST[x].visible && (all || 
+		if (all || 
 			  !strcasecmp(AST_FORMAT_LIST[x].name,name) ||
-			  !strcasecmp(AST_FORMAT_LIST[x].name,ast_expand_codec_alias(name)))) {
+			  !strcasecmp(AST_FORMAT_LIST[x].name,ast_expand_codec_alias(name))) {
 			format |= AST_FORMAT_LIST[x].bits;
 			if (!all)
 				break;
@@ -603,7 +602,7 @@
 	int x;
 	char *ret = "unknown";
 	for (x = 0; x < sizeof(AST_FORMAT_LIST) / sizeof(AST_FORMAT_LIST[0]); x++) {
-		if (AST_FORMAT_LIST[x].visible && AST_FORMAT_LIST[x].bits == codec) {
+		if (AST_FORMAT_LIST[x].bits == codec) {
 			ret = AST_FORMAT_LIST[x].desc;
 			break;
 		}
@@ -1357,7 +1356,7 @@
 		samples = speex_samples(f->data, f->datalen);
 		break;
 	case AST_FORMAT_G723_1:
-                samples = g723_samples(f->data, f->datalen);
+		samples = g723_samples(f->data, f->datalen);
 		break;
 	case AST_FORMAT_ILBC:
 		samples = 240 * (f->datalen / 50);
@@ -1369,10 +1368,11 @@
 		samples = f->datalen * 8;
 		break;
 	case AST_FORMAT_SLINEAR:
+	case AST_FORMAT_SLINEAR16:
 		samples = f->datalen / 2;
 		break;
 	case AST_FORMAT_LPC10:
-                /* assumes that the RTP packet contains one LPC10 frame */
+		/* assumes that the RTP packet contains one LPC10 frame */
 		samples = 22 * 8;
 		samples += (((char *)(f->data))[7] & 0x1) * 8;
 		break;
@@ -1411,10 +1411,12 @@
 		len = samples / 8;
 		break;
 	case AST_FORMAT_SLINEAR:
+	case AST_FORMAT_SLINEAR16:
 		len = samples * 2;
 		break;
 	case AST_FORMAT_ULAW:
 	case AST_FORMAT_ALAW:
+	case AST_FORMAT_G722:
 		len = samples;
 		break;
 	case AST_FORMAT_ADPCM:

Modified: trunk/main/rtp.c
URL: http://svn.digium.com/view/asterisk/trunk/main/rtp.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/main/rtp.c (original)
+++ trunk/main/rtp.c Tue Nov  6 16:51:48 2007
@@ -1571,7 +1571,7 @@
 		return f ? f : &ast_null_frame;
 	}
 	rtp->lastrxformat = rtp->f.subclass = rtpPT.code;
-	rtp->f.frametype = (rtp->f.subclass < AST_FORMAT_MAX_AUDIO) ? AST_FRAME_VOICE : (rtp->f.subclass < AST_FORMAT_MAX_VIDEO) ? AST_FRAME_VIDEO : AST_FRAME_TEXT;
+	rtp->f.frametype = (rtp->f.subclass & AST_FORMAT_AUDIO_MASK) ? AST_FRAME_VOICE : (rtp->f.subclass & AST_FORMAT_VIDEO_MASK) ? AST_FRAME_VIDEO : AST_FRAME_TEXT;
 
 	if (!rtp->lastrxts)
 		rtp->lastrxts = timestamp;
@@ -1586,7 +1586,7 @@
 	rtp->f.data = rtp->rawdata + hdrlen + AST_FRIENDLY_OFFSET;
 	rtp->f.offset = hdrlen + AST_FRIENDLY_OFFSET;
 	rtp->f.seqno = seqno;
-	if (rtp->f.subclass < AST_FORMAT_MAX_AUDIO) {
+	if (rtp->f.subclass & AST_FORMAT_AUDIO_MASK) {
 		rtp->f.samples = ast_codec_get_samples(&rtp->f);
 		if (rtp->f.subclass == AST_FORMAT_SLINEAR) 
 			ast_frame_byteswap_be(&rtp->f);
@@ -1595,7 +1595,7 @@
 		rtp->f.has_timing_info = 1;
 		rtp->f.ts = timestamp / 8;
 		rtp->f.len = rtp->f.samples / 8;
-	} else if(rtp->f.subclass < AST_FORMAT_MAX_VIDEO) {
+	} else if(rtp->f.subclass & AST_FORMAT_VIDEO_MASK) {
 		/* Video -- samples is # of samples vs. 90000 */
 		if (!rtp->lastividtimestamp)
 			rtp->lastividtimestamp = timestamp;
@@ -2958,7 +2958,7 @@
 
 	ms = calc_txstamp(rtp, &f->delivery);
 	/* Default prediction */
-	if (f->subclass < AST_FORMAT_MAX_AUDIO) {
+	if (f->subclass & AST_FORMAT_AUDIO_MASK) {
 		pred = rtp->lastts + f->samples;
 
 		/* Re-calculate last TS */
@@ -2973,7 +2973,7 @@
 				mark = 1;
 			}
 		}
-	} else if(f->subclass < AST_FORMAT_MAX_VIDEO) {
+	} else if(f->subclass & AST_FORMAT_VIDEO_MASK) {
 		mark = f->subclass & 0x1;
 		pred = rtp->lastovidtimestamp + f->samples;
 		/* Re-calculate last TS */

Modified: trunk/main/translate.c
URL: http://svn.digium.com/view/asterisk/trunk/main/translate.c?view=diff&rev=89071&r1=89070&r2=89071
==============================================================================
--- trunk/main/translate.c (original)
+++ trunk/main/translate.c Tue Nov  6 16:51:48 2007
@@ -806,7 +806,7 @@
 	   known audio formats to determine whether there exists
 	   a translation path from the source format to the
 	   destination format. */
-	for (x = 1; src_audio && x < AST_FORMAT_MAX_AUDIO; x <<= 1) {
+	for (x = 1; src_audio && (x & AST_FORMAT_AUDIO_MASK); x <<= 1) {
 		/* if this is not a desired format, nothing to do */
 		if (!dest & x)
 			continue;
@@ -832,7 +832,7 @@
 	   known video formats to determine whether there exists
 	   a translation path from the source format to the
 	   destination format. */
-	for (; src_video && x < AST_FORMAT_MAX_VIDEO; x <<= 1) {
+	for (; src_video && (x & AST_FORMAT_VIDEO_MASK); x <<= 1) {
 		/* if this is not a desired format, nothing to do */
 		if (!dest & x)
 			continue;




More information about the svn-commits mailing list