Adds more code on dispatching audio level events.

cusax-fix
Emil Ivov 16 years ago
parent 778da07280
commit 437ee2a8ce

@ -15,8 +15,10 @@
import net.java.sip.communicator.impl.protocol.sip.sdp.*;
import net.java.sip.communicator.service.neomedia.*;
//disambiguates VideoListener which is also available in protocol.event
//the following two disambiguate VideoListener which is also available in
//protocol.event
import net.java.sip.communicator.service.neomedia.event.SimpleAudioLevelListener;
import net.java.sip.communicator.service.neomedia.event.CsrcAudioLevelListener;
import net.java.sip.communicator.service.neomedia.device.*;
import net.java.sip.communicator.service.neomedia.format.*;
@ -213,6 +215,18 @@ public void videoRemoved(net.java.sip.communicator.service.neomedia
*/
private Object streamAudioLevelListenerLock = new Object();
/**
* The listener that our <tt>CallPeer</tt> registers for CSRC audio level
* events.
*/
private CsrcAudioLevelListener csrcAudioLevelListener = null;
/**
* The object that we are using to sync operations on
* <tt>csrcAudioLevelListener</tt>.
*/
private Object csrcAudioLevelListenerLock = new Object();
/**
* Holds the zrtp controls used for the current call.
*/
@ -768,25 +782,7 @@ private MediaStream configureAndStartStream(
{
this.audioStream = (AudioMediaStream)stream;
// if we already have a local level listener - register it now.
synchronized (localAudioLevelListenerLock)
{
if (localAudioLevelListener != null)
{
audioStream.setLocalUserAudioLevelListener(
localAudioLevelListener);
}
}
// if we already have a stream level listener - register it now.
synchronized (streamAudioLevelListenerLock)
{
if (streamAudioLevelListener != null)
{
audioStream.setStreamAudioLevelListener(
streamAudioLevelListener);
}
}
registerAudioLevelListeners(audioStream);
}
else
setVideoStream((VideoMediaStream)stream);
@ -807,6 +803,45 @@ private MediaStream configureAndStartStream(
return stream;
}
/**
* Registers all audio level listeners currently known to this media handler
* with the specified <tt>audioStream</tt>.
*
* @param audioStream the <tt>AudioMediaStream</tt> that we'd like to
* register our audio level listeners with.
*/
private void registerAudioLevelListeners(AudioMediaStream audioStream)
{
// if we already have a local level listener - register it now.
synchronized (localAudioLevelListenerLock)
{
if (localAudioLevelListener != null)
{
audioStream.setLocalUserAudioLevelListener(
localAudioLevelListener);
}
}
// if we already have a stream level listener - register it now.
synchronized (streamAudioLevelListenerLock)
{
if (streamAudioLevelListener != null)
{
audioStream.setStreamAudioLevelListener(
streamAudioLevelListener);
}
}
// if we already have a csrc level listener - register it now.
synchronized (csrcAudioLevelListenerLock)
{
if (csrcAudioLevelListener != null)
{
audioStream.setCsrcAudioLevelListener(csrcAudioLevelListener);
}
}
}
/**
* Registers all dynamic payload mappings known to this
* <tt>MediaHandler</tt> with the specified <tt>MediaStream</tt>.
@ -1706,30 +1741,25 @@ public void setStreamAudioLevelListener(SimpleAudioLevelListener listener)
}
/**
* Adds a specific <tt>ConferenceMembersSoundLevelListener</tt> to the list
* of listeners interested in and notified about changes in conference
* members sound level.
* Sets <tt>csrcAudioLevelListener</tt> as the listener that will be
* receiving notifications for changes in the audio levels of the remote
* participants that our peer is mixing.
*
* @param listener the <tt>ConferenceMembersSoundLevelListener</tt> to add
* @param csrcAudioLevelListener the <tt>CsrcAudioLevelListener</tt> to set
* to our audio streams.
*/
public void addConferenceMembersSoundLevelListener(
SoundLevelListener listener)
{
}
/**
* Removes a specific <tt>ConferenceMembersSoundLevelListener</tt> of the
* list of listeners interested in and notified about changes in conference
* members sound level.
*
* @param listener the <tt>ConferenceMembersSoundLevelListener</tt> to
* remove
*/
public void removeConferenceMembersSoundLevelListener(
SoundLevelListener listener)
public void setCsrcAudioLevelListener(
CsrcAudioLevelListener csrcAudioLevelListener)
{
synchronized(csrcAudioLevelListenerLock)
{
this.csrcAudioLevelListener = csrcAudioLevelListener;
if(audioStream != null)
{
audioStream.setCsrcAudioLevelListener(csrcAudioLevelListener);
}
}
}
/**
@ -1771,8 +1801,12 @@ boolean isSecure()
}
/**
* Passes <tt>multiStreamData</tt> to the video stream that we are using
* in this media handler (if any) so that the underlying ZRTP lib could
* properly handle stream security.
*
* @param multiStreamData
* @param multiStreamData the data that we are supposed to pass to our
* video stream.
*/
void startZrtpMultistream(byte[] multiStreamData)
{

@ -1802,6 +1802,8 @@ public void removeConferenceMembersSoundLevelListener(
*/
public void audioLevelsReceived(long[][] audioLevels)
{
if ( getConferenceMemberCount() == 0 )
return;
//ConferenceMembersSoundLevelEvent evt
// = new ConferenceMembersSoundLevelEvent(this, levels);

@ -65,7 +65,7 @@ public class ConferenceMemberSipImpl
/**
* The SSRC value if transmitted by the focus of the conference.
*/
private String ssrc;
private long ssrc = -1;
/**
* Initializes a new <tt>ConferenceMemberSipImpl</tt> instance with a
@ -141,19 +141,21 @@ else if (PENDING.equalsIgnoreCase(endpointStatus))
}
/**
* Return the SSRC value;
* Returns the SSRC value associated with this participant;
*
* @return the ssrc
*/
public String getSSRC()
public long getSSRC()
{
return ssrc;
}
/**
* Changes SSRC value;
* @param ssrc the ssrc to set
* Sets the SSRC identifier of this member.
*
* @param ssrc the SSRC ID to set for this member.
*/
public void setSSRC(String ssrc)
public void setSSRC(long ssrc)
{
this.ssrc = ssrc;
}

@ -1067,15 +1067,16 @@ private void setConferenceInfoDocument(
else if (ELEMENT_ENDPOINT.equals(userChildName))
{
endpointStatus = getEndpointStatus(userChild);
ssrc
= getEndpointMediaSrcId(
ssrc = getEndpointMediaSrcId(
userChild,
MediaType.AUDIO);
}
}
existingConferenceMember.setDisplayName(displayName);
existingConferenceMember.setEndpointStatus(endpointStatus);
existingConferenceMember.setSSRC(ssrc);
if (ssrc != null)
existingConferenceMember.setSSRC(Long.parseLong(ssrc));
if (addConferenceMember)
callPeer.addConferenceMember(existingConferenceMember);

@ -17,7 +17,6 @@
*/
public interface CsrcAudioLevelListener
{
/**
* Called by the media service implementation after it has received audio
* levels for the various participants (Contributing SouRCes) that are

Loading…
Cancel
Save