From 3a35214a95cecbd14d0c9caaeb477adfd3726ca0 Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Fri, 27 Nov 2009 12:15:55 +0000 Subject: [PATCH] Solves an issue with synchronization when creating a conference call reported by Emil Ivov. The noticeable problem was that only one of the two invited peers would get their ReceiveStream included into the audio mixing carried out in the conference. --- .../impl/neomedia/conference/AudioMixer.java | 22 +------------------ .../device/AudioMixerMediaDevice.java | 2 +- .../impl/neomedia/device/MediaDeviceImpl.java | 2 +- .../neomedia/device/MediaDeviceSession.java | 6 ++--- 4 files changed, 6 insertions(+), 26 deletions(-) diff --git a/src/net/java/sip/communicator/impl/neomedia/conference/AudioMixer.java b/src/net/java/sip/communicator/impl/neomedia/conference/AudioMixer.java index 345b27a7d..e636429de 100644 --- a/src/net/java/sip/communicator/impl/neomedia/conference/AudioMixer.java +++ b/src/net/java/sip/communicator/impl/neomedia/conference/AudioMixer.java @@ -508,27 +508,7 @@ public static Object getControl(Controls controlsImpl, String controlType) */ Time getDuration() { - Time duration = null; - - synchronized (inputDataSources) - { - for (InputDataSourceDesc inputDataSourceDesc : inputDataSources) - { - Time inputDuration - = inputDataSourceDesc - .getEffectiveInputDataSource().getDuration(); - - if (Duration.DURATION_UNBOUNDED.equals(inputDuration) - || Duration.DURATION_UNKNOWN.equals(inputDuration)) - return inputDuration; - - if ((duration == null) - || (duration.getNanoseconds() - < inputDuration.getNanoseconds())) - duration = inputDuration; - } - } - return (duration == null) ? Duration.DURATION_UNKNOWN : duration; + return ((DataSource) captureDevice).getDuration(); } /** diff --git a/src/net/java/sip/communicator/impl/neomedia/device/AudioMixerMediaDevice.java b/src/net/java/sip/communicator/impl/neomedia/device/AudioMixerMediaDevice.java index 041075987..179c8932c 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/AudioMixerMediaDevice.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/AudioMixerMediaDevice.java @@ -108,7 +108,7 @@ public synchronized MediaDeviceSession createSession() * @return the AudioMixer which performs audio mixing in this * MediaDevice (and rather the session it represents) */ - private AudioMixer getAudioMixer() + private synchronized AudioMixer getAudioMixer() { if (audioMixer == null) audioMixer = new AudioMixer(device.createCaptureDevice()) diff --git a/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceImpl.java b/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceImpl.java index e08136986..a53154f39 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceImpl.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceImpl.java @@ -124,7 +124,7 @@ CaptureDevice createCaptureDevice() logger .error( "Failed to create CaptureDevice" - + "from CaptureDeviceInfo " + + " from CaptureDeviceInfo " + captureDeviceInfo, exception); else diff --git a/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceSession.java b/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceSession.java index 9d967cbef..d0731df05 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceSession.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceSession.java @@ -210,7 +210,7 @@ public void addReceiveStream(ReceiveStream receiveStream) * @param receiveStreamDataSource the DataSource to be used for * accessing the media data of receiveStream during its playback */ - protected void addReceiveStream( + protected synchronized void addReceiveStream( ReceiveStream receiveStream, DataSource receiveStreamDataSource) { @@ -599,7 +599,7 @@ private static Format findFirstMatchingFormat( * @return the DataSource that this instance uses to read captured * media from */ - protected DataSource getCaptureDevice() + protected synchronized DataSource getCaptureDevice() { if (captureDevice == null) captureDevice = createCaptureDevice(); @@ -1028,7 +1028,7 @@ protected void realizeComplete(Processor player) * MediaDeviceSession and playback on the associated * MediaDevice */ - public void removeReceiveStream(ReceiveStream receiveStream) + public synchronized void removeReceiveStream(ReceiveStream receiveStream) { DataSource receiveStreamDataSource = receiveStreams.remove(receiveStream);