[Freeswitch-svn] [commit] r5378 - in freeswitch/trunk: libs/libteletone/src src
Freeswitch SVN
anthm at freeswitch.org
Fri Jun 15 20:21:01 EDT 2007
Author: anthm
Date: Fri Jun 15 20:21:01 2007
New Revision: 5378
Modified:
freeswitch/trunk/libs/libteletone/src/libteletone_detect.c
freeswitch/trunk/libs/libteletone/src/libteletone_detect.h
freeswitch/trunk/src/switch_ivr_async.c
Log:
fix tones stuff on 64bit
Modified: freeswitch/trunk/libs/libteletone/src/libteletone_detect.c
==============================================================================
--- freeswitch/trunk/libs/libteletone/src/libteletone_detect.c (original)
+++ freeswitch/trunk/libs/libteletone/src/libteletone_detect.c Fri Jun 15 20:21:01 2007
@@ -106,9 +106,8 @@
static teletone_detection_descriptor_t dtmf_detect_row_2nd[GRID_FACTOR];
static teletone_detection_descriptor_t dtmf_detect_col_2nd[GRID_FACTOR];
-static teletone_process_t dtmf_row[] = {697.0, 770.0, 852.0, 941.0};
-static teletone_process_t dtmf_col[] = {1209.0, 1336.0, 1477.0, 1633.0};
-
+static float dtmf_row[] = {697.0f, 770.0f, 852.0f, 941.0f};
+static float dtmf_col[] = {1209.0f, 1336.0f, 1477.0f, 1633.0f};
static char dtmf_positions[] = "123A" "456B" "789C" "*0#D";
@@ -122,7 +121,7 @@
int samples)
{
int i;
- teletone_process_t v1;
+ float v1;
for (i = 0; i < samples; i++) {
v1 = goertzel_state->v2;
@@ -131,29 +130,26 @@
}
}
-teletone_process_t teletone_goertzel_result (teletone_goertzel_state_t *goertzel_state)
-{
- return goertzel_state->v3 * goertzel_state->v3 + goertzel_state->v2 * goertzel_state->v2 - goertzel_state->v2 * goertzel_state->v3 * goertzel_state->fac;
-}
+#define teletone_goertzel_result(gs) ((gs)->v3 * (gs)->v3 + (gs)->v2 * (gs)->v2 - (gs)->v2 * (gs)->v3 * (gs)->fac)
void teletone_dtmf_detect_init (teletone_dtmf_detect_state_t *dtmf_detect_state, int sample_rate)
{
int i;
- teletone_process_t theta;
+ float theta;
dtmf_detect_state->hit1 = dtmf_detect_state->hit2 = 0;
for (i = 0; i < GRID_FACTOR; i++) {
- theta = M_TWO_PI*(dtmf_row[i]/(teletone_process_t)sample_rate);
+ theta = M_TWO_PI*(dtmf_row[i]/(float)sample_rate);
dtmf_detect_row[i].fac = 2.0*cos(theta);
- theta = M_TWO_PI*(dtmf_col[i]/(teletone_process_t)sample_rate);
+ theta = M_TWO_PI*(dtmf_col[i]/(float)sample_rate);
dtmf_detect_col[i].fac = 2.0*cos(theta);
- theta = M_TWO_PI*(dtmf_row[i]*2.0/(teletone_process_t)sample_rate);
+ theta = M_TWO_PI*(dtmf_row[i]*2.0/(float)sample_rate);
dtmf_detect_row_2nd[i].fac = 2.0*cos(theta);
- theta = M_TWO_PI*(dtmf_col[i]*2.0/(teletone_process_t)sample_rate);
+ theta = M_TWO_PI*(dtmf_col[i]*2.0/(float)sample_rate);
dtmf_detect_col_2nd[i].fac = 2.0*cos(theta);
goertzel_init (&dtmf_detect_state->row_out[i], &dtmf_detect_row[i]);
@@ -172,7 +168,7 @@
void teletone_multi_tone_init(teletone_multi_tone_t *mt, teletone_tone_map_t *map)
{
- teletone_process_t theta = 0;
+ float theta = 0;
int x = 0;
if(!mt->min_samples) {
@@ -200,7 +196,7 @@
break;
}
mt->tone_count++;
- theta = M_TWO_PI*(map->freqs[x]/(teletone_process_t)mt->sample_rate);
+ theta = M_TWO_PI*(map->freqs[x]/(float)mt->sample_rate);
mt->tdd[x].fac = 2.0 * cos(theta);
goertzel_init (&mt->gs[x], &mt->tdd[x]);
goertzel_init (&mt->gs2[x], &mt->tdd[x]);
@@ -213,8 +209,8 @@
int samples)
{
int sample, limit, j, x = 0;
- teletone_process_t v1, famp;
- teletone_process_t eng_sum = 0, eng_all[TELETONE_MAX_TONES];
+ float v1, famp;
+ float eng_sum = 0, eng_all[TELETONE_MAX_TONES];
int gtest = 0, see_hit = 0;
for (sample = 0; sample < samples; sample = limit) {
@@ -299,10 +295,10 @@
int16_t sample_buffer[],
int samples)
{
- teletone_process_t row_energy[GRID_FACTOR];
- teletone_process_t col_energy[GRID_FACTOR];
- teletone_process_t famp;
- teletone_process_t v1;
+ float row_energy[GRID_FACTOR];
+ float col_energy[GRID_FACTOR];
+ float famp;
+ float v1;
int i;
int j;
int sample;
Modified: freeswitch/trunk/libs/libteletone/src/libteletone_detect.h
==============================================================================
--- freeswitch/trunk/libs/libteletone/src/libteletone_detect.h (original)
+++ freeswitch/trunk/libs/libteletone/src/libteletone_detect.h Fri Jun 15 20:21:01 2007
@@ -136,9 +136,9 @@
/*! \brief A continer for the elements of a Goertzel Algorithm (The names are from his formula) */
typedef struct {
- teletone_process_t v2;
- teletone_process_t v3;
- teletone_process_t fac;
+ float v2;
+ float v3;
+ double fac;
} teletone_goertzel_state_t;
/*! \brief A container for a DTMF detection state.*/
@@ -153,7 +153,7 @@
teletone_goertzel_state_t col_out[GRID_FACTOR];
teletone_goertzel_state_t row_out2nd[GRID_FACTOR];
teletone_goertzel_state_t col_out2nd[GRID_FACTOR];
- teletone_process_t energy;
+ float energy;
int current_sample;
char digits[TELETONE_MAX_DTMF_DIGITS + 1];
@@ -165,7 +165,7 @@
/*! \brief An abstraction to store the coefficient of a tone frequency */
typedef struct {
- teletone_process_t fac;
+ float fac;
} teletone_detection_descriptor_t;
/*! \brief A container for a single multi-tone detection
@@ -180,7 +180,7 @@
teletone_goertzel_state_t gs2[TELETONE_MAX_TONES];
int tone_count;
- teletone_process_t energy;
+ float energy;
int current_sample;
int min_samples;
@@ -253,13 +253,6 @@
int16_t sample_buffer[],
int samples);
- /*!
- \brief Compute the result of the last applied step of the Goertzel Algorithm
- \param goertzel_state the goertzel state to retrieve from
- \return the computed value for consideration in furthur audio tests
- */
- teletone_process_t teletone_goertzel_result (teletone_goertzel_state_t *goertzel_state);
-
#ifdef __cplusplus
Modified: freeswitch/trunk/src/switch_ivr_async.c
==============================================================================
--- freeswitch/trunk/src/switch_ivr_async.c (original)
+++ freeswitch/trunk/src/switch_ivr_async.c Fri Jun 15 20:21:01 2007
@@ -503,7 +503,7 @@
if(teletone_multi_tone_detect(&pvt->mt, frame.data, frame.samples)) {
switch_event_t *event;
- switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "FAX CNG DETECTED\n");
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "FAX CNG DETECTED\n");
if (switch_event_create(&event, SWITCH_EVENT_DETECTED_FAX) == SWITCH_STATUS_SUCCESS) {
switch_event_t *dup;
More information about the Freeswitch-svn
mailing list