Added WMME device in audiodev
git-svn-id: https://svn.pjsip.org/repos/pjproject/branches/projects/aps-direct@2459 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/pjmedia/src/pjmedia-audiodev/audiodev.c b/pjmedia/src/pjmedia-audiodev/audiodev.c
index 3749f78..b3af9e9 100644
--- a/pjmedia/src/pjmedia-audiodev/audiodev.c
+++ b/pjmedia/src/pjmedia-audiodev/audiodev.c
@@ -20,14 +20,25 @@
#include <pjmedia-audiodev/audiodev_imp.h>
#include <pj/errno.h>
-
+/*
+ * The Device ID seen by application and driver is different.
+ *
+ * At application level, device ID is a 32bit value. The high 16bit contains
+ * the factory ID, and the low 16bit contains the device index in the
+ * specified factory. The device ID may also be -1 to denote default device.
+ *
+ * At driver level, device ID is a 16bit unsigned integer index.
+ */
#define MAKE_DEV_ID(f_id, index) (((f_id & 0xFFFF) << 16) & (index & 0xFFFF))
#define GET_INDEX(dev_id) ((dev_id) & 0xFFFF)
#define GET_FID(dev_id) ((dev_id) >> 16)
+#define DEFAULT_DEV_ID 0
-/* extern */
+/* extern functions to create factories */
pjmedia_aud_dev_factory* pjmedia_pa_factory(pj_pool_factory *pf);
+pjmedia_aud_dev_factory* pjmedia_wmme_factory(pj_pool_factory *pf);
+
/* Array of factories */
static struct factory
@@ -37,9 +48,14 @@
} factories[] =
{
+ /* WMME */
+ {
+ &pjmedia_wmme_factory
+ },
+ /* PortAudio: */
{
&pjmedia_pa_factory
- }
+ },
};
static unsigned factory_cnt;
@@ -129,6 +145,9 @@
{
int f_id, index;
+ if (id == PJMEDIA_AUD_DEV_DEFAULT_ID)
+ id = DEFAULT_DEV_ID;
+
f_id = GET_FID(id);
index = GET_INDEX(id);
@@ -151,6 +170,9 @@
int f_id, index;
pj_status_t status;
+ if (id == PJMEDIA_AUD_DEV_DEFAULT_ID)
+ id = DEFAULT_DEV_ID;
+
f_id = GET_FID(id);
index = GET_INDEX(id);
@@ -189,8 +211,10 @@
pj_memcpy(¶m, p, sizeof(param));
/* Set default device */
- if (param.rec_id == PJMEDIA_AUD_DEV_DEFAULT_ID) param.rec_id = 0;
- if (param.play_id == PJMEDIA_AUD_DEV_DEFAULT_ID) param.play_id = 0;
+ if (param.rec_id == PJMEDIA_AUD_DEV_DEFAULT_ID)
+ param.rec_id = DEFAULT_DEV_ID;
+ if (param.play_id == PJMEDIA_AUD_DEV_DEFAULT_ID)
+ param.play_id = DEFAULT_DEV_ID;
if (param.dir & PJMEDIA_DIR_CAPTURE)
f_id = GET_FID(param.rec_id);