From 719e60cc3290dce849349bcd305f77dc5b545fa1 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Fri, 27 Mar 2009 15:15:46 +0000 Subject: Ticket #771 (auddev-misc): Updated audio test tool: - Fixed playback report on avg interval. - Added feature to set/get capture & playback latecies setting. - Minor update on drift calculation, improve a bit readibility for debugging. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@2555 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/samples/auddemo.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'pjsip-apps/src/samples') 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); -- cgit v1.2.3