Revision
15036
Author
mikej
Date
2009-10-01 17:22:33 -0500 (Thu, 01 Oct 2009)

Log Message

move mod_voipcodecs to use spandsp instead of libvoipcodecs (windows build to follow)

Modified Paths

Diff

Modified: freeswitch/trunk/src/mod/codecs/mod_voipcodecs/Makefile (15035 => 15036)


--- freeswitch/trunk/src/mod/codecs/mod_voipcodecs/Makefile	2009-10-01 22:20:17 UTC (rev 15035)
+++ freeswitch/trunk/src/mod/codecs/mod_voipcodecs/Makefile	2009-10-01 22:22:33 UTC (rev 15036)
@@ -1,13 +1,28 @@
 BASE=../../../..
 
-VOIPCODECS_DIR=$(BASE)/libs/voipcodecs
-VOIPCODECS_LA=$(VOIPCODECS_DIR)/src/libvoipcodecs.la
+TIFF_DIR=$(BASE)/libs/tiff-3.8.2
+TIFF_LA=$(TIFF_DIR)/libtiff/libtiff.la
 
-LOCAL_CFLAGS=-I$(VOIPCODECS_DIR)/src
-LOCAL_LIBADD=$(VOIPCODECS_LA)
+SPANDSP_DIR=$(BASE)/libs/spandsp
+SPANDSP_LA=$(SPANDSP_DIR)/src/libspandsp.la
 
+LOCAL_CFLAGS=-I$(SPANDSP_DIR)/src -I$(TIFF_DIR)/libtiff
+LOCAL_LIBADD=$(SPANDSP_LA)
+
 include $(BASE)/build/modmake.rules
 
-$(VOIPCODECS_LA): $(VOIPCODECS_DIR) $(VOIPCODECS_DIR)/.update
-	cd $(VOIPCODECS_DIR) && $(MAKE)
+$(SPANDSP_LA): $(TIFF_LA) $(SPANDSP_DIR) $(SPANDSP_DIR)/.update
+	cd $(SPANDSP_DIR) && $(MAKE)
 	$(TOUCH_TARGET)
+
+$(TIFF_LA): $(TIFF_DIR) $(TIFF_DIR)/.update
+	cd $(TIFF_DIR) && $(MAKE)
+	$(TOUCH_TARGET)
+
+
+depend_install: $(DESTDIR)$(libdir)/libspandsp.la
+
+$(DESTDIR)$(libdir)/libspandsp.la: $(SPANDSP_LA)
+	cd $(SPANDSP_DIR) && $(MAKE) install
+
+

Modified: freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c (15035 => 15036)


--- freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c	2009-10-01 22:20:17 UTC (rev 15035)
+++ freeswitch/trunk/src/mod/codecs/mod_voipcodecs/mod_voipcodecs.c	2009-10-01 22:22:33 UTC (rev 15036)
@@ -33,7 +33,7 @@
  */
 
 #include <switch.h>
-#include "voipcodecs.h"
+#include "spandsp.h"
 
 SWITCH_MODULE_LOAD_FUNCTION(mod_voipcodecs_load);
 SWITCH_MODULE_DEFINITION(mod_voipcodecs, mod_voipcodecs_load, NULL, NULL);
@@ -41,8 +41,8 @@
 /*  LPC10     - START */
 
 struct lpc10_context {
-	lpc10_encode_state_t encoder_object;
-	lpc10_decode_state_t decoder_object;
+	lpc10_encode_state_t *encoder_object;
+	lpc10_decode_state_t *decoder_object;
 };
 
 static switch_status_t switch_lpc10_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
