Fixed nullsound in Symbian

git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@1243 74dad513-b988-da41-8d7b-12977e46ad98
diff --git a/build.symbian/pjproject.cww b/build.symbian/pjproject.cww
index 112e0d7..7032176 100644
--- a/build.symbian/pjproject.cww
+++ b/build.symbian/pjproject.cww
@@ -315,10 +315,9 @@
         <SESSION>-1</SESSION>

         <EDOCTYPE>1</EDOCTYPE>

         <PATH USERELATIVEPATHS = "true">..\pjsip-apps\src\symbian_ua\ua.cpp</PATH>

-        <MAXIMIZED>true</MAXIMIZED>

         <FRAMELOC>

             <X>4</X>

-            <Y>4</Y>

+            <Y>23</Y>

         </FRAMELOC>

         <FRAMESIZE>

             <W>731</W>

@@ -338,6 +337,109 @@
         </DOCKINFO>

     </WINDOW>

     <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>1</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">..\pjsip\src\pjsua-lib\pjsua_media.c</PATH>

+        <FRAMELOC>

+            <X>10</X>

+            <Y>40</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>630</W>

+            <H>410</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>0</STATUS>

+            <ROW></ROW>

+            <COLUMN></COLUMN>

+            <DOCKBARID></DOCKBARID>

+            <PCTWIDTH></PCTWIDTH>

+            <HGT></HGT>

+            <GROUPID>

+                <GIDHIGHPART></GIDHIGHPART>

+                <GIDLOWPART></GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>1</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">..\pjmedia\src\pjmedia\nullsound.c</PATH>

+        <FRAMELOC>

+            <X>10</X>

+            <Y>40</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>630</W>

+            <H>410</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>0</STATUS>

+            <ROW></ROW>

+            <COLUMN></COLUMN>

+            <DOCKBARID></DOCKBARID>

+            <PCTWIDTH></PCTWIDTH>

+            <HGT></HGT>

+            <GROUPID>

+                <GIDHIGHPART></GIDHIGHPART>

+                <GIDLOWPART></GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>1</EDOCTYPE>

+        <PATH USERELATIVEPATHS = "true">..\pjmedia\include\pjmedia\sound.h</PATH>

+        <FRAMELOC>

+            <X>10</X>

+            <Y>40</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>630</W>

+            <H>410</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>0</STATUS>

+            <ROW></ROW>

+            <COLUMN></COLUMN>

+            <DOCKBARID></DOCKBARID>

+            <PCTWIDTH></PCTWIDTH>

+            <HGT></HGT>

+            <GROUPID>

+                <GIDHIGHPART></GIDHIGHPART>

+                <GIDLOWPART></GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+    </WINDOW>

+    <WINDOW>

+        <SESSION>-1</SESSION>

+        <EDOCTYPE>20</EDOCTYPE>

+        <MAXIMIZED>true</MAXIMIZED>

+        <FRAMELOC>

+            <X>0</X>

+            <Y>0</Y>

+        </FRAMELOC>

+        <FRAMESIZE>

+            <W>824</W>

+            <H>1521</H>

+        </FRAMESIZE>

+        <DOCKINFO>

+            <STATUS>0</STATUS>

+            <ROW></ROW>

+            <COLUMN></COLUMN>

+            <DOCKBARID></DOCKBARID>

+            <PCTWIDTH></PCTWIDTH>

+            <HGT></HGT>

+            <GROUPID>

+                <GIDHIGHPART></GIDHIGHPART>

+                <GIDLOWPART></GIDLOWPART>

+            </GROUPID>

+        </DOCKINFO>

+            <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd\EPOC32\RELEASE\WINSCW\UDEB\euser.dll" MACHINENAME = "Local Windows PC"/>

+            <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd\EPOC32\RELEASE\WINSCW\UDEB\ekern.exe" MACHINENAME = "Local Windows PC"/>

+            <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\WINDOWS\system32\ntdll.dll" MACHINENAME = "Local Windows PC"/>

+    </WINDOW>

+    <WINDOW>

         <SESSION>-2147483648</SESSION>

         <EDOCTYPE>36</EDOCTYPE>

         <DEFAULT>true</DEFAULT>

@@ -371,8 +473,8 @@
             <Y>23</Y>

         </FRAMELOC>

         <FRAMESIZE>

-            <W>792</W>

