From 837c92b0337f44eac5469411a454e3188dbe2574 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Mon, 5 Mar 2007 13:13:22 +0000 Subject: Allow pjmedia_snd_init()/deinit() to be called more than once git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1041 74dad513-b988-da41-8d7b-12977e46ad98 --- pjmedia/src/pjmedia/dsound.c | 6 +++++- pjmedia/src/pjmedia/pasound.c | 37 ++++++++++++++++++++++++------------- 2 files changed, 29 insertions(+), 14 deletions(-) (limited to 'pjmedia') diff --git a/pjmedia/src/pjmedia/dsound.c b/pjmedia/src/pjmedia/dsound.c index a62e0446..511776af 100644 --- a/pjmedia/src/pjmedia/dsound.c +++ b/pjmedia/src/pjmedia/dsound.c @@ -56,7 +56,7 @@ struct dsound_dev_info static unsigned dev_count; static struct dsound_dev_info dev_info[MAX_HARDWARE]; - +static int snd_init_count; /* Individual DirectSound capture/playback stream descriptor */ @@ -637,6 +637,9 @@ PJ_DEF(pj_status_t) pjmedia_snd_init(pj_pool_factory *factory) HRESULT hr; unsigned i; + if (++snd_init_count != 1) + return PJ_SUCCESS; + pool_factory = factory; /* Enumerate sound playback devices */ @@ -666,6 +669,7 @@ PJ_DEF(pj_status_t) pjmedia_snd_init(pj_pool_factory *factory) */ PJ_DEF(pj_status_t) pjmedia_snd_deinit(void) { + --snd_init_count; return PJ_SUCCESS; } diff --git a/pjmedia/src/pjmedia/pasound.c b/pjmedia/src/pjmedia/pasound.c index d842db8b..348b189e 100644 --- a/pjmedia/src/pjmedia/pasound.c +++ b/pjmedia/src/pjmedia/pasound.c @@ -28,6 +28,8 @@ #define THIS_FILE "pasound.c" +static int snd_init_count; + static struct snd_mgr { pj_pool_factory *factory; @@ -193,18 +195,23 @@ static int PaRecorderPlayerCallback( const void *input, */ PJ_DEF(pj_status_t) pjmedia_snd_init(pj_pool_factory *factory) { - int err; + if (++snd_init_count == 1) { + int err; - snd_mgr.factory = factory; - err = Pa_Initialize(); + snd_mgr.factory = factory; + err = Pa_Initialize(); - PJ_LOG(4,(THIS_FILE, "PortAudio sound library initialized, status=%d", err)); - PJ_LOG(4,(THIS_FILE, "PortAudio host api count=%d", - Pa_GetHostApiCount())); - PJ_LOG(4,(THIS_FILE, "Sound device count=%d", - pjmedia_snd_get_dev_count())); + PJ_LOG(4,(THIS_FILE, + "PortAudio sound library initialized, status=%d", err)); + PJ_LOG(4,(THIS_FILE, "PortAudio host api count=%d", + Pa_GetHostApiCount())); + PJ_LOG(4,(THIS_FILE, "Sound device count=%d", + pjmedia_snd_get_dev_count())); - return err ? PJMEDIA_ERRNO_FROM_PORTAUDIO(err) : PJ_SUCCESS; + return err ? PJMEDIA_ERRNO_FROM_PORTAUDIO(err) : PJ_SUCCESS; + } else { + return PJ_SUCCESS; + } } @@ -804,13 +811,17 @@ PJ_DEF(pj_status_t) pjmedia_snd_stream_close(pjmedia_snd_stream *stream) */ PJ_DEF(pj_status_t) pjmedia_snd_deinit(void) { - int err; + if (--snd_init_count == 0) { + int err; - PJ_LOG(4,(THIS_FILE, "PortAudio sound library shutting down..")); + PJ_LOG(4,(THIS_FILE, "PortAudio sound library shutting down..")); - err = Pa_Terminate(); + err = Pa_Terminate(); - return err ? PJMEDIA_ERRNO_FROM_PORTAUDIO(err) : PJ_SUCCESS; + return err ? PJMEDIA_ERRNO_FROM_PORTAUDIO(err) : PJ_SUCCESS; + } else { + return PJ_SUCCESS; + } } -- cgit v1.2.3