summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2010-12-30 18:19:47 -0800
committerDavid Schleef <ds@schleef.org>2010-12-30 18:39:12 -0800
commit5fed7a264c4c796c8e8e7ecc4e2ae893ecae111d (patch)
tree9e7f182aec58db0bcb6cac00c56e631ebd38dc9e
parent0073550300ba3f146f52ca59472c497cd1fc22e0 (diff)
dtmf: reindent
-rw-r--r--gst/dtmf/tone_detect.c163
1 files changed, 73 insertions, 90 deletions
diff --git a/gst/dtmf/tone_detect.c b/gst/dtmf/tone_detect.c
index c3b92ba7d..d8f1df16e 100644
--- a/gst/dtmf/tone_detect.c
+++ b/gst/dtmf/tone_detect.c
@@ -74,12 +74,11 @@ static tone_detection_descriptor_t dtmf_detect_col_2nd[4];
static tone_detection_descriptor_t fax_detect;
static tone_detection_descriptor_t fax_detect_2nd;
-static float dtmf_row[] =
-{
+static float dtmf_row[] = {
697.0, 770.0, 852.0, 941.0
};
-static float dtmf_col[] =
-{
+
+static float dtmf_col[] = {
1209.0, 1336.0, 1477.0, 1633.0
};
@@ -87,19 +86,18 @@ static float fax_freq = 1100.0;
static char dtmf_positions[] = "123A" "456B" "789C" "*0#D";
-static void goertzel_init(goertzel_state_t *s,
- tone_detection_descriptor_t *t)
+static void
+goertzel_init (goertzel_state_t * s, tone_detection_descriptor_t * t)
{
- s->v2 =
- s->v3 = 0.0;
+ s->v2 = s->v3 = 0.0;
s->fac = t->fac;
}
+
/*- End of function --------------------------------------------------------*/
#if defined(USE_3DNOW)
-static inline void _dtmf_goertzel_update(goertzel_state_t *s,
- float x[],
- int samples)
+static inline void
+_dtmf_goertzel_update (goertzel_state_t * s, float x[], int samples)
{
int n;
float v;
@@ -123,50 +121,38 @@ static inline void _dtmf_goertzel_update(goertzel_state_t *s,
//s->v2 = s->v3;
//s->v3 = s->fac*s->v2 - v1 + x[0];
- __asm__ __volatile__ (
- " femms;\n"
-
+ __asm__ __volatile__ (" femms;\n"
" movq 16(%%edx),%%mm2;\n"
" movq 24(%%edx),%%mm3;\n"
" movq 32(%%edx),%%mm4;\n"
" movq 40(%%edx),%%mm5;\n"
" movq 48(%%edx),%%mm6;\n"
" movq 56(%%edx),%%mm7;\n"
-
" jmp 1f;\n"
" .align 32;\n"
-
" 1: ;\n"
" prefetch (%%eax);\n"
" movq %%mm3,%%mm1;\n"
" movq %%mm2,%%mm0;\n"
" movq %%mm5,%%mm3;\n"
" movq %%mm4,%%mm2;\n"
-
" pfmul %%mm7,%%mm5;\n"
" pfmul %%mm6,%%mm4;\n"
" pfsub %%mm1,%%mm5;\n"
" pfsub %%mm0,%%mm4;\n"
-
" movq (%%eax),%%mm0;\n"
" movq %%mm0,%%mm1;\n"
" punpckldq %%mm0,%%mm1;\n"
" add $4,%%eax;\n"
" pfadd %%mm1,%%mm5;\n"
" pfadd %%mm1,%%mm4;\n"
-
" dec %%ecx;\n"
-
" jnz 1b;\n"
-
" movq %%mm2,16(%%edx);\n"
" movq %%mm3,24(%%edx);\n"
" movq %%mm4,32(%%edx);\n"
" movq %%mm5,40(%%edx);\n"
-
- " femms;\n"
- :
- : "c" (samples), "a" (x), "d" (vv)
+ " femms;\n"::"c" (samples), "a" (x), "d" (vv)
:"memory", "eax", "ecx");
s[0].v2 = vv[4];
@@ -181,38 +167,38 @@ static inline void _dtmf_goertzel_update(goertzel_state_t *s,
#endif
/*- End of function --------------------------------------------------------*/
-void zap_goertzel_update(goertzel_state_t *s,
- int16_t x[],
- int samples)
+void
+zap_goertzel_update (goertzel_state_t * s, int16_t x[], int samples)
{
int i;
float v1;
- for (i = 0; i < samples; i++)
- {
+ for (i = 0; i < samples; i++) {
v1 = s->v2;
s->v2 = s->v3;
s->v3 = s->fac * s->v2 - v1 + x[i];
}
}
+
/*- End of function --------------------------------------------------------*/
-float zap_goertzel_result (goertzel_state_t *s)
+float
+zap_goertzel_result (goertzel_state_t * s)
{
return s->v3 * s->v3 + s->v2 * s->v2 - s->v2 * s->v3 * s->fac;
}
+
/*- End of function --------------------------------------------------------*/
-void zap_dtmf_detect_init (dtmf_detect_state_t *s)
+void
+zap_dtmf_detect_init (dtmf_detect_state_t * s)
{
int i;
float theta;
- s->hit1 =
- s->hit2 = 0;
+ s->hit1 = s->hit2 = 0;
- for (i = 0; i < 4; i++)
- {
+ for (i = 0; i < 4; i++) {
theta = 2.0 * M_PI * (dtmf_row[i] / SAMPLE_RATE);
dtmf_detect_row[i].fac = 2.0 * cos (theta);
@@ -249,12 +235,12 @@ void zap_dtmf_detect_init (dtmf_detect_state_t *s)
s->digits[0] = '\0';
s->mhit = 0;
}
+
/*- End of function --------------------------------------------------------*/
-int zap_dtmf_detect (dtmf_detect_state_t *s,
- int16_t amp[],
- int samples,
- int isradio)
+int
+zap_dtmf_detect (dtmf_detect_state_t * s,
+ int16_t amp[], int samples, int isradio)
{
float row_energy[4];
@@ -272,8 +258,7 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
int limit;
hit = 0;
- for (sample = 0; sample < samples; sample = limit)
- {
+ for (sample = 0; sample < samples; sample = limit) {
/* 102 is optimised to meet the DTMF specs. */
if ((samples - sample) >= (102 - s->current_sample))
limit = sample + (102 - s->current_sample);
@@ -289,8 +274,7 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
#else
/* The following unrolled loop takes only 35% (rough estimate) of the
time of a rolled loop on the machine on which it was developed */
- for (j = sample; j < limit; j++)
- {
+ for (j = sample; j < limit; j++) {
famp = amp[j];
s->energy += famp * famp;
@@ -331,35 +315,43 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
v1 = s->col_out2nd[0].v2;
s->col_out2nd[0].v2 = s->col_out2nd[0].v3;
- s->col_out2nd[0].v3 = s->col_out2nd[0].fac*s->col_out2nd[0].v2 - v1 + famp;
+ s->col_out2nd[0].v3 =
+ s->col_out2nd[0].fac * s->col_out2nd[0].v2 - v1 + famp;
v1 = s->row_out2nd[0].v2;
s->row_out2nd[0].v2 = s->row_out2nd[0].v3;
- s->row_out2nd[0].v3 = s->row_out2nd[0].fac*s->row_out2nd[0].v2 - v1 + famp;
+ s->row_out2nd[0].v3 =
+ s->row_out2nd[0].fac * s->row_out2nd[0].v2 - v1 + famp;
v1 = s->col_out2nd[1].v2;
s->col_out2nd[1].v2 = s->col_out2nd[1].v3;
- s->col_out2nd[1].v3 = s->col_out2nd[1].fac*s->col_out2nd[1].v2 - v1 + famp;
+ s->col_out2nd[1].v3 =
+ s->col_out2nd[1].fac * s->col_out2nd[1].v2 - v1 + famp;
v1 = s->row_out2nd[1].v2;
s->row_out2nd[1].v2 = s->row_out2nd[1].v3;
- s->row_out2nd[1].v3 = s->row_out2nd[1].fac*s->row_out2nd[1].v2 - v1 + famp;
+ s->row_out2nd[1].v3 =
+ s->row_out2nd[1].fac * s->row_out2nd[1].v2 - v1 + famp;
v1 = s->col_out2nd[2].v2;
s->col_out2nd[2].v2 = s->col_out2nd[2].v3;
- s->col_out2nd[2].v3 = s->col_out2nd[2].fac*s->col_out2nd[2].v2 - v1 + famp;
+ s->col_out2nd[2].v3 =
+ s->col_out2nd[2].fac * s->col_out2nd[2].v2 - v1 + famp;
v1 = s->row_out2nd[2].v2;
s->row_out2nd[2].v2 = s->row_out2nd[2].v3;
- s->row_out2nd[2].v3 = s->row_out2nd[2].fac*s->row_out2nd[2].v2 - v1 + famp;
+ s->row_out2nd[2].v3 =
+ s->row_out2nd[2].fac * s->row_out2nd[2].v2 - v1 + famp;
v1 = s->col_out2nd[3].v2;
s->col_out2nd[3].v2 = s->col_out2nd[3].v3;
- s->col_out2nd[3].v3 = s->col_out2nd[3].fac*s->col_out2nd[3].v2 - v1 + famp;
+ s->col_out2nd[3].v3 =
+ s->col_out2nd[3].fac * s->col_out2nd[3].v2 - v1 + famp;
v1 = s->row_out2nd[3].v2;
s->row_out2nd[3].v2 = s->row_out2nd[3].v3;
- s->row_out2nd[3].v3 = s->row_out2nd[3].fac*s->row_out2nd[3].v2 - v1 + famp;
+ s->row_out2nd[3].v3 =
+ s->row_out2nd[3].fac * s->row_out2nd[3].v2 - v1 + famp;
/* Update fax tone */
v1 = s->fax_tone.v2;
@@ -383,8 +375,7 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
row_energy[0] = zap_goertzel_result (&s->row_out[0]);
col_energy[0] = zap_goertzel_result (&s->col_out[0]);
- for (best_row = best_col = 0, i = 1; i < 4; i++)
- {
+ for (best_row = best_col = 0, i = 1; i < 4; i++) {
row_energy[i] = zap_goertzel_result (&s->row_out[i]);
if (row_energy[i] > row_energy[best_row])
best_row = i;
@@ -399,16 +390,15 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
col_energy[best_col] >= DTMF_THRESHOLD
&&
col_energy[best_col] < row_energy[best_row] * DTMF_REVERSE_TWIST
- &&
- col_energy[best_col]*DTMF_NORMAL_TWIST > row_energy[best_row])
- {
+ && col_energy[best_col] * DTMF_NORMAL_TWIST > row_energy[best_row]) {
/* Relative peak test */
- for (i = 0; i < 4; i++)
- {
- if ((i != best_col && col_energy[i]*DTMF_RELATIVE_PEAK_COL > col_energy[best_col])
- ||
- (i != best_row && row_energy[i]*DTMF_RELATIVE_PEAK_ROW > row_energy[best_row]))
- {
+ for (i = 0; i < 4; i++) {
+ if ((i != best_col
+ && col_energy[i] * DTMF_RELATIVE_PEAK_COL >
+ col_energy[best_col])
+ || (i != best_row
+ && row_energy[i] * DTMF_RELATIVE_PEAK_ROW >
+ row_energy[best_row])) {
break;
}
}
@@ -417,10 +407,10 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
&&
(row_energy[best_row] + col_energy[best_col]) > 42.0 * s->energy
&&
- zap_goertzel_result (&s->col_out2nd[best_col])*DTMF_2ND_HARMONIC_COL < col_energy[best_col]
- &&
- zap_goertzel_result (&s->row_out2nd[best_row])*DTMF_2ND_HARMONIC_ROW < row_energy[best_row])
- {
+ zap_goertzel_result (&s->col_out2nd[best_col]) *
+ DTMF_2ND_HARMONIC_COL < col_energy[best_col]
+ && zap_goertzel_result (&s->row_out2nd[best_row]) *
+ DTMF_2ND_HARMONIC_ROW < row_energy[best_row]) {
hit = dtmf_positions[(best_row << 2) + best_col];
/* Look for two successive similar results */
/* The logic in the next test is:
@@ -429,28 +419,26 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
back to back differing digits. More importantly, it
can work with nasty phones that give a very wobbly start
to a digit. */
- if (hit == s->hit3 && s->hit3 != s->hit2)
- {
+ if (hit == s->hit3 && s->hit3 != s->hit2) {
s->mhit = hit;
s->digit_hits[(best_row << 2) + best_col]++;
s->detected_digits++;
- if (s->current_digits < MAX_DTMF_DIGITS)
- {
+ if (s->current_digits < MAX_DTMF_DIGITS) {
s->digits[s->current_digits++] = hit;
s->digits[s->current_digits] = '\0';
- }
- else
- {
+ } else {
s->lost_digits++;
}
}
}
}
- if (!hit && (fax_energy >= FAX_THRESHOLD) && (fax_energy > s->energy * 21.0)) {
+ if (!hit && (fax_energy >= FAX_THRESHOLD)
+ && (fax_energy > s->energy * 21.0)) {
fax_energy_2nd = zap_goertzel_result (&s->fax_tone2nd);
if (fax_energy_2nd * FAX_2ND_HARMONIC < fax_energy) {
#if 0
- printf("Fax energy/Second Harmonic: %f/%f\n", fax_energy, fax_energy_2nd);
+ printf ("Fax energy/Second Harmonic: %f/%f\n", fax_energy,
+ fax_energy_2nd);
#endif
/* XXX Probably need better checking than just this the energy XXX */
hit = 'f';
@@ -460,13 +448,10 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
if (s->fax_hits > 5) {
s->mhit = 'f';
s->detected_digits++;
- if (s->current_digits < MAX_DTMF_DIGITS)
- {
+ if (s->current_digits < MAX_DTMF_DIGITS) {
s->digits[s->current_digits++] = hit;
s->digits[s->current_digits] = '\0';
- }
- else
- {
+ } else {
s->lost_digits++;
}
}
@@ -476,8 +461,7 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
s->hit2 = s->hit3;
s->hit3 = hit;
/* Reinitialise the detector for the next block */
- for (i = 0; i < 4; i++)
- {
+ for (i = 0; i < 4; i++) {
goertzel_init (&s->row_out[i], &dtmf_detect_row[i]);
goertzel_init (&s->col_out[i], &dtmf_detect_col[i]);
goertzel_init (&s->row_out2nd[i], &dtmf_detect_row_2nd[i]);
@@ -488,23 +472,21 @@ int zap_dtmf_detect (dtmf_detect_state_t *s,
s->energy = 0.0;
s->current_sample = 0;
}
- if ((!s->mhit) || (s->mhit != hit))
- {
+ if ((!s->mhit) || (s->mhit != hit)) {
s->mhit = 0;
return (0);
}
return (hit);
}
+
/*- End of function --------------------------------------------------------*/
-int zap_dtmf_get (dtmf_detect_state_t *s,
- char *buf,
- int max)
+int
+zap_dtmf_get (dtmf_detect_state_t * s, char *buf, int max)
{
if (max > s->current_digits)
max = s->current_digits;
- if (max > 0)
- {
+ if (max > 0) {
memcpy (buf, s->digits, max);
memmove (s->digits, s->digits + max, s->current_digits - max);
s->current_digits -= max;
@@ -512,5 +494,6 @@ int zap_dtmf_get (dtmf_detect_state_t *s,
buf[max] = '\0';
return max;
}
+
/*- End of function --------------------------------------------------------*/
/*- End of file ------------------------------------------------------------*/