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());
}
/**