diff --git a/src/net/java/sip/communicator/impl/neomedia/MediaStreamImpl.java b/src/net/java/sip/communicator/impl/neomedia/MediaStreamImpl.java index 5b4c18312..92fe1f2ba 100644 --- a/src/net/java/sip/communicator/impl/neomedia/MediaStreamImpl.java +++ b/src/net/java/sip/communicator/impl/neomedia/MediaStreamImpl.java @@ -65,7 +65,19 @@ public class MediaStreamImpl * {@link #deviceSession} and changes in the values of its * {@link MediaDeviceSession#OUTPUT_DATA_SOURCE} property. */ - private PropertyChangeListener deviceSessionPropertyChangeListener; + private final PropertyChangeListener deviceSessionPropertyChangeListener = + new PropertyChangeListener() + { + public void propertyChange(PropertyChangeEvent event) + { + if (MediaDeviceSession + .OUTPUT_DATA_SOURCE.equals(event.getPropertyName())) + deviceSessionOutputDataSourceChanged(); + else if (MediaDeviceSession + .SSRC_LIST.equals(event.getPropertyName())) + deviceSessionSsrcListChanged(event); + } + }; /** * The MediaDirection in which this MediaStream is allowed @@ -483,22 +495,6 @@ else if (dataSource instanceof PullDataSource) + " is " + sendStreamCount); } - - if (deviceSessionPropertyChangeListener == null) - deviceSessionPropertyChangeListener = new PropertyChangeListener() - { - public void propertyChange(PropertyChangeEvent event) - { - if (MediaDeviceSession - .OUTPUT_DATA_SOURCE.equals(event.getPropertyName())) - deviceSessionOutputDataSourceChanged(); - else if (MediaDeviceSession - .SSRC_LIST.equals(event.getPropertyName())) - deviceSessionSsrcListChanged(event); - } - }; - deviceSession - .addPropertyChangeListener(deviceSessionPropertyChangeListener); } /** @@ -921,9 +917,8 @@ public void setDevice(MediaDevice device) { startedDirection = deviceSession.getStartedDirection(); - if (deviceSessionPropertyChangeListener != null) - deviceSession.removePropertyChangeListener( - deviceSessionPropertyChangeListener); + deviceSession.removePropertyChangeListener( + deviceSessionPropertyChangeListener); deviceSession.close(); deviceSession = null; @@ -933,6 +928,9 @@ public void setDevice(MediaDevice device) deviceSession = abstractMediaDevice.createSession(); + deviceSession.addPropertyChangeListener( + deviceSessionPropertyChangeListener); + /* * Setting a new device resets any previously-set direction. * Otherwise, we risk not being able to set a new device if it is 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 1068364c3..71d601a6c 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceSession.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/MediaDeviceSession.java @@ -1401,10 +1401,12 @@ public void setReceiveStream(ReceiveStream receiveStream) */ private void setSsrcList(long[] newSsrcList) { - long[] oldSsrcList = ssrcList; + // use getRemoteSSRCList() instead of direct access to ssrcList + // as the extender may override it + long[] oldSsrcList = getRemoteSSRCList(); ssrcList = newSsrcList; - firePropertyChange(SSRC_LIST, oldSsrcList, newSsrcList); + firePropertyChange(SSRC_LIST, oldSsrcList, getRemoteSSRCList()); } /**