Ignore:
Timestamp:
Jan 24, 2007 2:02:09 AM (14 years ago)
Author:
bennylp
Message:

Implement ticket #62: option to play tones continuously, and added --play-tone option in pjsua

File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app.c

    r903 r904  
    6161    unsigned                wav_count; 
    6262    pj_str_t                wav_files[32]; 
     63    unsigned                tone_count; 
     64    pjmedia_tone_desc       tones[32]; 
     65    pjsua_conf_port_id      tone_slots[32]; 
    6366    pjsua_player_id         wav_id; 
    6467    pjsua_conf_port_id      wav_port; 
     
    159162    puts  ("  --clock-rate=N      Override sound device clock rate"); 
    160163    puts  ("  --null-audio        Use NULL audio device"); 
    161     puts  ("  --play-file=file    Register WAV file in conference bridge"); 
     164    puts  ("  --play-file=file    Register WAV file in conference bridge."); 
     165    puts  ("                      This can be specified multiple times."); 
     166    puts  ("  --play-tone=F1,F2,ON,OFF    Register tone to the conference bridge."); 
     167    puts  ("                      f1,f2=frequency, on,off=on/off duration in msec."); 
     168    puts  ("                      This can be specified multiple times."); 
    162169    puts  ("  --auto-play         Automatically play the file (to incoming calls only)"); 
    163170    puts  ("  --auto-loop         Automatically loop incoming RTP to outgoing RTP"); 
     
    310317           OPT_AUTO_ANSWER, OPT_AUTO_HANGUP, OPT_AUTO_PLAY, OPT_AUTO_LOOP, 
    311318           OPT_AUTO_CONF, OPT_CLOCK_RATE, 
    312            OPT_PLAY_FILE, OPT_RTP_PORT, OPT_ADD_CODEC, OPT_ILBC_MODE, 
    313            OPT_REC_FILE, OPT_AUTO_REC, 
     319           OPT_PLAY_FILE, OPT_PLAY_TONE, OPT_RTP_PORT, OPT_ADD_CODEC,  
     320           OPT_ILBC_MODE, OPT_REC_FILE, OPT_AUTO_REC, 
    314321           OPT_COMPLEXITY, OPT_QUALITY, OPT_PTIME, OPT_NO_VAD, 
    315322           OPT_RX_DROP_PCT, OPT_TX_DROP_PCT, OPT_EC_TAIL, 
     
    358365        { "auto-conf",  0, 0, OPT_AUTO_CONF}, 
    359366        { "play-file",  1, 0, OPT_PLAY_FILE}, 
     367        { "play-tone",  1, 0, OPT_PLAY_TONE}, 
    360368        { "rec-file",   1, 0, OPT_REC_FILE}, 
    361369        { "rtp-port",   1, 0, OPT_RTP_PORT}, 
     
    682690            break; 
    683691 
     692        case OPT_PLAY_TONE: 
     693            { 
     694                int f1, f2, on, off; 
     695                int n; 
     696 
     697                n = sscanf(pj_optarg, "%d,%d,%d,%d", &f1, &f2, &on, &off); 
     698                if (n != 4) { 
     699                    puts("Expecting f1,f2,on,off in --play-tone"); 
     700                    return -1; 
     701                } 
     702 
     703                cfg->tones[cfg->tone_count].freq1 = (short)f1; 
     704                cfg->tones[cfg->tone_count].freq2 = (short)f2; 
     705                cfg->tones[cfg->tone_count].on_msec = (short)on; 
     706                cfg->tones[cfg->tone_count].off_msec = (short)off; 
     707                ++cfg->tone_count; 
     708            } 
     709            break; 
     710 
    684711        case OPT_REC_FILE: 
    685712            cfg->rec_file = pj_str(pj_optarg); 
     
    11351162        pj_ansi_sprintf(line, "--play-file %s\n", 
    11361163                        config->wav_files[i].ptr); 
     1164        pj_strcat2(&cfg, line); 
     1165    } 
     1166    for (i=0; i<config->tone_count; ++i) { 
     1167        pj_ansi_sprintf(line, "--play-tone %d,%d,%d,%d\n", 
     1168                        config->tones[i].freq1, config->tones[i].freq2,  
     1169                        config->tones[i].on_msec, config->tones[i].off_msec); 
    11371170        pj_strcat2(&cfg, line); 
    11381171    } 
     
    29262959    } 
    29272960 
     2961    /* Optionally registers tone players */ 
     2962    for (i=0; i<app_config.tone_count; ++i) { 
     2963        pjmedia_port *tport; 
     2964        char name[80]; 
     2965        pj_str_t label; 
     2966        pj_status_t status; 
     2967 
     2968        pj_ansi_snprintf(name, sizeof(name), "tone-%d,%d", 
     2969                         app_config.tones[i].freq1,  
     2970                         app_config.tones[i].freq2); 
     2971        label = pj_str(name); 
     2972        status = pjmedia_tonegen_create2(app_config.pool, &label, 
     2973                                         8000, 1, 160, 16,  
     2974                                         PJMEDIA_TONEGEN_LOOP,  &tport); 
     2975        if (status != PJ_SUCCESS) { 
     2976            pjsua_perror(THIS_FILE, "Unable to create tone generator", status); 
     2977            goto on_error; 
     2978        } 
     2979 
     2980        status = pjsua_conf_add_port(app_config.pool, tport,  
     2981                                     &app_config.tone_slots[i]); 
     2982        pj_assert(status == PJ_SUCCESS); 
     2983 
     2984        status = pjmedia_tonegen_play(tport, 1, &app_config.tones[i], 0); 
     2985        pj_assert(status == PJ_SUCCESS); 
     2986    } 
     2987 
    29282988    /* Optionally create recorder file, if any. */ 
    29292989    if (app_config.rec_file.slen) { 
     
    30573117{ 
    30583118    pj_status_t status; 
     3119    unsigned i; 
    30593120 
    30603121#ifdef STEREO_DEMO 
     
    30643125    } 
    30653126#endif 
     3127 
     3128    /* Close tone generators */ 
     3129    for (i=0; i<app_config.tone_count; ++i) { 
     3130        pjsua_conf_remove_port(app_config.tone_slots[i]); 
     3131    } 
    30663132 
    30673133    if (app_config.pool) { 
Note: See TracChangeset for help on using the changeset viewer.