diff options
author | David Schleef <ds@schleef.org> | 2010-12-30 18:19:47 -0800 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2010-12-30 18:39:12 -0800 |
commit | 5fed7a264c4c796c8e8e7ecc4e2ae893ecae111d (patch) | |
tree | 9e7f182aec58db0bcb6cac00c56e631ebd38dc9e | |
parent | 0073550300ba3f146f52ca59472c497cd1fc22e0 (diff) |
dtmf: reindent
-rw-r--r-- | gst/dtmf/tone_detect.c | 163 |
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 ------------------------------------------------------------*/ |