~ubuntu-branches/ubuntu/quantal/asterisk/quantal

« back to all changes in this revision

Viewing changes to main/dsp.c

  • Committer: Bazaar Package Importer
  • Author(s): Jean-Michel Dault
  • Date: 2010-02-16 14:08:54 UTC
  • mfrom: (1.2.5 upstream) (8.3.4 sid)
  • Revision ID: james.westby@ubuntu.com-20100216140854-rb2godspb9lduazl
Tags: 1:1.6.2.2-1ubuntu1
* Merge from Debian: security update
  * Changes:
  - debian/control: Change Maintainer
  - debian/control: Removed Uploaders field.
  - debian/control: Removed Debian Vcs-Svn entry and replaced with
      ubuntu-voip Vcs-Bzr, to reflect divergence in packages.
  - debian/asterisk.init : chown /dev/dahdi
  - debian/backports/hardy : add file
  - debian/backports/asterisk.init.hardy : add file

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
 
43
43
#include "asterisk.h"
44
44
 
45
 
ASTERISK_FILE_VERSION(__FILE__, "$Revision: 211580 $")
 
45
ASTERISK_FILE_VERSION(__FILE__, "$Revision: 235775 $")
46
46
 
47
47
#include <math.h>
48
48
 
392
392
        int digitmode;
393
393
        int faxmode;
394
394
        int dtmf_began;
 
395
        int display_inband_dtmf_warning;
395
396
        float genergy;
396
397
        int mute_fragments;
397
398
        fragment_t mute_data[5];
1341
1342
                }
1342
1343
                break;
1343
1344
        default:
1344
 
                ast_log(LOG_WARNING, "Inband DTMF is not supported on codec %s. Use RFC2833\n", ast_getformatname(af->subclass));
 
1345
                /*Display warning only once. Otherwise you would get hundreds of warnings every second */
 
1346
                if (dsp->display_inband_dtmf_warning)
 
1347
                        ast_log(LOG_WARNING, "Inband DTMF is not supported on codec %s. Use RFC2833\n", ast_getformatname(af->subclass));
 
1348
                dsp->display_inband_dtmf_warning = 0;
1345
1349
                return af;
1346
1350
        }
1347
1351
 
1381
1385
                }
1382
1386
        }
1383
1387
 
1384
 
        if ((dsp->features & DSP_FEATURE_DIGIT_DETECT)) {
1385
 
                if ((dsp->digitmode & DSP_DIGITMODE_MF))
 
1388
        if (dsp->features & (DSP_FEATURE_DIGIT_DETECT | DSP_FEATURE_BUSY_DETECT)) {
 
1389
                if (dsp->digitmode & DSP_DIGITMODE_MF)
1386
1390
                        digit = mf_detect(dsp, &dsp->digit_state, shortdata, len, (dsp->digitmode & DSP_DIGITMODE_NOQUELCH) == 0, (dsp->digitmode & DSP_DIGITMODE_RELAXDTMF));
1387
1391
                else
1388
1392
                        digit = dtmf_detect(dsp, &dsp->digit_state, shortdata, len, (dsp->digitmode & DSP_DIGITMODE_NOQUELCH) == 0, (dsp->digitmode & DSP_DIGITMODE_RELAXDTMF));
1394
1398
                        if (!dsp->dtmf_began) {
1395
1399
                                /* We have not reported DTMF_BEGIN for anything yet */
1396
1400
 
1397
 
                                event = AST_FRAME_DTMF_BEGIN;
1398
 
                                event_digit = dsp->digit_state.digits[0];
 
1401
                                if (dsp->features & DSP_FEATURE_DIGIT_DETECT) {
 
1402
                                        event = AST_FRAME_DTMF_BEGIN;
 
1403
                                        event_digit = dsp->digit_state.digits[0];
 
1404
                                }
1399
1405
                                dsp->dtmf_began = 1;
1400
1406
 
1401
1407
                        } else if (dsp->digit_state.current_digits > 1 || digit != dsp->digit_state.digits[0]) {
1402
1408
                                /* Digit changed. This means digit we have reported with DTMF_BEGIN ended */
1403
 
        
1404
 
                                event = AST_FRAME_DTMF_END;
1405
 
                                event_digit = dsp->digit_state.digits[0];
 
1409
                                if (dsp->features & DSP_FEATURE_DIGIT_DETECT) {
 
1410
                                        event = AST_FRAME_DTMF_END;
 
1411
                                        event_digit = dsp->digit_state.digits[0];
 
1412
                                }
1406
1413
                                memmove(dsp->digit_state.digits, dsp->digit_state.digits + 1, dsp->digit_state.current_digits);
1407
1414
                                dsp->digit_state.current_digits--;
1408
1415
                                dsp->dtmf_began = 0;
 
1416
 
 
1417
                                if (dsp->features & DSP_FEATURE_BUSY_DETECT) {
 
1418
                                        /* Reset Busy Detector as we have some confirmed activity */ 
 
1419
                                        memset(dsp->historicsilence, 0, sizeof(dsp->historicsilence));
 
1420
                                        memset(dsp->historicnoise, 0, sizeof(dsp->historicnoise));
 
1421
                                        ast_debug(1, "DTMF Detected - Reset busydetector\n");
 
1422
                                }
1409
1423
                        }
1410
1424
 
1411
1425
                        if (event) {
1514
1528
                dsp->faxmode = DSP_FAXMODE_DETECT_CNG;
1515
1529
                /* Initialize digit detector */
1516
1530
                ast_digit_detect_init(&dsp->digit_state, dsp->digitmode & DSP_DIGITMODE_MF);
 
1531
                dsp->display_inband_dtmf_warning = 1;
1517
1532
                /* Initialize initial DSP progress detect parameters */
1518
1533
                ast_dsp_prog_reset(dsp);
1519
1534
                /* Initialize fax detector */