diff --git a/lib/installer-exclude/jml-1.0b5.jar b/lib/installer-exclude/jml-1.0b5.jar index f3f250794..3243a017d 100644 Binary files a/lib/installer-exclude/jml-1.0b5.jar and b/lib/installer-exclude/jml-1.0b5.jar differ diff --git a/src/net/java/sip/communicator/impl/neomedia/MediaUtils.java b/src/net/java/sip/communicator/impl/neomedia/MediaUtils.java index d3acf6147..8360c43bf 100644 --- a/src/net/java/sip/communicator/impl/neomedia/MediaUtils.java +++ b/src/net/java/sip/communicator/impl/neomedia/MediaUtils.java @@ -13,6 +13,7 @@ import javax.sdp.*; import net.java.sip.communicator.impl.neomedia.codec.*; +import net.java.sip.communicator.impl.neomedia.codec.video.h264.*; import net.java.sip.communicator.impl.neomedia.format.*; import net.java.sip.communicator.service.neomedia.*; import net.java.sip.communicator.service.neomedia.device.*; @@ -197,6 +198,22 @@ public class MediaUtils // packetization-mode=1 h264FormatParams.put(packetizationMode, "1"); + + if(NeomediaActivator.getConfigurationService().getString( + "net.java.sip.communicator.impl.neomedia.codec.video.h264." + + "defaultProfile", + JNIEncoder.MAIN_PROFILE).equals(JNIEncoder.MAIN_PROFILE)) + { + // indicates main profile, common features and HD capable level 3.1 + h264FormatParams.put("profile-level-id", "4DE01f"); + } + else + { + // indicates baseline profile, common features + // and HD capable level 3.1 + h264FormatParams.put("profile-level-id", "42E01f"); + } + addMediaFormats( MediaFormat.RTP_PAYLOAD_TYPE_UNKNOWN, "H264", diff --git a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java index d7a9310fe..e004aea3f 100644 --- a/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java +++ b/src/net/java/sip/communicator/service/protocol/media/MediaAwareCall.java @@ -153,6 +153,8 @@ protected void addCallPeer(T callPeer) { // if there's someone listening for audio level events then they'd // also like to know about the new peer. + // make sure always the fisrt element is the one to listen + // for local audio events if(getCallPeersVector().isEmpty()) { callPeer.getMediaHandler().setLocalUserAudioLevelListener( @@ -181,6 +183,8 @@ private void removeCallPeer(CallPeerChangeEvent evt) if (!getCallPeersVector().contains(callPeer)) return; + int elementPeerIx = getCallPeersVector().indexOf(callPeer); + getCallPeersVector().remove(callPeer); callPeer.removeCallPeerListener(this); @@ -188,6 +192,15 @@ private void removeCallPeer(CallPeerChangeEvent evt) { // remove sound level listeners from the peer callPeer.getMediaHandler().setLocalUserAudioLevelListener(null); + + // if there are more peers and the peer was the first, the one + // that listens for local levels, now lets make sure + // the new first will listen for local level events + if(!getCallPeersVector().isEmpty() && elementPeerIx == 0) + { + getCallPeersVector().firstElement().getMediaHandler() + .setLocalUserAudioLevelListener(localAudioLevelDelegator); + } } try