From 5982a41faa033f0eb4e61ce93489ea886879080f Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Thu, 12 Jun 2008 12:48:59 +0000 Subject: Ticket #542: added new API and macro for sound device latency settings, also added new param for this in pjsua git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2007 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/pjsua/pjsua_app.c | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'pjsip-apps/src/pjsua') diff --git a/pjsip-apps/src/pjsua/pjsua_app.c b/pjsip-apps/src/pjsua/pjsua_app.c index 3c92b988..b8affe61 100644 --- a/pjsip-apps/src/pjsua/pjsua_app.c +++ b/pjsip-apps/src/pjsua/pjsua_app.c @@ -85,6 +85,7 @@ static struct app_config speaker_level; int capture_dev, playback_dev; + unsigned capture_lat, playback_lat; } app_config; @@ -194,6 +195,8 @@ static void usage(void) puts (" --ilbc-mode=MODE Set iLBC codec mode (20 or 30, default is 20)"); puts (" --capture-dev=id Audio capture device ID (default=-1)"); puts (" --playback-dev=id Audio playback device ID (default=-1)"); + puts (" --capture-lat=N Audio capture latency, in ms (default=10)"); + puts (" --playback-lat=N Audio playback latency, in ms (default=100)"); puts (""); puts ("Media Transport Options:"); @@ -252,6 +255,8 @@ static void default_config(struct app_config *cfg) cfg->mic_level = cfg->speaker_level = 1.0; cfg->capture_dev = PJSUA_INVALID_ID; cfg->playback_dev = PJSUA_INVALID_ID; + cfg->capture_lat = PJMEDIA_SND_DEFAULT_REC_LATENCY; + cfg->playback_lat = PJMEDIA_SND_DEFAULT_PLAY_LATENCY; for (i=0; iacc_cfg); ++i) pjsua_acc_config_default(&cfg->acc_cfg[i]); @@ -413,6 +418,7 @@ static pj_status_t parse_args(int argc, char *argv[], OPT_TLS_PASSWORD, OPT_TLS_VERIFY_SERVER, OPT_TLS_VERIFY_CLIENT, OPT_TLS_NEG_TIMEOUT, OPT_CAPTURE_DEV, OPT_PLAYBACK_DEV, + OPT_CAPTURE_LAT, OPT_PLAYBACK_LAT, OPT_AUTO_UPDATE_NAT,OPT_USE_COMPACT_FORM,OPT_DIS_CODEC }; struct pj_getopt_option long_options[] = { @@ -499,6 +505,8 @@ static pj_status_t parse_args(int argc, char *argv[], { "tls-neg-timeout", 1, 0, OPT_TLS_NEG_TIMEOUT}, { "capture-dev", 1, 0, OPT_CAPTURE_DEV}, { "playback-dev", 1, 0, OPT_PLAYBACK_DEV}, + { "capture-lat", 1, 0, OPT_CAPTURE_LAT}, + { "playback-lat", 1, 0, OPT_PLAYBACK_LAT}, { NULL, 0, 0, 0} }; pj_status_t status; @@ -1077,6 +1085,14 @@ static pj_status_t parse_args(int argc, char *argv[], cfg->playback_dev = atoi(pj_optarg); break; + case OPT_CAPTURE_LAT: + cfg->capture_lat = atoi(pj_optarg); + break; + + case OPT_PLAYBACK_LAT: + cfg->playback_lat = atoi(pj_optarg); + break; + default: PJ_LOG(1,(THIS_FILE, "Argument \"%s\" is not valid. Use --help to see help", @@ -1474,6 +1490,16 @@ static int write_settings(const struct app_config *config, pj_strcat2(&cfg, line); } + /* Sound device latency */ + if (config->capture_lat != PJMEDIA_SND_DEFAULT_REC_LATENCY) { + pj_ansi_sprintf(line, "--capture-lat %d\n", config->capture_lat); + pj_strcat2(&cfg, line); + } + if (config->playback_dev != PJMEDIA_SND_DEFAULT_PLAY_LATENCY) { + pj_ansi_sprintf(line, "--playback-lat %d\n", config->playback_lat); + pj_strcat2(&cfg, line); + } + /* Media clock rate. */ if (config->media_cfg.clock_rate != PJSUA_DEFAULT_CLOCK_RATE) { pj_ansi_sprintf(line, "--clock-rate %d\n", @@ -3713,6 +3739,9 @@ pj_status_t app_init(int argc, char *argv[]) if (status != PJ_SUCCESS) goto on_error; + /* Set sound device latency */ + pjmedia_snd_set_latency(app_config.capture_lat, app_config.playback_lat); + /* Use null sound device? */ #ifndef STEREO_DEMO if (app_config.null_audio) { -- cgit v1.2.3