From f891b6415f4608596b23d1e0ed01f4c62b9909a4 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Sun, 7 Oct 2007 07:42:04 +0000 Subject: Ticket #395: Added configuration to control maximum PortAudio sound buffer latency, and change default sound backend back to WMME git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1486 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/include/pjmedia/config.h | 12 ++++++++++-- pjmedia/src/pjmedia/pasound.c | 12 +++++++++++- 2 files changed, 21 insertions(+), 3 deletions(-) (limited to 'pjmedia') diff --git a/pjmedia/include/pjmedia/config.h b/pjmedia/include/pjmedia/config.h index 0cabe3b4..f438f185 100644 --- a/pjmedia/include/pjmedia/config.h +++ b/pjmedia/include/pjmedia/config.h @@ -75,10 +75,18 @@ /** * Specify whether we prefer to use DirectSound on Windows. * - * Say yes! + * Default: 0 */ #ifndef PJMEDIA_PREFER_DIRECT_SOUND -# define PJMEDIA_PREFER_DIRECT_SOUND 1 +# define PJMEDIA_PREFER_DIRECT_SOUND 0 +#endif + + +/** + * Specify PortAudio maximum buffering latency, in milliseconds. + */ +#ifndef PJMEDIA_PASOUND_MAX_LATENCY +# define PJMEDIA_PASOUND_MAX_LATENCY 60 #endif diff --git a/pjmedia/src/pjmedia/pasound.c b/pjmedia/src/pjmedia/pasound.c index 1a5e819c..5472d9ae 100644 --- a/pjmedia/src/pjmedia/pasound.c +++ b/pjmedia/src/pjmedia/pasound.c @@ -28,6 +28,8 @@ #define THIS_FILE "pasound.c" +#define MAX_LATENCY (PJMEDIA_PASOUND_MAX_LATENCY / 1000.0) + static int snd_init_count; static struct snd_mgr @@ -441,6 +443,8 @@ PJ_DEF(pj_status_t) pjmedia_snd_open_rec( int index, inputParam.hostApiSpecificStreamInfo = NULL; inputParam.sampleFormat = sampleFormat; inputParam.suggestedLatency = paDevInfo->defaultLowInputLatency; + if (inputParam.suggestedLatency > MAX_LATENCY) + inputParam.suggestedLatency = MAX_LATENCY; paHostApiInfo = Pa_GetHostApiInfo(paDevInfo->hostApi); @@ -536,7 +540,9 @@ PJ_DEF(pj_status_t) pjmedia_snd_open_player( int index, outputParam.channelCount = channel_count; outputParam.hostApiSpecificStreamInfo = NULL; outputParam.sampleFormat = sampleFormat; - outputParam.suggestedLatency = 1.0 * samples_per_frame / clock_rate;; + outputParam.suggestedLatency = paDevInfo->defaultLowOutputLatency; + if (outputParam.suggestedLatency > MAX_LATENCY) + outputParam.suggestedLatency = MAX_LATENCY; paHostApiInfo = Pa_GetHostApiInfo(paDevInfo->hostApi); @@ -658,6 +664,8 @@ PJ_DEF(pj_status_t) pjmedia_snd_open( int rec_id, inputParam.hostApiSpecificStreamInfo = NULL; inputParam.sampleFormat = sampleFormat; inputParam.suggestedLatency = paRecDevInfo->defaultLowInputLatency; + if (inputParam.suggestedLatency > MAX_LATENCY) + inputParam.suggestedLatency = MAX_LATENCY; paRecHostApiInfo = Pa_GetHostApiInfo(paRecDevInfo->hostApi); @@ -667,6 +675,8 @@ PJ_DEF(pj_status_t) pjmedia_snd_open( int rec_id, outputParam.hostApiSpecificStreamInfo = NULL; outputParam.sampleFormat = sampleFormat; outputParam.suggestedLatency = paPlayDevInfo->defaultLowOutputLatency; + if (outputParam.suggestedLatency > MAX_LATENCY) + outputParam.suggestedLatency = MAX_LATENCY; paPlayHostApiInfo = Pa_GetHostApiInfo(paPlayDevInfo->hostApi); -- cgit v1.2.3