diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar index cc4558db7..ff4a12d64 100644 Binary files a/lib/installer-exclude/libjitsi.jar and b/lib/installer-exclude/libjitsi.jar differ diff --git a/lib/native/mac/libjnportaudio.jnilib b/lib/native/mac/libjnportaudio.jnilib index 04b39ad9c..b2c1da92f 100644 Binary files a/lib/native/mac/libjnportaudio.jnilib and b/lib/native/mac/libjnportaudio.jnilib differ diff --git a/src/native/build.xml b/src/native/build.xml index 6f27266d3..6d314b1b5 100644 --- a/src/native/build.xml +++ b/src/native/build.xml @@ -415,8 +415,6 @@ - - @@ -426,8 +424,6 @@ - - @@ -501,8 +497,6 @@ - - @@ -512,8 +506,6 @@ - - diff --git a/src/native/portaudio/net_java_sip_communicator_impl_neomedia_portaudio_PortAudio.c b/src/native/portaudio/net_java_sip_communicator_impl_neomedia_portaudio_PortAudio.c index 909919e64..ff3a35263 100644 --- a/src/native/portaudio/net_java_sip_communicator_impl_neomedia_portaudio_PortAudio.c +++ b/src/native/portaudio/net_java_sip_communicator_impl_neomedia_portaudio_PortAudio.c @@ -902,6 +902,62 @@ Java_net_java_sip_communicator_impl_neomedia_portaudio_PortAudio_PaDeviceInfo_1g return nameBytes; } +JNIEXPORT jbyteArray JNICALL +Java_net_java_sip_communicator_impl_neomedia_portaudio_PortAudio_PaDeviceInfo_1getTransportTypeBytes + (JNIEnv *env, jclass clazz, jlong deviceInfo) +{ + jbyteArray typeBytes = NULL; + if(((PaDeviceInfo *) (intptr_t) deviceInfo)->structVersion >= 3) + { + const char *type + = ((PaDeviceInfo *) (intptr_t) deviceInfo)->transportType; + + if(type != NULL) + { + size_t typeLength = strlen(type); + + typeBytes = (*env)->NewByteArray(env, typeLength); + if (typeBytes && typeLength) + { + (*env)->SetByteArrayRegion( + env, + typeBytes, 0, typeLength, + (jbyte *) type); + } + } + } + + return typeBytes; +} + +JNIEXPORT jbyteArray JNICALL +Java_net_java_sip_communicator_impl_neomedia_portaudio_PortAudio_PaDeviceInfo_1getDeviceUIDBytes + (JNIEnv *env, jclass clazz, jlong deviceInfo) +{ + jbyteArray uidBytes = NULL; + if(((PaDeviceInfo *) (intptr_t) deviceInfo)->structVersion >= 3) + { + const char *uid + = ((PaDeviceInfo *) (intptr_t) deviceInfo)->deviceUID; + + if (uid) + { + size_t uidLength = strlen(uid); + + uidBytes = (*env)->NewByteArray(env, uidLength); + if (uidBytes && uidLength) + { + (*env)->SetByteArrayRegion( + env, + uidBytes, 0, uidLength, + (jbyte *) uid); + } + } + } + + return uidBytes; +} + JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_portaudio_PortAudio_PaHostApiInfo_1getDefaultInputDevice (JNIEnv *env, jclass clazz, jlong hostApi) diff --git a/src/native/portaudio/net_java_sip_communicator_impl_neomedia_portaudio_PortAudio.h b/src/native/portaudio/net_java_sip_communicator_impl_neomedia_portaudio_PortAudio.h index bf619b1c2..e4c941d15 100644 --- a/src/native/portaudio/net_java_sip_communicator_impl_neomedia_portaudio_PortAudio.h +++ b/src/native/portaudio/net_java_sip_communicator_impl_neomedia_portaudio_PortAudio.h @@ -229,6 +229,22 @@ JNIEXPORT jint JNICALL Java_net_java_sip_communicator_impl_neomedia_portaudio_Po JNIEXPORT jbyteArray JNICALL Java_net_java_sip_communicator_impl_neomedia_portaudio_PortAudio_PaDeviceInfo_1getNameBytes (JNIEnv *, jclass, jlong); +/* + * Class: net_java_sip_communicator_impl_neomedia_portaudio_PortAudio + * Method: PaDeviceInfo_getTransportTypeBytes + * Signature: (J)[B + */ +JNIEXPORT jbyteArray JNICALL Java_net_java_sip_communicator_impl_neomedia_portaudio_PortAudio_PaDeviceInfo_1getTransportTypeBytes + (JNIEnv *, jclass, jlong); + +/* + * Class: net_java_sip_communicator_impl_neomedia_portaudio_PortAudio + * Method: PaDeviceInfo_getDeviceUIDBytes + * Signature: (J)[B + */ +JNIEXPORT jbyteArray JNICALL Java_net_java_sip_communicator_impl_neomedia_portaudio_PortAudio_PaDeviceInfo_1getDeviceUIDBytes + (JNIEnv *, jclass, jlong); + /* * Class: net_java_sip_communicator_impl_neomedia_portaudio_PortAudio * Method: PaHostApiInfo_getDefaultInputDevice diff --git a/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java b/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java index 9eb42da47..f29cdcb4e 100644 --- a/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java +++ b/src/net/java/sip/communicator/impl/neomedia/DeviceConfigurationComboBoxModel.java @@ -35,13 +35,24 @@ public static class CaptureDevice { /** * Compares two CaptureDeviceInfo - * @param a first CaptureDeviceInfo to compare - * @param b second CaptureDeviceInfo to compare - * @return whether a is equal to b + * @param device The CaptureDeviceInfo to compare with. + * @return whether this CaptureDevice is equal to device. */ - public static boolean equals(CaptureDeviceInfo a, CaptureDeviceInfo b) + public boolean equals(CaptureDeviceInfo device) { - return (a == null) ? (b == null) : a.equals(b); + if(info == null && device == null) + { + return true; + } + else if(info != null) + { + if(info instanceof ExtendedCaptureDeviceInfo) + { + return ((ExtendedCaptureDeviceInfo) info).equals(device); + } + return info.equals(device); + } + return false; } /** @@ -68,11 +79,25 @@ public CaptureDevice(CaptureDeviceInfo info) @Override public String toString() { - return - (info == null) - ? NeomediaActivator.getResources().getI18NString( - "impl.media.configform.NO_DEVICE") - : info.getName(); + if(info == null) + { + return NeomediaActivator.getResources().getI18NString( + "impl.media.configform.NO_DEVICE"); + } + else + { + String deviceString = info.getName(); + if(info instanceof ExtendedCaptureDeviceInfo) + { + String transportType + = ((ExtendedCaptureDeviceInfo) info).getTransportType(); + if(transportType != null) + { + deviceString += " (" + transportType + ")"; + } + } + return deviceString; + } } } @@ -217,7 +242,7 @@ private CaptureDevice[] getDevices() return devices; AudioSystem audioSystem; - List infos; + List infos = null; switch (type) { @@ -294,9 +319,14 @@ private CaptureDevice getSelectedDevice() throw new IllegalStateException("type"); } - for (CaptureDevice device : getDevices()) - if (CaptureDevice.equals(device.info, info)) - return device; + if(info != null) + { + for (CaptureDevice device : getDevices()) + { + if (device.info.equals(info)) + return device; + } + } return null; } @@ -355,7 +385,7 @@ private void setSelectedDevice(CaptureDevice device) if (audioSystem != null) audioSystem.setDevice( AudioSystem.CAPTURE_INDEX, - device.info, + ((ExtendedCaptureDeviceInfo) device.info), true); break; case AUDIO_NOTIFY: @@ -363,7 +393,7 @@ private void setSelectedDevice(CaptureDevice device) if (audioSystem != null) audioSystem.setDevice( AudioSystem.NOTIFY_INDEX, - device.info, + ((ExtendedCaptureDeviceInfo) device.info), true); break; case AUDIO_PLAYBACK: @@ -371,7 +401,7 @@ private void setSelectedDevice(CaptureDevice device) if (audioSystem != null) audioSystem.setDevice( AudioSystem.PLAYBACK_INDEX, - device.info, + ((ExtendedCaptureDeviceInfo) device.info), true); break; case VIDEO: