diff --git a/lib/native/mac/libjnmaccoreaudio.jnilib b/lib/native/mac/libjnmaccoreaudio.jnilib index 320601a6d1e7e5fe3897e225ef5efb88cf19341b..36b14be8817c9e4c79dcf50bdc6e2017a6509850 100755 Binary files a/lib/native/mac/libjnmaccoreaudio.jnilib and b/lib/native/mac/libjnmaccoreaudio.jnilib differ diff --git a/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice.c b/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.c similarity index 69% rename from src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice.c rename to src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.c index 460bb397c4ed664d18f06d0c48a76d4fffa2a474..7ad57402963b4483622548bf350f73a17ff950d2 100644 --- a/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice.c +++ b/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.c @@ -5,7 +5,7 @@ * See terms of license at gnu.org. */ -#include "org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice.h" +#include "org_jitsi_impl_neomedia_CoreAudioDevice.h" #include "../lib/device.h" @@ -21,8 +21,22 @@ static jbyteArray getStrBytes(JNIEnv *env, const char *str); // Implementation +JNIEXPORT jint JNICALL +Java_org_jitsi_impl_neomedia_CoreAudioDevice_initDevices + (JNIEnv *env, jclass clazz) +{ + return initDevices(); +} + +JNIEXPORT void JNICALL +Java_org_jitsi_impl_neomedia_CoreAudioDevice_freeDevices + (JNIEnv *env, jclass clazz) +{ + freeDevices(); +} + JNIEXPORT jbyteArray JNICALL -Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_getDeviceNameBytes +Java_org_jitsi_impl_neomedia_CoreAudioDevice_getDeviceNameBytes (JNIEnv *env, jclass clazz, jstring deviceUID) { const char * deviceUIDPtr = (*env)->GetStringUTFChars(env, deviceUID, 0); @@ -35,8 +49,23 @@ Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_getDeviceNameBytes return deviceNameBytes; } +JNIEXPORT jbyteArray JNICALL +Java_org_jitsi_impl_neomedia_CoreAudioDevice_getDeviceModelIdentifierBytes + (JNIEnv *env, jclass clazz, jstring deviceUID) +{ + const char * deviceUIDPtr = (*env)->GetStringUTFChars(env, deviceUID, 0); + char * deviceModelIdentifier = getDeviceModelIdentifier(deviceUIDPtr); + jbyteArray deviceModelIdentifierBytes + = getStrBytes(env, deviceModelIdentifier); + // Free + free(deviceModelIdentifier); + (*env)->ReleaseStringUTFChars(env, deviceUID, deviceUIDPtr); + + return deviceModelIdentifierBytes; +} + JNIEXPORT jint JNICALL -Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_setInputDeviceVolume +Java_org_jitsi_impl_neomedia_CoreAudioDevice_setInputDeviceVolume (JNIEnv *env, jclass clazz, jstring deviceUID, jfloat volume) { const char * deviceUIDPtr = (*env)->GetStringUTFChars(env, deviceUID, 0); @@ -48,7 +77,7 @@ Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_setInputDeviceVolume } JNIEXPORT jint JNICALL -Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_setOutputDeviceVolume +Java_org_jitsi_impl_neomedia_CoreAudioDevice_setOutputDeviceVolume (JNIEnv *env, jclass clazz, jstring deviceUID, jfloat volume) { const char * deviceUIDPtr = (*env)->GetStringUTFChars(env, deviceUID, 0); @@ -60,7 +89,7 @@ Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_setOutputDeviceVolume } JNIEXPORT jfloat JNICALL -Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_getInputDeviceVolume +Java_org_jitsi_impl_neomedia_CoreAudioDevice_getInputDeviceVolume (JNIEnv *env, jclass clazz, jstring deviceUID) { const char * deviceUIDPtr = (*env)->GetStringUTFChars(env, deviceUID, 0); @@ -72,7 +101,7 @@ Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_getInputDeviceVolume } JNIEXPORT jfloat JNICALL -Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_getOutputDeviceVolume +Java_org_jitsi_impl_neomedia_CoreAudioDevice_getOutputDeviceVolume (JNIEnv *env, jclass clazz, jstring deviceUID) { const char * deviceUIDPtr = (*env)->GetStringUTFChars(env, deviceUID, 0); diff --git a/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.h b/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.h new file mode 100644 index 0000000000000000000000000000000000000000..c02caef497f49e3594a415c5df6a0ce6922936de --- /dev/null +++ b/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.h @@ -0,0 +1,77 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class org_jitsi_impl_neomedia_CoreAudioDevice */ + +#ifndef _Included_org_jitsi_impl_neomedia_CoreAudioDevice +#define _Included_org_jitsi_impl_neomedia_CoreAudioDevice +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: initDevices + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_initDevices + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: freeDevices + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_freeDevices + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: getDeviceNameBytes + * Signature: (Ljava/lang/String;)[B + */ +JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_getDeviceNameBytes + (JNIEnv *, jclass, jstring); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: getDeviceModelIdentifierBytes + * Signature: (Ljava/lang/String;)[B + */ +JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_getDeviceModelIdentifierBytes + (JNIEnv *, jclass, jstring); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: setInputDeviceVolume + * Signature: (Ljava/lang/String;F)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_setInputDeviceVolume + (JNIEnv *, jclass, jstring, jfloat); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: setOutputDeviceVolume + * Signature: (Ljava/lang/String;F)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_setOutputDeviceVolume + (JNIEnv *, jclass, jstring, jfloat); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: getInputDeviceVolume + * Signature: (Ljava/lang/String;)F + */ +JNIEXPORT jfloat JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_getInputDeviceVolume + (JNIEnv *, jclass, jstring); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: getOutputDeviceVolume + * Signature: (Ljava/lang/String;)F + */ +JNIEXPORT jfloat JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_getOutputDeviceVolume + (JNIEnv *, jclass, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice.h b/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice.h deleted file mode 100644 index 06ff03ca89db95c7b81dc2ea5a1dcf75a9ec07be..0000000000000000000000000000000000000000 --- a/src/native/macosx/coreaudio/jni/org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Jitsi, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ - -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include <jni.h> -/* Header for class org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice */ - -#ifndef _Included_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice -#define _Included_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice - * Method: getDeviceNameBytes - * Signature: (Ljava/lang/String;)[B - */ -JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_getDeviceNameBytes - (JNIEnv *, jclass, jstring); - -/* - * Class: org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice - * Method: setInputDeviceVolume - * Signature: (Ljava/lang/String;F)I - */ -JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_setInputDeviceVolume - (JNIEnv *, jclass, jstring, jfloat); - -/* - * Class: org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice - * Method: setOutputDeviceVolume - * Signature: (Ljava/lang/String;F)I - */ -JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_setOutputDeviceVolume - (JNIEnv *, jclass, jstring, jfloat); - -/* - * Class: org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice - * Method: getInputDeviceVolume - * Signature: (Ljava/lang/String;)F - */ -JNIEXPORT jfloat JNICALL Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_getInputDeviceVolume - (JNIEnv *, jclass, jstring); - -/* - * Class: org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice - * Method: getOutputDeviceVolume - * Signature: (Ljava/lang/String;)F - */ -JNIEXPORT jfloat JNICALL Java_org_jitsi_impl_neomedia_maccoreaudio_CoreAudioDevice_getOutputDeviceVolume - (JNIEnv *, jclass, jstring); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/native/macosx/coreaudio/lib/device.c b/src/native/macosx/coreaudio/lib/device.c index a7e1df9f4b117db2a9d1bcc2ee5ef3baea9112a8..0894ae2aaacb64cab59e97c4c26721a6413a4fc3 100644 --- a/src/native/macosx/coreaudio/lib/device.c +++ b/src/native/macosx/coreaudio/lib/device.c @@ -18,6 +18,10 @@ /** * Private definition of functions, */ +char* getDeviceProperty( + const char * deviceUID, + AudioObjectPropertySelector propertySelector); + OSStatus setDeviceVolume( const char * deviceUID, Float32 volume, @@ -31,6 +35,26 @@ OSStatus getChannelsForStereo( const char * deviceUID, UInt32 * channels); +/** + * Do nothing: there is no need to initializes anything to get device + * information on MacOsX. + * + * @return Always returns 0 (always works). + */ +int initDevices(void) +{ + return 0; +} + +/** + * Do nothing: there is no need to frees anything once getting device + * information is finished on MacOsX. + */ +void freeDevices(void) +{ + // Nothing to do. +} + /** * Returns the audio device corresponding to the UID given in parameter. Or * kAudioObjectUnknown if the device is nonexistant or if anything as failed. @@ -104,6 +128,38 @@ AudioDeviceID getDevice( */ char* getDeviceName( const char * deviceUID) +{ + return getDeviceProperty(deviceUID, kAudioObjectPropertyName); +} + +/** + * Returns the device model identifier for the given device. Or NULL, if not + * available. The returned string must be freed by the caller. + * + * @param device The device to get the name from. + * + * @return The device model identifier for the given device. Or NULL, if not + * available. The returned string must be freed by the caller. + */ +char* getDeviceModelIdentifier( + const char * deviceUID) +{ + return getDeviceProperty(deviceUID, kAudioDevicePropertyModelUID); +} + +/** + * Returns the requested device property for the given device. Or NULL, if not + * available. The returned string must be freed by the caller. + * + * @param device The device to get the name from. + * @param propertySelector The property we want to retrieve. + * + * @return The requested device property for the given device. Or NULL, if not + * available. The returned string must be freed by the caller. + */ +char* getDeviceProperty( + const char * deviceUID, + AudioObjectPropertySelector propertySelector) { AudioDeviceID device; OSStatus err = noErr; @@ -114,15 +170,15 @@ char* getDeviceName( if((device = getDevice(deviceUID)) == kAudioObjectUnknown) { fprintf(stderr, - "getDeviceName (coreaudio/device.c): \ + "getDeviceProperty (coreaudio/device.c): \ \n\tgetDevice\n"); return NULL; } - // Gets the device name - CFStringRef deviceName; - size = sizeof(deviceName); - address.mSelector = kAudioObjectPropertyName; + // Gets the device property + CFStringRef deviceProperty; + size = sizeof(deviceProperty); + address.mSelector = propertySelector; address.mScope = kAudioObjectPropertyScopeGlobal; address.mElement = kAudioObjectPropertyElementMaster; @@ -132,33 +188,34 @@ char* getDeviceName( 0, NULL, &size, - &deviceName)) != noErr) + &deviceProperty)) != noErr) { fprintf(stderr, - "getDeviceName (coreaudio/device.c): \ + "getDeviceProperty (coreaudio/device.c): \ \n\tAudioObjectGetPropertyData, err: %d\n", ((int) err)); return NULL; } - // Converts the device name to ASCII. - CFIndex deviceNameLength = CFStringGetLength(deviceName) + 1; - char * deviceASCIIName; + // Converts the device property to ASCII. + CFIndex devicePropertyLength = CFStringGetLength(deviceProperty) + 1; + char * deviceASCIIProperty; // The caller of this function must free the string. - if((deviceASCIIName = (char *) malloc(deviceNameLength * sizeof(char))) + if((deviceASCIIProperty + = (char *) malloc(devicePropertyLength * sizeof(char))) == NULL) { - perror("getDeviceName (coreaudio/device.c): \ + perror("getDeviceProperty (coreaudio/device.c): \ \n\tmalloc\n"); return NULL; } if(CFStringGetCString( - deviceName, - deviceASCIIName, - deviceNameLength, + deviceProperty, + deviceASCIIProperty, + devicePropertyLength, kCFStringEncodingASCII)) { - return deviceASCIIName; + return deviceASCIIProperty; } return NULL; } diff --git a/src/native/macosx/coreaudio/lib/device.h b/src/native/macosx/coreaudio/lib/device.h index ed5b12cb85c5caad2c6ad0f3128f2a6c47a40510..3a78e8441442973c21c6da3a28c79dd4b98b55ae 100644 --- a/src/native/macosx/coreaudio/lib/device.h +++ b/src/native/macosx/coreaudio/lib/device.h @@ -17,12 +17,19 @@ * * @author Vincent Lucas */ +int initDevices(void); + +void freeDevices(void); + AudioDeviceID getDevice( const char * deviceUID); char* getDeviceName( const char * deviceUID); +char* getDeviceModelIdentifier( + const char * deviceUID); + OSStatus setInputDeviceVolume( const char * deviceUID, Float32 volume); diff --git a/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice.c b/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.c similarity index 82% rename from src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice.c rename to src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.c index a0824d3e64dd8da7dce0e2f242edf39f5601594b..2afc9305c4cd1c46752ca1afcb5edf5cba0f052d 100644 --- a/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice.c +++ b/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.c @@ -5,7 +5,7 @@ * See terms of license at gnu.org. */ -#include "org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice.h" +#include "org_jitsi_impl_neomedia_CoreAudioDevice.h" #include "../lib/device.h" @@ -22,21 +22,21 @@ static jbyteArray getStrBytes(JNIEnv *env, const char *str); // Implementation JNIEXPORT jint JNICALL -Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_initDevices +Java_org_jitsi_impl_neomedia_CoreAudioDevice_initDevices (JNIEnv *env, jclass clazz) { return initDevices(); } JNIEXPORT void JNICALL -Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_freeDevices +Java_org_jitsi_impl_neomedia_CoreAudioDevice_freeDevices (JNIEnv *env, jclass clazz) { freeDevices(); } JNIEXPORT jbyteArray JNICALL -Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_getDeviceNameBytes +Java_org_jitsi_impl_neomedia_CoreAudioDevice_getDeviceNameBytes (JNIEnv *env, jclass clazz, jstring deviceUID) { const char * deviceUIDPtr = env->GetStringUTFChars(deviceUID, 0); @@ -50,7 +50,7 @@ Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_getDeviceNameBytes } JNIEXPORT jint JNICALL -Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_setInputDeviceVolume +Java_org_jitsi_impl_neomedia_CoreAudioDevice_setInputDeviceVolume (JNIEnv *env, jclass clazz, jstring deviceUID, jfloat volume) { const char * deviceUIDPtr = env->GetStringUTFChars(deviceUID, 0); @@ -62,7 +62,7 @@ Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_setInputDeviceVolume } JNIEXPORT jint JNICALL -Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_setOutputDeviceVolume +Java_org_jitsi_impl_neomedia_CoreAudioDevice_setOutputDeviceVolume (JNIEnv *env, jclass clazz, jstring deviceUID, jfloat volume) { const char * deviceUIDPtr = env->GetStringUTFChars(deviceUID, 0); @@ -74,7 +74,7 @@ Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_setOutputDeviceVolume } JNIEXPORT jfloat JNICALL -Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_getInputDeviceVolume +Java_org_jitsi_impl_neomedia_CoreAudioDevice_getInputDeviceVolume (JNIEnv *env, jclass clazz, jstring deviceUID) { const char * deviceUIDPtr = env->GetStringUTFChars(deviceUID, 0); @@ -86,7 +86,7 @@ Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_getInputDeviceVolume } JNIEXPORT jfloat JNICALL -Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_getOutputDeviceVolume +Java_org_jitsi_impl_neomedia_CoreAudioDevice_getOutputDeviceVolume (JNIEnv *env, jclass clazz, jstring deviceUID) { const char * deviceUIDPtr = env->GetStringUTFChars(deviceUID, 0); diff --git a/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.h b/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.h new file mode 100644 index 0000000000000000000000000000000000000000..c02caef497f49e3594a415c5df6a0ce6922936de --- /dev/null +++ b/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_CoreAudioDevice.h @@ -0,0 +1,77 @@ +/* DO NOT EDIT THIS FILE - it is machine generated */ +#include <jni.h> +/* Header for class org_jitsi_impl_neomedia_CoreAudioDevice */ + +#ifndef _Included_org_jitsi_impl_neomedia_CoreAudioDevice +#define _Included_org_jitsi_impl_neomedia_CoreAudioDevice +#ifdef __cplusplus +extern "C" { +#endif +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: initDevices + * Signature: ()I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_initDevices + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: freeDevices + * Signature: ()V + */ +JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_freeDevices + (JNIEnv *, jclass); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: getDeviceNameBytes + * Signature: (Ljava/lang/String;)[B + */ +JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_getDeviceNameBytes + (JNIEnv *, jclass, jstring); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: getDeviceModelIdentifierBytes + * Signature: (Ljava/lang/String;)[B + */ +JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_getDeviceModelIdentifierBytes + (JNIEnv *, jclass, jstring); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: setInputDeviceVolume + * Signature: (Ljava/lang/String;F)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_setInputDeviceVolume + (JNIEnv *, jclass, jstring, jfloat); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: setOutputDeviceVolume + * Signature: (Ljava/lang/String;F)I + */ +JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_setOutputDeviceVolume + (JNIEnv *, jclass, jstring, jfloat); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: getInputDeviceVolume + * Signature: (Ljava/lang/String;)F + */ +JNIEXPORT jfloat JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_getInputDeviceVolume + (JNIEnv *, jclass, jstring); + +/* + * Class: org_jitsi_impl_neomedia_CoreAudioDevice + * Method: getOutputDeviceVolume + * Signature: (Ljava/lang/String;)F + */ +JNIEXPORT jfloat JNICALL Java_org_jitsi_impl_neomedia_CoreAudioDevice_getOutputDeviceVolume + (JNIEnv *, jclass, jstring); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice.h b/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice.h deleted file mode 100644 index fafe376c04a4059f4e6528c7a637d7327101dd43..0000000000000000000000000000000000000000 --- a/src/native/windows/coreaudio/jni/org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice.h +++ /dev/null @@ -1,69 +0,0 @@ -/* DO NOT EDIT THIS FILE - it is machine generated */ -#include <jni.h> -/* Header for class org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice */ - -#ifndef _Included_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice -#define _Included_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice -#ifdef __cplusplus -extern "C" { -#endif -/* - * Class: org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice - * Method: initDevices - * Signature: ()I - */ -JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_initDevices - (JNIEnv *, jclass); - -/* - * Class: org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice - * Method: freeDevices - * Signature: ()V - */ -JNIEXPORT void JNICALL Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_freeDevices - (JNIEnv *, jclass); - -/* - * Class: org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice - * Method: getDeviceNameBytes - * Signature: (Ljava/lang/String;)[B - */ -JNIEXPORT jbyteArray JNICALL Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_getDeviceNameBytes - (JNIEnv *, jclass, jstring); - -/* - * Class: org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice - * Method: setInputDeviceVolume - * Signature: (Ljava/lang/String;F)I - */ -JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_setInputDeviceVolume - (JNIEnv *, jclass, jstring, jfloat); - -/* - * Class: org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice - * Method: setOutputDeviceVolume - * Signature: (Ljava/lang/String;F)I - */ -JNIEXPORT jint JNICALL Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_setOutputDeviceVolume - (JNIEnv *, jclass, jstring, jfloat); - -/* - * Class: org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice - * Method: getInputDeviceVolume - * Signature: (Ljava/lang/String;)F - */ -JNIEXPORT jfloat JNICALL Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_getInputDeviceVolume - (JNIEnv *, jclass, jstring); - -/* - * Class: org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice - * Method: getOutputDeviceVolume - * Signature: (Ljava/lang/String;)F - */ -JNIEXPORT jfloat JNICALL Java_org_jitsi_impl_neomedia_wincoreaudio_CoreAudioDevice_getOutputDeviceVolume - (JNIEnv *, jclass, jstring); - -#ifdef __cplusplus -} -#endif -#endif diff --git a/src/org/jitsi/impl/neomedia/wincoreaudio/CoreAudioDevice.java b/src/org/jitsi/impl/neomedia/CoreAudioDevice.java similarity index 57% rename from src/org/jitsi/impl/neomedia/wincoreaudio/CoreAudioDevice.java rename to src/org/jitsi/impl/neomedia/CoreAudioDevice.java index 3477f5ec93b453f1438be7d5cac50b6de5451b2e..4c1529275a66c2f5bf5f962116eada8342c76ad5 100644 --- a/src/org/jitsi/impl/neomedia/wincoreaudio/CoreAudioDevice.java +++ b/src/org/jitsi/impl/neomedia/CoreAudioDevice.java @@ -4,12 +4,12 @@ * Distributable under LGPL license. * See terms of license at gnu.org. */ -package org.jitsi.impl.neomedia.wincoreaudio; +package org.jitsi.impl.neomedia; import org.jitsi.util.*; /** - * JNI link to the Windows CoreAudio library. + * JNI link to the MacOsX / Windows CoreAudio library. * * @author Vincent Lucqs */ @@ -17,11 +17,21 @@ public class CoreAudioDevice { static { - System.loadLibrary("jnwincoreaudio"); + if(OSUtils.IS_MAC) + { + System.loadLibrary("jnmaccoreaudio"); + } + else if(OSUtils.IS_WINDOWS_VISTA + || OSUtils.IS_WINDOWS_7 + || OSUtils.IS_WINDOWS_8) + { + System.loadLibrary("jnwincoreaudio"); + } } -// public static native AudioDeviceID getDevice( -// String deviceUID); + public static native int initDevices(); + + public static native void freeDevices(); public static String getDeviceName( String deviceUID) @@ -32,11 +42,21 @@ public static String getDeviceName( return deviceName; } - public static native int initDevices(); + public static native byte[] getDeviceNameBytes( + String deviceUID); - public static native void freeDevices(); + public static String getDeviceModelIdentifier( + String deviceUID) + { + byte[] deviceModelIdentifierBytes + = getDeviceModelIdentifierBytes(deviceUID); + String deviceModelIdentifier + = StringUtils.newString(deviceModelIdentifierBytes); - public static native byte[] getDeviceNameBytes( + return deviceModelIdentifier; + } + + public static native byte[] getDeviceModelIdentifierBytes( String deviceUID); public static native int setInputDeviceVolume( diff --git a/src/org/jitsi/impl/neomedia/device/Devices.java b/src/org/jitsi/impl/neomedia/device/Devices.java index a8f32f8351857b12fa9c78f831ba9abef78ef2da..5bad919ced9c63afbc39ac9fbec6714e83c79556 100644 --- a/src/org/jitsi/impl/neomedia/device/Devices.java +++ b/src/org/jitsi/impl/neomedia/device/Devices.java @@ -72,7 +72,8 @@ public ExtendedCaptureDeviceInfo getDevice( { ExtendedCaptureDeviceInfo activeDevice = activeDevices.get(i); - if(!devicePreferences.contains(activeDevice.getIdentifier())) + if(!devicePreferences.contains( + activeDevice.getModelIdentifier())) { // Adds the device in the preference list (to the end of the // list, but the save device will push it to the top of @@ -97,7 +98,7 @@ public ExtendedCaptureDeviceInfo getDevice( // If we have found the "preferred" device among active // device. if(devicePreference.equals( - activeDevice.getIdentifier())) + activeDevice.getModelIdentifier())) { return activeDevice; } @@ -209,7 +210,7 @@ private void saveDevice( String selectedDeviceIdentifier = (device == null) ? NoneAudioSystem.LOCATOR_PROTOCOL - : device.getIdentifier(); + : device.getModelIdentifier(); // Sorts the user preferences to put the selected device on top. addToDevicePreferences( @@ -305,7 +306,7 @@ private void addToDevicePreferences( for(ExtendedCaptureDeviceInfo activeDevice : activeDevices) { if(devicePreference.equals( - activeDevice.getIdentifier()) + activeDevice.getModelIdentifier()) || devicePreference.equals( NoneAudioSystem.LOCATOR_PROTOCOL)) { @@ -336,12 +337,12 @@ private void renameOldFashionedIdentifier( for(ExtendedCaptureDeviceInfo activeDevice : activeDevices) { String name = activeDevice.getName(); - String id = activeDevice.getIdentifier(); + String id = activeDevice.getModelIdentifier(); // We can only switch to the new fashioned notation, only if the OS // API gives us a unique identifier (different from the device // name). - if(!name.equals(id)) + if(id != null) { synchronized(devicePreferences) { diff --git a/src/org/jitsi/impl/neomedia/device/ExtendedCaptureDeviceInfo.java b/src/org/jitsi/impl/neomedia/device/ExtendedCaptureDeviceInfo.java index 7a3f611045ae7d88f8d4aa8ae920cd057df2f0c7..f166a83d1181ed48b5d580107ca8f47df9cb0f21 100644 --- a/src/org/jitsi/impl/neomedia/device/ExtendedCaptureDeviceInfo.java +++ b/src/org/jitsi/impl/neomedia/device/ExtendedCaptureDeviceInfo.java @@ -27,6 +27,11 @@ public class ExtendedCaptureDeviceInfo */ private final String uid; + /** + * The persistent identifier for the model of this device. + */ + private final String modelIdentifier; + /** * Constructs a CaptureDeviceInfo object with the specified name, media * locator, and array of Format objects. @@ -34,18 +39,22 @@ public class ExtendedCaptureDeviceInfo * @param captureDeiceInfo the device info. * @param uid The device UID (unique identifier). * @param transportType The device transport type. + * @param modelIdentifier The persistent identifier for the model of this + * device. */ public ExtendedCaptureDeviceInfo( CaptureDeviceInfo captureDeviceInfo, String uid, - String transportType) + String transportType, + String modelIdentifier) { this( captureDeviceInfo.getName(), captureDeviceInfo.getLocator(), captureDeviceInfo.getFormats(), uid, - transportType); + transportType, + modelIdentifier); } /** @@ -57,15 +66,22 @@ public ExtendedCaptureDeviceInfo( * @param formats An array of the output formats supported by the device. * @param uid The device UID (unique identifier). * @param transportType The device transport type. + * @param modelIdentifier The persistent identifier for the model of this + * device. */ public ExtendedCaptureDeviceInfo( - String name, MediaLocator locator, Format[] formats, - String uid, String transportType) + String name, + MediaLocator locator, + Format[] formats, + String uid, + String transportType, + String modelIdentifier) { super(name, locator, formats); this.uid = uid; this.transportType = transportType; + this.modelIdentifier = modelIdentifier; } /** @@ -119,6 +135,16 @@ public String getUID() return uid; } + /** + * Returns the model identifier of this instance. + * + * @return the model identifier of this instance + */ + public String getModelIdentifier() + { + return modelIdentifier; + } + /** * Returns a hash code value for this object for the benefit of hashtables. * diff --git a/src/org/jitsi/impl/neomedia/device/PortAudioSystem.java b/src/org/jitsi/impl/neomedia/device/PortAudioSystem.java index c46f6164fcf58661f4852d69bb4966e65f2b3d4d..43bb6a921d1c971735744b4a8f91ca0570bf8fc7 100644 --- a/src/org/jitsi/impl/neomedia/device/PortAudioSystem.java +++ b/src/org/jitsi/impl/neomedia/device/PortAudioSystem.java @@ -280,6 +280,8 @@ protected void doInitialize() = Pa.DeviceInfo_getTransportType(deviceInfo); String deviceUID = Pa.DeviceInfo_getDeviceUID(deviceInfo); + String modelIdentifier + = CoreAudioDevice.getDeviceModelIdentifier(deviceUID); /* * TODO The intention of reinitialize() was to perform the @@ -336,7 +338,8 @@ protected void doInitialize() Format.byteArray) }, deviceUID, - transportType); + transportType, + modelIdentifier); } /* diff --git a/src/org/jitsi/impl/neomedia/device/PulseAudioSystem.java b/src/org/jitsi/impl/neomedia/device/PulseAudioSystem.java index c91ba16c5831fd1282350a7e3ef4d02acaa4f77e..d7c8cda77796a0bbb8d57190b624a6d3576f169b 100644 --- a/src/org/jitsi/impl/neomedia/device/PulseAudioSystem.java +++ b/src/org/jitsi/impl/neomedia/device/PulseAudioSystem.java @@ -370,6 +370,7 @@ public void callback(long c, long i, int eol) captureDeviceFormats.toArray( new Format[captureDeviceFormats.size()]), null, + null, null)); } if (!playbackDevices.isEmpty()) @@ -381,6 +382,7 @@ public void callback(long c, long i, int eol) new MediaLocator(LOCATOR_PROTOCOL + ":"), null, null, + null, null)); } @@ -473,6 +475,7 @@ private void sinkInfoListCallback( + name), null, null, + null, null)); } @@ -539,6 +542,7 @@ private void sourceInfoListCallback( sourceInfoFormatList.toArray( new Format[sourceInfoFormatList.size()]), null, + null, null)); } } diff --git a/src/org/jitsi/impl/neomedia/maccoreaudio/CoreAudioDevice.java b/src/org/jitsi/impl/neomedia/maccoreaudio/CoreAudioDevice.java deleted file mode 100644 index 21d7481a8a3e0794e95318d2657ac81dd68d4252..0000000000000000000000000000000000000000 --- a/src/org/jitsi/impl/neomedia/maccoreaudio/CoreAudioDevice.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Jitsi, the OpenSource Java VoIP and Instant Messaging client. - * - * Distributable under LGPL license. - * See terms of license at gnu.org. - */ -package org.jitsi.impl.neomedia.maccoreaudio; - -import org.jitsi.util.*; - -/** - * JNI link to the MacOSX CoreAudio library. - * - * @author Vincent Lucqs - */ -public class CoreAudioDevice -{ - static - { - System.loadLibrary("jnmaccoreaudio"); - } - -// public static native AudioDeviceID getDevice( -// String deviceUID); - - public static String getDeviceName( - String deviceUID) - { - byte[] deviceNameBytes = getDeviceNameBytes(deviceUID); - String deviceName = StringUtils.newString(deviceNameBytes); - - return deviceName; - } - - public static native byte[] getDeviceNameBytes( - String deviceUID); - - public static native int setInputDeviceVolume( - String deviceUID, - float volume); - - public static native int setOutputDeviceVolume( - String deviceUID, - float volume); - - public static native float getInputDeviceVolume( - String deviceUID); - - public static native float getOutputDeviceVolume( - String deviceUID); -}