Ticket #495: ticket495.patch

File ticket495.patch, 6.4 KB (added by nanang, 11 years ago)
  • pjsip/include/pjsua-lib/pjsua.h

     
    37423742    unsigned            clock_rate; 
    37433743 
    37443744    /** 
     3745     * Clock rate to be applied to the sound device. 
     3746     * If value is zero, conference bridge clock rate will be used. 
     3747     */ 
     3748    unsigned            snd_clock_rate; 
     3749 
     3750    /** 
    37453751     * Specify audio frame ptime. The value here will affect the  
    37463752     * samples per frame of both the sound device and the conference 
    37473753     * bridge. Specifying lower ptime will normally reduce the 
  • pjsip/src/pjsua-lib/pjsua_media.c

     
    17711771{ 
    17721772    pjmedia_port *conf_port; 
    17731773    const pjmedia_snd_dev_info *play_info; 
    1774     unsigned clock_rates[] = { 0, 22050, 44100, 48000, 11025, 32000, 8000}; 
     1774    unsigned clock_rates[] = {0, 22050, 44100, 48000, 11025, 32000, 16000,  
     1775                              8000}; 
    17751776    unsigned selected_clock_rate = 0; 
    17761777    unsigned i; 
    17771778    pjmedia_snd_stream *strm; 
     
    17841785 
    17851786 
    17861787    /* Set default clock rate */ 
    1787     clock_rates[0] = pjsua_var.media_cfg.clock_rate; 
     1788    clock_rates[0] = pjsua_var.media_cfg.snd_clock_rate; 
    17881789 
    17891790    /* Attempts to open the sound device with different clock rates */ 
    17901791    for (i=0; i<PJ_ARRAY_SIZE(clock_rates); ++i) { 
     
    18311832     */ 
    18321833    if (selected_clock_rate != pjsua_var.media_cfg.clock_rate) { 
    18331834        pjmedia_port *resample_port; 
     1835        unsigned resample_opt = 0; 
    18341836 
     1837        if (pjsua_var.media_cfg.quality >= 3 && 
     1838            pjsua_var.media_cfg.quality <= 4) 
     1839        { 
     1840            resample_opt |= PJMEDIA_CONF_SMALL_FILTER; 
     1841        } 
     1842        else if (pjsua_var.media_cfg.quality < 3) { 
     1843            resample_opt |= PJMEDIA_CONF_USE_LINEAR; 
     1844        } 
     1845         
    18351846        status = pjmedia_resample_port_create(pjsua_var.pool, conf_port,  
    1836                                               selected_clock_rate, 0,  
    1837                                               &resample_port); 
     1847                                              selected_clock_rate,  
     1848                                              resample_opt, &resample_port); 
    18381849        if (status != PJ_SUCCESS) { 
    18391850            pjsua_perror("Error creating resample port", THIS_FILE, status); 
    18401851            return status; 
     
    18631874    pjmedia_snd_stream_get_info(strm, &si); 
    18641875    play_info = pjmedia_snd_get_dev_info(si.rec_id); 
    18651876 
    1866     pjmedia_conf_set_port0_name(pjsua_var.mconf,  
    1867                                 pj_cstr(&tmp, play_info->name)); 
     1877    if (si.clock_rate != pjsua_var.media_cfg.clock_rate) { 
     1878        char tmp_buf[128]; 
     1879        int tmp_buf_len = sizeof(tmp_buf); 
    18681880 
     1881        tmp_buf_len = pj_ansi_snprintf(tmp_buf, sizeof(tmp_buf)-1, "%s (%dKHz)", 
     1882                                       play_info->name, si.clock_rate/1000); 
     1883        pj_strset(&tmp, tmp_buf, tmp_buf_len); 
     1884        pjmedia_conf_set_port0_name(pjsua_var.mconf, &tmp);  
     1885    } else { 
     1886        pjmedia_conf_set_port0_name(pjsua_var.mconf,  
     1887                                    pj_cstr(&tmp, play_info->name)); 
     1888    } 
     1889 
    18691890    return PJ_SUCCESS; 
    18701891} 
    18711892 
  • pjsip/src/pjsua-lib/pjsua_core.c

     
    162162    pj_bzero(cfg, sizeof(*cfg)); 
    163163 
    164164    cfg->clock_rate = PJSUA_DEFAULT_CLOCK_RATE; 
     165    cfg->snd_clock_rate = PJSUA_DEFAULT_CLOCK_RATE; 
    165166    cfg->audio_frame_ptime = PJSUA_DEFAULT_AUDIO_FRAME_PTIME; 
    166167    cfg->max_media_ports = PJSUA_MAX_CONF_PORTS; 
    167168    cfg->has_ioqueue = PJ_TRUE; 
  • pjsip-apps/src/pjsua/pjsua_app.c

     
    171171    puts  ("  --use-ice           Enable ICE (default:no)"); 
    172172    puts  ("  --add-codec=name    Manually add codec (default is to enable all)"); 
    173173    puts  ("  --dis-codec=name    Disable codec (can be specified multiple times)"); 
    174     puts  ("  --clock-rate=N      Override sound device clock rate"); 
     174    puts  ("  --clock-rate=N      Override conference bridge clock rate"); 
     175    puts  ("  --snd-clock-rate=N  Override sound device clock rate"); 
    175176    puts  ("  --null-audio        Use NULL audio device"); 
    176177    puts  ("  --play-file=file    Register WAV file in conference bridge."); 
    177178    puts  ("                      This can be specified multiple times."); 
     
    386387           OPT_NAMESERVER, OPT_STUN_DOMAIN, OPT_STUN_SRV, 
    387388           OPT_ADD_BUDDY, OPT_OFFER_X_MS_MSG, OPT_NO_PRESENCE, 
    388389           OPT_AUTO_ANSWER, OPT_AUTO_HANGUP, OPT_AUTO_PLAY, OPT_AUTO_LOOP, 
    389            OPT_AUTO_CONF, OPT_CLOCK_RATE, OPT_USE_ICE, OPT_USE_SRTP,  
    390            OPT_SRTP_SECURE, 
     390           OPT_AUTO_CONF, OPT_CLOCK_RATE, OPT_SND_CLOCK_RATE, OPT_USE_ICE, 
     391           OPT_USE_SRTP, OPT_SRTP_SECURE, 
    391392           OPT_PLAY_FILE, OPT_PLAY_TONE, OPT_RTP_PORT, OPT_ADD_CODEC,  
    392393           OPT_ILBC_MODE, OPT_REC_FILE, OPT_AUTO_REC, 
    393394           OPT_COMPLEXITY, OPT_QUALITY, OPT_PTIME, OPT_NO_VAD, 
     
    409410        { "help",       0, 0, OPT_HELP}, 
    410411        { "version",    0, 0, OPT_VERSION}, 
    411412        { "clock-rate", 1, 0, OPT_CLOCK_RATE}, 
     413        { "snd-clock-rate",     1, 0, OPT_SND_CLOCK_RATE}, 
    412414        { "null-audio", 0, 0, OPT_NULL_AUDIO}, 
    413415        { "local-port", 1, 0, OPT_LOCAL_PORT}, 
    414416        { "ip-addr",    1, 0, OPT_IP_ADDR}, 
     
    562564            lval = pj_strtoul(pj_cstr(&tmp, pj_optarg)); 
    563565            if (lval < 8000 || lval > 48000) { 
    564566                PJ_LOG(1,(THIS_FILE, "Error: expecting value between " 
    565                                      "8000-48000 for clock rate")); 
     567                                     "8000-48000 for conference clock rate")); 
    566568                return PJ_EINVAL; 
    567569            } 
    568570            cfg->media_cfg.clock_rate = lval;  
    569571            break; 
    570572 
     573        case OPT_SND_CLOCK_RATE: 
     574            lval = pj_strtoul(pj_cstr(&tmp, pj_optarg)); 
     575            if (lval < 8000 || lval > 48000) { 
     576                PJ_LOG(1,(THIS_FILE, "Error: expecting value between " 
     577                                     "8000-48000 for sound device clock rate")); 
     578                return PJ_EINVAL; 
     579            } 
     580            cfg->media_cfg.snd_clock_rate = lval;  
     581            break; 
     582 
    571583        case OPT_LOCAL_PORT:   /* local-port */ 
    572584            lval = pj_strtoul(pj_cstr(&tmp, pj_optarg)); 
    573585            if (lval < 0 || lval > 65535) { 
     
    13881400        pj_strcat2(&cfg, line); 
    13891401    } 
    13901402 
     1403    if (config->media_cfg.snd_clock_rate != PJSUA_DEFAULT_SND_CLOCK_RATE) { 
     1404        pj_ansi_sprintf(line, "--snd-clock-rate %d\n", 
     1405                        config->media_cfg.snd_clock_rate); 
     1406        pj_strcat2(&cfg, line); 
     1407    } else { 
     1408        pj_ansi_sprintf(line, "#using default --snd-clock-rate %d\n", 
     1409                        config->media_cfg.snd_clock_rate); 
     1410        pj_strcat2(&cfg, line); 
     1411    } 
     1412 
    13911413    /* quality */ 
    13921414    if (config->media_cfg.quality != PJSUA_DEFAULT_CODEC_QUALITY) { 
    13931415        pj_ansi_sprintf(line, "--quality %d\n",