summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia')
-rw-r--r--pjmedia/src/pjmedia/dsound.c6
-rw-r--r--pjmedia/src/pjmedia/pasound.c37
2 files changed, 29 insertions, 14 deletions
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;
+ }
}