@@ -58,11 +58,11 @@
 	} else {
 
 		if (encoding) {
-			lpc10_encode_init(&context->encoder_object, TRUE);
+			context->encoder_object = lpc10_encode_init(context->encoder_object, TRUE);
 		}
 
 		if (decoding) {
-			lpc10_decode_init(&context->decoder_object, TRUE);
+			context->decoder_object = lpc10_decode_init(context->decoder_object, TRUE);
 		}
 
 		codec->private_info = context;
@@ -73,7 +73,18 @@
 
 static switch_status_t switch_lpc10_destroy(switch_codec_t *codec)
 {
+	struct lpc10_context *context = codec->private_info;
 	codec->private_info = NULL;
+
+	if (!context) {
+		return SWITCH_STATUS_FALSE;
+	}
+
+	if (context->encoder_object) lpc10_encode_free(context->encoder_object);
+	context->encoder_object = NULL;
+	if (context->decoder_object) lpc10_decode_free(context->decoder_object);
+	context->decoder_object = NULL;
+
 	return SWITCH_STATUS_SUCCESS;
 }
 
@@ -90,7 +101,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	*encoded_data_len = lpc10_encode(&context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2);
+	*encoded_data_len = lpc10_encode(context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2);
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -108,7 +119,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	*decoded_data_len = (2 * lpc10_decode(&context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len));
+	*decoded_data_len = (2 * lpc10_decode(context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len));
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -118,8 +129,8 @@
 
 /*  GSM       - START */
 struct gsm_context {
-	gsm0610_state_t decoder_object;
-	gsm0610_state_t encoder_object;
+	gsm0610_state_t *decoder_object;
+	gsm0610_state_t *encoder_object;
 };
 
 static switch_status_t switch_gsm_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
@@ -134,10 +145,10 @@
 		return SWITCH_STATUS_FALSE;
 	} else {
 		if (encoding) {
-			gsm0610_init(&context->encoder_object, GSM0610_PACKING_VOIP);
+			context->encoder_object = gsm0610_init(context->encoder_object, GSM0610_PACKING_VOIP);
 		}
 		if (decoding) {
-			gsm0610_init(&context->decoder_object, GSM0610_PACKING_VOIP);
+			context->decoder_object = gsm0610_init(context->decoder_object, GSM0610_PACKING_VOIP);
 		}
 
 		codec->private_info = context;
@@ -157,7 +168,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	*encoded_data_len = gsm0610_encode(&context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2);
+	*encoded_data_len = gsm0610_encode(context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2);
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -174,15 +185,26 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	*decoded_data_len = (2 * gsm0610_decode(&context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len));
+	*decoded_data_len = (2 * gsm0610_decode(context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len));
 
 	return SWITCH_STATUS_SUCCESS;
 }
 
 static switch_status_t switch_gsm_destroy(switch_codec_t *codec)
 {
-	/* We do not need to use release here as the pool memory is taken care of for us */
+	struct gsm_context *context = codec->private_info;
+
 	codec->private_info = NULL;
+
+	if (!context) {
+		return SWITCH_STATUS_FALSE;
+	}
+
+	if (context->decoder_object) gsm0610_free(context->decoder_object);
+	context->decoder_object = NULL;
+	if (context->encoder_object) gsm0610_free(context->encoder_object);
+	context->encoder_object = NULL;
+
 	return SWITCH_STATUS_SUCCESS;
 }
 
@@ -338,8 +360,8 @@
 /*  G722      - START */
 
 struct g722_context {
-	g722_decode_state_t decoder_object;
-	g722_encode_state_t encoder_object;
+	g722_decode_state_t *decoder_object;
+	g722_encode_state_t *encoder_object;
 };
 
 static switch_status_t switch_g722_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
@@ -354,10 +376,10 @@
 		return SWITCH_STATUS_FALSE;
 	} else {
 		if (encoding) {
-			g722_encode_init(&context->encoder_object, 64000, G722_PACKED);
+			context->encoder_object = g722_encode_init(context->encoder_object, 64000, G722_PACKED);
 		}
 		if (decoding) {
-			g722_decode_init(&context->decoder_object, 64000, G722_PACKED);
+			context->decoder_object = g722_decode_init(context->decoder_object, 64000, G722_PACKED);
 		}
 	}
 
@@ -378,7 +400,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	*encoded_data_len = g722_encode(&context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2);
+	*encoded_data_len = g722_encode(context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2);
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -396,15 +418,26 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	*decoded_data_len = (2 * g722_decode(&context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len));
+	*decoded_data_len = (2 * g722_decode(context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len));
 
 	return SWITCH_STATUS_SUCCESS;
 }
 
 static switch_status_t switch_g722_destroy(switch_codec_t *codec)
 {
-	/* We do not need to use release here as the pool memory is taken care of for us */
+	struct g722_context *context = codec->private_info;
+
 	codec->private_info = NULL;
+
+	if (!context) {
+		return SWITCH_STATUS_FALSE;
+	}
+
+	if (context->decoder_object) g722_decode_free(context->decoder_object);
+	context->decoder_object = NULL;
+	if (context->encoder_object) g722_encode_free(context->encoder_object);
+	context->encoder_object = NULL;
+
 	return SWITCH_STATUS_SUCCESS;
 }
 
