summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2011-03-15 03:16:33 +0000
committerLiong Sauw Ming <ming@teluu.com>2011-03-15 03:16:33 +0000
commit477ebed76f7657565ef181da813ea2f7b409d24b (patch)
treec97fc53261966f3e3574da466fe16136aa61c25f
parent324dadd8306be077d924b6901eae69b2e164fd91 (diff)
Re #1204:
* Update audio device's list after refreshing the device. * Fixed WMME macro. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3440 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia-audiodev/audiodev.c30
-rw-r--r--pjmedia/src/pjmedia-audiodev/wmme_dev.c2
2 files changed, 19 insertions, 13 deletions
diff --git a/pjmedia/src/pjmedia-audiodev/audiodev.c b/pjmedia/src/pjmedia-audiodev/audiodev.c
index b9d960fe..26288616 100644
--- a/pjmedia/src/pjmedia-audiodev/audiodev.c
+++ b/pjmedia/src/pjmedia-audiodev/audiodev.c
@@ -250,23 +250,27 @@ PJ_DEF(pj_status_t) pjmedia_aud_param_get_cap( const pjmedia_aud_param *param,
}
/* Internal: init driver */
-static pj_status_t init_driver(unsigned drv_idx)
+static pj_status_t init_driver(unsigned drv_idx, pj_bool_t refresh)
{
struct driver *drv = &aud_subsys.drv[drv_idx];
pjmedia_aud_dev_factory *f;
unsigned i, dev_cnt;
pj_status_t status;
- /* Create the factory */
- f = (*drv->create)(aud_subsys.pf);
- if (!f)
- return PJ_EUNKNOWN;
+ if (!refresh) {
+ /* Create the factory */
+ f = (*drv->create)(aud_subsys.pf);
+ if (!f)
+ return PJ_EUNKNOWN;
- /* Call factory->init() */
- status = f->op->init(f);
- if (status != PJ_SUCCESS) {
- f->op->destroy(f);
- return status;
+ /* Call factory->init() */
+ status = f->op->init(f);
+ if (status != PJ_SUCCESS) {
+ f->op->destroy(f);
+ return status;
+ }
+ } else {
+ f = drv->f;
}
/* Get number of devices */
@@ -407,7 +411,7 @@ PJ_DEF(pj_status_t) pjmedia_aud_subsys_init(pj_pool_factory *pf)
/* Initialize each factory and build the device ID list */
for (i=0; i<aud_subsys.drv_cnt; ++i) {
- status = init_driver(i);
+ status = init_driver(i, PJ_FALSE);
if (status != PJ_SUCCESS) {
deinit_driver(i);
continue;
@@ -427,7 +431,7 @@ pjmedia_aud_register_factory(pjmedia_aud_dev_factory_create_func_ptr adf)
return PJMEDIA_EAUD_INIT;
aud_subsys.drv[aud_subsys.drv_cnt].create = adf;
- status = init_driver(aud_subsys.drv_cnt);
+ status = init_driver(aud_subsys.drv_cnt, PJ_FALSE);
if (status == PJ_SUCCESS) {
aud_subsys.drv_cnt++;
} else {
@@ -496,6 +500,7 @@ PJ_DEF(pj_status_t) pjmedia_aud_dev_refresh(void)
{
unsigned i;
+ aud_subsys.dev_cnt = 0;
for (i=0; i<aud_subsys.drv_cnt; ++i) {
struct driver *drv = &aud_subsys.drv[i];
@@ -506,6 +511,7 @@ PJ_DEF(pj_status_t) pjmedia_aud_dev_refresh(void)
"list for %s", drv->name));
}
}
+ init_driver(i, PJ_TRUE);
}
return PJ_SUCCESS;
}
diff --git a/pjmedia/src/pjmedia-audiodev/wmme_dev.c b/pjmedia/src/pjmedia-audiodev/wmme_dev.c
index 095aead9..7358daf4 100644
--- a/pjmedia/src/pjmedia-audiodev/wmme_dev.c
+++ b/pjmedia/src/pjmedia-audiodev/wmme_dev.c
@@ -39,7 +39,7 @@
#endif
#ifndef PJMEDIA_WMME_DEV_USE_MMDEVICE_API
-# define PJMEDIAWMME_DEV_USE_MMDEVICE_API \
+# define PJMEDIA_WMME_DEV_USE_MMDEVICE_API \
(defined(_WIN32_WINNT) && (_WIN32_WINNT>=0x0600))
#endif