r2630 - trunk/libminisip/source/soundcard

mikma at minisip.org mikma at minisip.org
Sun Jun 4 15:09:36 CEST 2006


Author: mikma
Date: 2006-06-04 15:09:35 +0200 (Sun, 04 Jun 2006)
New Revision: 2630

Modified:
   trunk/libminisip/source/soundcard/DirectSoundDriver.cxx
Log:
Enumerate sound capture devices.


Modified: trunk/libminisip/source/soundcard/DirectSoundDriver.cxx
===================================================================
--- trunk/libminisip/source/soundcard/DirectSoundDriver.cxx	2006-06-04 13:08:20 UTC (rev 2629)
+++ trunk/libminisip/source/soundcard/DirectSoundDriver.cxx	2006-06-04 13:09:35 UTC (rev 2630)
@@ -63,7 +63,8 @@
 }
 
 static BOOL CALLBACK dsEnumCallback(LPGUID guid, LPCSTR description,
-				    LPCSTR module, LPVOID context){
+				    LPCSTR module, LPVOID context,
+				    bool capture){
 	std::vector<SoundDeviceName> *names = (std::vector<SoundDeviceName>*)context;
 	string uuid;
 
@@ -79,21 +80,38 @@
 		uuid = "0";
 	}
 
-	string name = DRIVER_PREFIX + ':' + uuid;
-	SoundDeviceName deviceName( name, description );
+	string name = string( DRIVER_PREFIX ) + ':' + uuid;
+	// FIXME detect channel count.
+	int maxInputChannels = capture ? 2 : 0;
+	int maxOutputChannels = capture ? 0 : 2;
+	SoundDeviceName deviceName( name, description, maxInputChannels, maxOutputChannels );
 
 	names->push_back( deviceName );
 	
 	return true;
 }
 
+static BOOL CALLBACK dsEnumPlaybackCallback(LPGUID guid, LPCSTR description,
+					   LPCSTR module, LPVOID context){
+	return dsEnumCallback(guid, description, module, context, false);
+}
+
+static BOOL CALLBACK dsEnumCaptureCallback(LPGUID guid, LPCSTR description,
+					   LPCSTR module, LPVOID context){
+	return dsEnumCallback(guid, description, module, context, true);
+}
+
 std::vector<SoundDeviceName> DirectSoundDriver::getDeviceNames() const {
 	std::vector<SoundDeviceName> names;
 
-	if( DirectSoundEnumerate( dsEnumCallback, &names ) != DS_OK ){
+	if( DirectSoundEnumerate( dsEnumPlaybackCallback, &names ) != DS_OK ){
 		cerr << "DirectSoundDriver::getDeviceNames DirectSoundEnumerate failed" << endl;
 	}
 
+	if( DirectSoundCaptureEnumerate( dsEnumCaptureCallback, &names ) != DS_OK ){
+		cerr << "DirectSoundDriver::getDeviceNames DirectSoundEnumerate failed" << endl;
+	}
+
 	return names;
 }
 



More information about the Minisip-devel mailing list