[Asterisk-cvs] asterisk/codecs codec_speex.c,1.8,1.9

markster at lists.digium.com markster at lists.digium.com
Wed Dec 29 20:46:02 CST 2004


Update of /usr/cvsroot/asterisk/codecs
In directory mongoose.digium.com:/tmp/cvs-serv22820/codecs

Modified Files:
	codec_speex.c 
Log Message:
Fix Speex config issue (bug #3175)


Index: codec_speex.c
===================================================================
RCS file: /usr/cvsroot/asterisk/codecs/codec_speex.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- codec_speex.c	1 Oct 2004 13:16:44 -0000	1.8
+++ codec_speex.c	30 Dec 2004 01:40:47 -0000	1.9
@@ -21,7 +21,6 @@
 static int vbr = 0;
 static int vbr_quality = 0;
 static int abr = 0;
-static int abr_quality = 0;
 static int dtx = 0;
 
 #define TYPE_SILENCE	 0x2
@@ -82,20 +81,21 @@
 			speex_bits_init(&tmp->bits);
 			speex_bits_reset(&tmp->bits);
 			speex_encoder_ctl(tmp->speex, SPEEX_GET_FRAME_SIZE, &tmp->framesize);
-			speex_encoder_ctl(tmp->speex, SPEEX_SET_QUALITY, &quality);
 			speex_encoder_ctl(tmp->speex, SPEEX_SET_COMPLEXITY, &complexity);
 
-			if (vad)
-				speex_encoder_ctl(tmp->speex, SPEEX_SET_VAD, &vad);
-			if (dtx)
-				speex_encoder_ctl(tmp->speex, SPEEX_SET_DTX, &vad);
+			if(!abr && !vbr) {
+				speex_encoder_ctl(tmp->speex, SPEEX_SET_QUALITY, &quality);
+				if (vad)
+					speex_encoder_ctl(tmp->speex, SPEEX_SET_VAD, &vad);
+				if (dtx)
+					speex_encoder_ctl(tmp->speex, SPEEX_SET_DTX, &vad);
+			}
 			if (vbr) {
 				speex_encoder_ctl(tmp->speex, SPEEX_SET_VBR, &vbr);
 				speex_encoder_ctl(tmp->speex, SPEEX_SET_VBR_QUALITY, &vbr_quality);
 			}
 			if (abr) {
-				speex_encoder_ctl(tmp->speex, SPEEX_SET_VBR, &abr);
-				speex_encoder_ctl(tmp->speex, SPEEX_SET_VBR_QUALITY, &abr_quality);
+				speex_encoder_ctl(tmp->speex, SPEEX_SET_ABR, &abr);
 			}
 			tmp->tail = 0;
 		}
@@ -342,15 +342,7 @@
 					} else 
 						ast_log(LOG_ERROR,"Error! VBR Quality must be 0-10\n");
 				} else if (!strcasecmp(var->name, "abr_quality")) {
-					res = abs(atoi(var->value));
-					if (option_verbose > 2)
-						ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting ABR Quality to %d\n",res);
-					if (res > -1 && res < 11) {
-						ast_mutex_lock(&localuser_lock);
-						abr_quality = res;
-						ast_mutex_unlock(&localuser_lock);
-					} else 
-						ast_log(LOG_ERROR,"Error! ABR Quality must be 0-10\n");
+					ast_log(LOG_ERROR,"Error! ABR Quality setting obsolete, set ABR to desired bitrate\n");
 				} else if (!strcasecmp(var->name, "enhancement")) {
 					ast_mutex_lock(&localuser_lock);
 					enhancement = ast_true(var->value) ? 1 : 0;
@@ -364,11 +356,18 @@
 						ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: VBR Mode. [%s]\n",vbr ? "on" : "off");
 					ast_mutex_unlock(&localuser_lock);
 				} else if (!strcasecmp(var->name, "abr")) {
-					ast_mutex_lock(&localuser_lock);
-					abr = ast_true(var->value) ? 1 : 0;
+					res = abs(atoi(var->value));
 					if (option_verbose > 2)
-						ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: ABR Mode. [%s]\n",vbr ? "on" : "off");
-					ast_mutex_unlock(&localuser_lock);
+					      if(res > 0)
+						ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Setting ABR target bitrate to %d\n",res);
+					      else
+						ast_verbose(VERBOSE_PREFIX_3 "CODEC SPEEX: Disabling ABR\n",res);
+					if (res >= 0) {
+						ast_mutex_lock(&localuser_lock);
+						abr = res;
+						ast_mutex_unlock(&localuser_lock);
+					} else 
+						ast_log(LOG_ERROR,"Error! ABR target bitrate must be >= 0\n");
 				} else if (!strcasecmp(var->name, "vad")) {
 					ast_mutex_lock(&localuser_lock);
 					vad = ast_true(var->value) ? 1 : 0;




More information about the svn-commits mailing list