@@ -416,27 +449,36 @@
 {
 	uint32_t encoding, decoding;
 	int packing = G726_PACKING_RIGHT;
-	g726_state_t *context;
+	g726_state_t *context = NULL;
 
 	encoding = (flags & SWITCH_CODEC_FLAG_ENCODE);
 	decoding = (flags & SWITCH_CODEC_FLAG_DECODE);
 
-	if (!(encoding || decoding) || (!(context = switch_core_alloc(codec->memory_pool, sizeof(*context))))) {
+	if (!(encoding || decoding)) {
 		return SWITCH_STATUS_FALSE;
-	} else {
-		if ((flags & SWITCH_CODEC_FLAG_AAL2 || strstr(codec->implementation->iananame, "AAL2"))) {
-			packing = G726_PACKING_LEFT;
-		}
+	} 
 
-		g726_init(context, codec->implementation->bits_per_second, G726_ENCODING_LINEAR, packing);
+	if ((flags & SWITCH_CODEC_FLAG_AAL2 || strstr(codec->implementation->iananame, "AAL2"))) {
+		packing = G726_PACKING_LEFT;
+	}
+	
+	context = g726_init(context, codec->implementation->bits_per_second, G726_ENCODING_LINEAR, packing);
+	
+	codec->private_info = context;
+	return SWITCH_STATUS_SUCCESS;
 
-		codec->private_info = context;
-		return SWITCH_STATUS_SUCCESS;
-	}
 }
 
 static switch_status_t switch_g726_destroy(switch_codec_t *codec)
 {
+	g726_state_t *context = codec->private_info;
+
+	if (!context) {
+		return SWITCH_STATUS_FALSE;
+	}
+
+	g726_free(context);
+
 	codec->private_info = NULL;
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -482,8 +524,8 @@
 /*  IMA_ADPCM - START */
 
 struct ima_adpcm_context {
-	ima_adpcm_state_t decoder_object;
-	ima_adpcm_state_t encoder_object;
+	ima_adpcm_state_t *decoder_object;
+	ima_adpcm_state_t *encoder_object;
 };
 
 static switch_status_t switch_adpcm_init(switch_codec_t *codec, switch_codec_flag_t flags, const switch_codec_settings_t *codec_settings)
@@ -498,10 +540,10 @@
 		return SWITCH_STATUS_FALSE;
 	} else {
 		if (encoding) {
-			ima_adpcm_init(&context->encoder_object, IMA_ADPCM_DVI4, 0);
+			context->encoder_object = ima_adpcm_init(context->encoder_object, IMA_ADPCM_DVI4, 0);
 		}
 		if (decoding) {
-			ima_adpcm_init(&context->decoder_object, IMA_ADPCM_DVI4, 0);
+			context->decoder_object = ima_adpcm_init(context->decoder_object, IMA_ADPCM_DVI4, 0);
 		}
 
 		codec->private_info = context;
@@ -522,7 +564,7 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	*encoded_data_len = ima_adpcm_encode(&context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2);
+	*encoded_data_len = ima_adpcm_encode(context->encoder_object, (uint8_t *) encoded_data, (int16_t *) decoded_data, decoded_data_len / 2);
 
 	return SWITCH_STATUS_SUCCESS;
 }
@@ -540,15 +582,26 @@
 		return SWITCH_STATUS_FALSE;
 	}
 
-	*decoded_data_len = (2 * ima_adpcm_decode(&context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len));
+	*decoded_data_len = (2 * ima_adpcm_decode(context->decoder_object, (int16_t *) decoded_data, (uint8_t *) encoded_data, encoded_data_len));
 
 	return SWITCH_STATUS_SUCCESS;
 }
 
 static switch_status_t switch_adpcm_destroy(switch_codec_t *codec)
 {
-	/* We do not need to use release here as the pool memory is taken care of for us */
+	struct ima_adpcm_context *context = codec->private_info;
+
 	codec->private_info = NULL;
+
+	if (!context) {
+		return SWITCH_STATUS_FALSE;
+	}
+
+	if (context->decoder_object) ima_adpcm_free(context->decoder_object);
+	context->decoder_object = NULL;
+	if (context->encoder_object) ima_adpcm_free(context->encoder_object);
+	context->encoder_object = NULL;
+
 	return SWITCH_STATUS_SUCCESS;
 }