summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2008-03-11 20:50:46 +0000
committerBenny Prijono <bennylp@teluu.com>2008-03-11 20:50:46 +0000
commitcedeaec6e1f22463dc1e13e3dee467fc4dcd4019 (patch)
tree2360b43d43cb877b0788e0e6b40dbb41d059a66c /pjmedia
parent074f4d74f58e86a1910ecc6d4fd6425222a0a8ab (diff)
Ticket #494: Configuration option to use high quality tone generation
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1859 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/include/pjmedia/config.h11
-rw-r--r--pjmedia/src/pjmedia/tonegen.c81
2 files changed, 53 insertions, 39 deletions
diff --git a/pjmedia/include/pjmedia/config.h b/pjmedia/include/pjmedia/config.h
index 93be70d3..0640b184 100644
--- a/pjmedia/include/pjmedia/config.h
+++ b/pjmedia/include/pjmedia/config.h
@@ -485,6 +485,17 @@
/**
+ * Enable high quality of tone generation, the better quality will cost
+ * more CPU load. This is only applied to floating point enabled machines.
+ *
+ * By default it is enabled.
+ */
+#ifndef PJMEDIA_USE_HIGH_QUALITY_TONEGEN
+# define PJMEDIA_USE_HIGH_QUALITY_TONEGEN 1
+#endif
+
+
+/**
* Enable support for SRTP media transport. This will require linking
* with libsrtp from the third_party directory.
*
diff --git a/pjmedia/src/pjmedia/tonegen.c b/pjmedia/src/pjmedia/tonegen.c
index 549f0a63..68d6634b 100644
--- a/pjmedia/src/pjmedia/tonegen.c
+++ b/pjmedia/src/pjmedia/tonegen.c
@@ -39,29 +39,52 @@
#if defined(PJ_HAS_FLOATING_POINT) && PJ_HAS_FLOATING_POINT!=0
- /*
- * Default floating-point based tone generation using sine wave
- * generation from:
- * http://www.musicdsp.org/showone.php?id=10.
- * This produces good quality tone in relatively faster time than
- * the normal sin() generator.
- * Speed = 40.6 cycles per sample.
- */
# include <math.h>
- struct gen
- {
- DATA a, s0, s1;
- };
-# define GEN_INIT(var,R,F,A) var.a = (DATA) (2.0 * sin(M_PI * F / R)); \
- var.s0 = A; \
- var.s1 = 0
-# define GEN_SAMP(val,var) var.s0 = var.s0 - var.a * var.s1; \
- var.s1 = var.s1 + var.a * var.s0; \
- val = (short) var.s0
+# if defined(PJMEDIA_USE_HIGH_QUALITY_TONEGEN) && \
+ PJMEDIA_USE_HIGH_QUALITY_TONEGEN!=0
+
+ /*
+ * This is the good old tone generator using sin().
+ * Speed = 222.5 cycles per sample.
+ */
+ struct gen
+ {
+ DATA add;
+ DATA c;
+ DATA vol;
+ };
+
+# define GEN_INIT(var,R,F,A) var.add = ((DATA)F)/R, var.c=0, var.vol=A
+# define GEN_SAMP(val,var) val = (short)(sin(var.c * 2 * M_PI) * \
+ var.vol); \
+ var.c += var.add
+
+# else
+
+ /*
+ * Default floating-point based tone generation using sine wave
+ * generation from:
+ * http://www.musicdsp.org/showone.php?id=10.
+ * This produces good quality tone in relatively faster time than
+ * the normal sin() generator.
+ * Speed = 40.6 cycles per sample.
+ */
+ struct gen
+ {
+ DATA a, s0, s1;
+ };
+
+# define GEN_INIT(var,R,F,A) var.a = (DATA) (2.0 * sin(M_PI * F / R)); \
+ var.s0 = A; \
+ var.s1 = 0
+# define GEN_SAMP(val,var) var.s0 = var.s0 - var.a * var.s1; \
+ var.s1 = var.s1 + var.a * var.s0; \
+ val = (short) var.s0
+# endif
+#else
-#elif !defined(PJ_HAS_FLOATING_POINT) || PJ_HAS_FLOATING_POINT==0
/*
* Fallback algorithm when floating point is disabled.
* This is a very fast fixed point tone generation using sine wave
@@ -99,26 +122,6 @@
# define GEN_SAMP(val,var) val = (short) VOL(var,SIN(var.c)>>16);\
var.c += var.add
-
-#else
-# error "Should never get to this part"
-# include <math.h>
- /*
- * Should never really reach here, but anyway it's provided for reference.
- * This is the good old tone generator using sin().
- * Speed = 222.5 cycles per sample.
- */
- struct gen
- {
- DATA add;
- DATA c;
- DATA vol;
- };
-
-# define GEN_INIT(var,R,F,A) var.add = ((DATA)F)/R, var.c=0, var.vol=A
-# define GEN_SAMP(val,var) val = (short)(sin(var.c * 2 * M_PI) * var.vol);\
- var.c += var.add
-
#endif
struct gen_state