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(&param, 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);