summaryrefslogtreecommitdiff
path: root/pjmedia
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2007-03-05 13:13:22 +0000
committerBenny Prijono <bennylp@teluu.com>2007-03-05 13:13:22 +0000
commit837c92b0337f44eac5469411a454e3188dbe2574 (patch)
tree30c11ba88a4884e48fdb9651ffe5a7af365bb5db /pjmedia
parent998f05896130fb3cfbfdd03a145164d2067cd042 (diff)
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
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;
+ }
}