Ticket #495: ticket495.patch
File ticket495.patch, 6.4 KB (added by nanang, 16 years ago) |
---|
-
pjsip/include/pjsua-lib/pjsua.h
3742 3742 unsigned clock_rate; 3743 3743 3744 3744 /** 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 /** 3745 3751 * Specify audio frame ptime. The value here will affect the 3746 3752 * samples per frame of both the sound device and the conference 3747 3753 * bridge. Specifying lower ptime will normally reduce the -
pjsip/src/pjsua-lib/pjsua_media.c
1771 1771 { 1772 1772 pjmedia_port *conf_port; 1773 1773 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}; 1775 1776 unsigned selected_clock_rate = 0; 1776 1777 unsigned i; 1777 1778 pjmedia_snd_stream *strm; … … 1784 1785 1785 1786 1786 1787 /* 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; 1788 1789 1789 1790 /* Attempts to open the sound device with different clock rates */ 1790 1791 for (i=0; i<PJ_ARRAY_SIZE(clock_rates); ++i) { … … 1831 1832 */ 1832 1833 if (selected_clock_rate != pjsua_var.media_cfg.clock_rate) { 1833 1834 pjmedia_port *resample_port; 1835 unsigned resample_opt = 0; 1834 1836 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 1835 1846 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); 1838 1849 if (status != PJ_SUCCESS) { 1839 1850 pjsua_perror("Error creating resample port", THIS_FILE, status); 1840 1851 return status; … … 1863 1874 pjmedia_snd_stream_get_info(strm, &si); 1864 1875 play_info = pjmedia_snd_get_dev_info(si.rec_id); 1865 1876 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); 1868 1880 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 1869 1890 return PJ_SUCCESS; 1870 1891 } 1871 1892 -
pjsip/src/pjsua-lib/pjsua_core.c
162 162 pj_bzero(cfg, sizeof(*cfg)); 163 163 164 164 cfg->clock_rate = PJSUA_DEFAULT_CLOCK_RATE; 165 cfg->snd_clock_rate = PJSUA_DEFAULT_CLOCK_RATE; 165 166 cfg->audio_frame_ptime = PJSUA_DEFAULT_AUDIO_FRAME_PTIME; 166 167 cfg->max_media_ports = PJSUA_MAX_CONF_PORTS; 167 168 cfg->has_ioqueue = PJ_TRUE; -
pjsip-apps/src/pjsua/pjsua_app.c
171 171 puts (" --use-ice Enable ICE (default:no)"); 172 172 puts (" --add-codec=name Manually add codec (default is to enable all)"); 173 173 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"); 175 176 puts (" --null-audio Use NULL audio device"); 176 177 puts (" --play-file=file Register WAV file in conference bridge."); 177 178 puts (" This can be specified multiple times."); … … 386 387 OPT_NAMESERVER, OPT_STUN_DOMAIN, OPT_STUN_SRV, 387 388 OPT_ADD_BUDDY, OPT_OFFER_X_MS_MSG, OPT_NO_PRESENCE, 388 389 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, 391 392 OPT_PLAY_FILE, OPT_PLAY_TONE, OPT_RTP_PORT, OPT_ADD_CODEC, 392 393 OPT_ILBC_MODE, OPT_REC_FILE, OPT_AUTO_REC, 393 394 OPT_COMPLEXITY, OPT_QUALITY, OPT_PTIME, OPT_NO_VAD, … … 409 410 { "help", 0, 0, OPT_HELP}, 410 411 { "version", 0, 0, OPT_VERSION}, 411 412 { "clock-rate", 1, 0, OPT_CLOCK_RATE}, 413 { "snd-clock-rate", 1, 0, OPT_SND_CLOCK_RATE}, 412 414 { "null-audio", 0, 0, OPT_NULL_AUDIO}, 413 415 { "local-port", 1, 0, OPT_LOCAL_PORT}, 414 416 { "ip-addr", 1, 0, OPT_IP_ADDR}, … … 562 564 lval = pj_strtoul(pj_cstr(&tmp, pj_optarg)); 563 565 if (lval < 8000 || lval > 48000) { 564 566 PJ_LOG(1,(THIS_FILE, "Error: expecting value between " 565 "8000-48000 for c lock rate"));567 "8000-48000 for conference clock rate")); 566 568 return PJ_EINVAL; 567 569 } 568 570 cfg->media_cfg.clock_rate = lval; 569 571 break; 570 572 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 571 583 case OPT_LOCAL_PORT: /* local-port */ 572 584 lval = pj_strtoul(pj_cstr(&tmp, pj_optarg)); 573 585 if (lval < 0 || lval > 65535) { … … 1388 1400 pj_strcat2(&cfg, line); 1389 1401 } 1390 1402 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 1391 1413 /* quality */ 1392 1414 if (config->media_cfg.quality != PJSUA_DEFAULT_CODEC_QUALITY) { 1393 1415 pj_ansi_sprintf(line, "--quality %d\n",