-            <H>1413</H>

+            <W>816</W>

+            <H>1494</H>

         </FRAMESIZE>

         <DOCKINFO>

             <STATUS>0</STATUS>

@@ -386,12 +488,13 @@
                 <GIDLOWPART></GIDLOWPART>

             </GROUPID>

         </DOCKINFO>

+            <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd\EPOC32\RELEASE\WINSCW\UDEB\euser.dll" MACHINENAME = "Local Windows PC"/>

+            <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\Symbian\9.1\S60_3rd\EPOC32\RELEASE\WINSCW\UDEB\ekern.exe" MACHINENAME = "Local Windows PC"/>

+            <SYMBOLICSWINSETTINGS EXECUTABLEPATH = "C:\WINDOWS\system32\ntdll.dll" MACHINENAME = "Local Windows PC"/>

     </WINDOW>

     <WINDOW>

         <SESSION>-2147483648</SESSION>

         <EDOCTYPE>23</EDOCTYPE>

-        <DEFAULT>true</DEFAULT>

-        <MAXIMIZED>true</MAXIMIZED>

         <FRAMELOC>

             <X>6</X>

             <Y>81</Y>

diff --git a/pjmedia/src/pjmedia/nullsound.c b/pjmedia/src/pjmedia/nullsound.c
index 7512fc5..2e95c3c 100644
--- a/pjmedia/src/pjmedia/nullsound.c
+++ b/pjmedia/src/pjmedia/nullsound.c
@@ -19,6 +19,7 @@
 #include <pjmedia/sound.h>
 #include <pjmedia/errno.h>
 #include <pj/assert.h>
+#include <pj/pool.h>
 
 #if PJMEDIA_SOUND_IMPLEMENTATION==PJMEDIA_SOUND_NULL_SOUND
 
@@ -30,10 +31,32 @@
     8000
 };
 
+static pj_pool_factory *pool_factory;
+
+struct pjmedia_snd_stream 
+{
+	pj_pool_t		*pool;
+	pjmedia_dir 		dir;
+	int 			rec_id;
+	int 			play_id;
+	unsigned		clock_rate;
+	unsigned		channel_count;
+	unsigned		samples_per_frame;
+	unsigned		bits_per_sample;
+	pjmedia_snd_rec_cb	rec_cb;
+	pjmedia_snd_play_cb	play_cb;
+	void			*user_data;
+};
+
 
 PJ_DEF(pj_status_t) pjmedia_snd_init(pj_pool_factory *factory)
 {
-    PJ_UNUSED_ARG(factory);
+    pool_factory = factory;
+    return PJ_SUCCESS;
+}
+
+PJ_DEF(pj_status_t) pjmedia_snd_deinit(void)
+{
     return PJ_SUCCESS;
 }
 
