diff options
Diffstat (limited to 'pjsip-apps')
-rw-r--r-- | pjsip-apps/src/samples/auddemo.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/pjsip-apps/src/samples/auddemo.c b/pjsip-apps/src/samples/auddemo.c index d3301fed..a6d8f920 100644 --- a/pjsip-apps/src/samples/auddemo.c +++ b/pjsip-apps/src/samples/auddemo.c @@ -29,6 +29,8 @@ static unsigned dev_count; +static unsigned playback_lat = PJMEDIA_SND_DEFAULT_PLAY_LATENCY; +static unsigned capture_lat = PJMEDIA_SND_DEFAULT_REC_LATENCY; static void app_perror(const char *title, pj_status_t status) { @@ -178,6 +180,12 @@ static void test_device(pjmedia_dir dir, unsigned rec_id, unsigned play_id, param.channel_count = chnum; param.samples_per_frame = clock_rate * chnum * ptime / 1000; + /* Latency settings */ + param.flags |= (PJMEDIA_AUD_DEV_CAP_INPUT_LATENCY | + PJMEDIA_AUD_DEV_CAP_OUTPUT_LATENCY); + param.input_latency_ms = capture_lat; + param.output_latency_ms = playback_lat; + PJ_LOG(3,(THIS_FILE, "Performing test..")); status = pjmedia_aud_test(¶m, &result); @@ -383,6 +391,10 @@ static void print_menu(void) puts(" CH: # of channels"); puts(" r RID [FILE] Record capture device RID to WAV file"); puts(" p PID [FILE] Playback WAV file to device ID PID"); + puts(" d [RLAT [PLAT]] Get/set sound device latencies (in ms):"); + puts(" Specify no param to get current latencies setting"); + puts(" RLAT : record latency (-1 for default)"); + puts(" PLAT : playback latency (-1 for default)"); puts(" v Toggle log verbosity"); puts(" q Quit"); puts(""); @@ -520,6 +532,26 @@ int main() } break; + case 'd': + /* latencies */ + { + int rec_lat, play_lat; + + if (sscanf(line+2, "%d %d", &rec_lat, &play_lat) == 2) { + capture_lat = (unsigned) + (rec_lat>=0? rec_lat:PJMEDIA_SND_DEFAULT_REC_LATENCY); + playback_lat = (unsigned) + (play_lat >= 0? play_lat : PJMEDIA_SND_DEFAULT_PLAY_LATENCY); + printf("Recording latency=%ums, playback latency=%ums", + capture_lat, playback_lat); + } else { + printf("Current latencies: record=%ums, playback=%ums", + capture_lat, playback_lat); + } + puts(""); + } + break; + case 'v': if (pj_log_get_level() <= 3) { pj_log_set_level(5); |