@@ -57,17 +80,9 @@
 					  void *user_data,
 					  pjmedia_snd_stream **p_snd_strm)
 {
-    PJ_UNUSED_ARG(index);
-    PJ_UNUSED_ARG(clock_rate);
-    PJ_UNUSED_ARG(channel_count);
-    PJ_UNUSED_ARG(samples_per_frame);
-    PJ_UNUSED_ARG(bits_per_sample);
-    PJ_UNUSED_ARG(rec_cb);
-    PJ_UNUSED_ARG(user_data);
-
-    *p_snd_strm = (void*)1;
-
-    return PJ_SUCCESS;
+    return pjmedia_snd_open(index, -2, clock_rate, channel_count,
+    			    samples_per_frame, bits_per_sample,
+    			    rec_cb, NULL, user_data, p_snd_strm);
 }
 
 PJ_DEF(pj_status_t) pjmedia_snd_open_player( int index,
@@ -79,17 +94,9 @@
 					void *user_data,
 					pjmedia_snd_stream **p_snd_strm )
 {
-    PJ_UNUSED_ARG(index);
-    PJ_UNUSED_ARG(clock_rate);
-    PJ_UNUSED_ARG(channel_count);
-    PJ_UNUSED_ARG(samples_per_frame);
-    PJ_UNUSED_ARG(bits_per_sample);
-    PJ_UNUSED_ARG(play_cb);
-    PJ_UNUSED_ARG(user_data);
-
-    *p_snd_strm = (void*)1;
-
-    return PJ_SUCCESS;
+    return pjmedia_snd_open(-2, index, clock_rate, channel_count,
+    			    samples_per_frame, bits_per_sample,
+    			    NULL, play_cb, user_data, p_snd_strm);
 }
 
 PJ_DEF(pj_status_t) pjmedia_snd_open( int rec_id,
@@ -103,17 +110,35 @@
 				      void *user_data,
 				      pjmedia_snd_stream **p_snd_strm)
 {
-    PJ_UNUSED_ARG(rec_id);
-    PJ_UNUSED_ARG(play_id);
-    PJ_UNUSED_ARG(clock_rate);
-    PJ_UNUSED_ARG(channel_count);
-    PJ_UNUSED_ARG(samples_per_frame);
-    PJ_UNUSED_ARG(bits_per_sample);
-    PJ_UNUSED_ARG(rec_cb);
-    PJ_UNUSED_ARG(play_cb);
-    PJ_UNUSED_ARG(user_data);
+    pj_pool_t *pool;
+    pjmedia_snd_stream *snd_strm;
 
-    *p_snd_strm = (void*)1;
+    pool = pj_pool_create(pool_factory, NULL, 128, 128, NULL);
+    snd_strm = PJ_POOL_ZALLOC_T(pool, pjmedia_snd_stream);
+    
+    snd_strm->pool = pool;
+    
+    if (rec_id == -1) rec_id = 0;
+    if (play_id == -1) play_id = 0;
+    
+    if (rec_id != -2 && play_id != -2)
+    	snd_strm->dir = PJMEDIA_DIR_CAPTURE_PLAYBACK;
+    else if (rec_id != -2)
+    	snd_strm->dir = PJMEDIA_DIR_CAPTURE;
+    else if (play_id != -2)
+    	snd_strm->dir = PJMEDIA_DIR_PLAYBACK;
+    
+    snd_strm->rec_id = rec_id;
+    snd_strm->play_id = play_id;
+    snd_strm->clock_rate = clock_rate;
+    snd_strm->channel_count = channel_count;
+    snd_strm->samples_per_frame = samples_per_frame;
+    snd_strm->bits_per_sample = bits_per_sample;
+    snd_strm->rec_cb = rec_cb;
+    snd_strm->play_cb = play_cb;
+    snd_strm->user_data = user_data;
+    
+    *p_snd_strm = snd_strm;
 
     return PJ_SUCCESS;
 }
@@ -135,21 +160,25 @@
 						pjmedia_snd_stream_info *pi)
 {
 
-    PJ_ASSERT_RETURN(strm && pi, PJ_EINVAL);
-    return PJ_EINVALIDOP;
+    pj_bzero(pi, sizeof(pjmedia_snd_stream_info));
+    pi->dir = strm->dir;
+    pi->play_id = strm->play_id;
+    pi->rec_id = strm->rec_id;
+    pi->clock_rate = strm->clock_rate;
+    pi->channel_count = strm->channel_count;
+    pi->samples_per_frame = strm->samples_per_frame;
+    pi->bits_per_sample = strm->bits_per_sample;
+    pi->rec_latency = 0;
+    pi->play_latency = 0;
+    
+    return PJ_SUCCESS;
 }
 
 
 PJ_DEF(pj_status_t) pjmedia_snd_stream_close(pjmedia_snd_stream *stream)
 {
-    PJ_UNUSED_ARG(stream);
+    pj_pool_release(stream->pool);
     return PJ_SUCCESS;
 }
 
-PJ_DEF(pj_status_t) pjmedia_snd_deinit(void)
-{
-    return PJ_SUCCESS;
-}
-
-
 #endif	/* PJMEDIA_SOUND_IMPLEMENTATION */
diff --git a/pjsip-apps/src/symbian_ua/ua.cpp b/pjsip-apps/src/symbian_ua/ua.cpp
index 8773549..8044226 100644
--- a/pjsip-apps/src/symbian_ua/ua.cpp
+++ b/pjsip-apps/src/symbian_ua/ua.cpp
@@ -143,6 +143,7 @@
 	pjsua_media_config med_cfg;
 
 	pjsua_config_default(&cfg);
+	cfg.max_calls = 2;
 	cfg.thread_cnt = 0; // Disable threading on Symbian
 	cfg.cb.on_incoming_call = &on_incoming_call;
 	cfg.cb.on_call_media_state = &on_call_media_state;