From 7cc03d7b2e56d1c3d12b4ba742cf341aa5685671 Mon Sep 17 00:00:00 2001 From: Boris Grozev <boris@jitsi.org> Date: Thu, 8 Aug 2013 18:32:09 +0300 Subject: [PATCH] Allows to freely change the direction of a MediaStream without a device, by assuming a default device direction of SENDRECV. --- .../jitsi/impl/neomedia/MediaStreamImpl.java | 33 ++++++++++++------- .../neomedia/device/MediaDeviceSession.java | 7 +++- 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/src/org/jitsi/impl/neomedia/MediaStreamImpl.java b/src/org/jitsi/impl/neomedia/MediaStreamImpl.java index f3b7223c..a9c8ded7 100644 --- a/src/org/jitsi/impl/neomedia/MediaStreamImpl.java +++ b/src/org/jitsi/impl/neomedia/MediaStreamImpl.java @@ -641,7 +641,10 @@ private void createSendStreams() { StreamRTPManager rtpManager = getRTPManager(); MediaDeviceSession deviceSession = getDeviceSession(); - DataSource dataSource = deviceSession.getOutputDataSource(); + DataSource dataSource + = deviceSession == null + ? null + : deviceSession.getOutputDataSource(); int streamCount; if (dataSource instanceof PushBufferDataSource) @@ -974,15 +977,17 @@ private void doSetTarget(MediaStreamTarget target) */ public AbstractMediaDevice getDevice() { - return getDeviceSession().getDevice(); + MediaDeviceSession deviceSession = getDeviceSession(); + + return (deviceSession == null) ? null : deviceSession.getDevice(); } /** - * Gets the <tt>MediaDirection</tt> of the <tt>device</tt> of this instance - * if any or {@link MediaDirection#INACTIVE}. + * Gets the <tt>MediaDirection</tt> of the <tt>device</tt> of this instance. + * In case there is no device, {@link MediaDirection#SENDRECV} is assumed. * * @return the <tt>MediaDirection</tt> of the <tt>device</tt> of this - * instance if any or <tt>MediaDirection.INACTIVE</tt> + * instance if any or <tt>MediaDirection.SENDRECV</tt> */ private MediaDirection getDeviceDirection() { @@ -990,7 +995,7 @@ private MediaDirection getDeviceDirection() return (deviceSession == null) - ? MediaDirection.INACTIVE + ? MediaDirection.SENDRECV : deviceSession.getDevice().getDirection(); } @@ -1897,6 +1902,8 @@ private void start(MediaDirection direction) */ boolean getRTPManagerForRTPTranslator = true; + MediaDeviceSession deviceSession = getDeviceSession(); + if (direction.allowsSending() && ((startedDirection == null) || !startedDirection.allowsSending())) @@ -1909,7 +1916,8 @@ private void start(MediaDirection direction) startSendStreams(); - getDeviceSession().start(MediaDirection.SENDONLY); + if (deviceSession != null) + deviceSession.start(MediaDirection.SENDONLY); if (MediaDirection.RECVONLY.equals(startedDirection)) startedDirection = MediaDirection.SENDRECV; @@ -1950,7 +1958,8 @@ else if (startedDirection == null) startReceiveStreams(); - getDeviceSession().start(MediaDirection.RECVONLY); + if (deviceSession != null) + deviceSession.start(MediaDirection.RECVONLY); if (MediaDirection.SENDONLY.equals(startedDirection)) startedDirection = MediaDirection.SENDRECV; @@ -2542,11 +2551,13 @@ public void update(RemoteEvent remoteEvent) if ((feedback != null) && (getDirection() != MediaDirection.INACTIVE)) { - Set<PacketLossAwareEncoder> plaes - = deviceSession.getEncoderControls( + Set<PacketLossAwareEncoder> plaes = null; + MediaDeviceSession deviceSession= getDeviceSession(); + if (deviceSession != null) + plaes = deviceSession.getEncoderControls( PacketLossAwareEncoder.class); - if (!plaes.isEmpty()) + if (plaes != null && !plaes.isEmpty()) { int expectedPacketLoss = (feedback.getFractionLost() * 100) / 256; diff --git a/src/org/jitsi/impl/neomedia/device/MediaDeviceSession.java b/src/org/jitsi/impl/neomedia/device/MediaDeviceSession.java index 8edf7c74..d24f1f9b 100644 --- a/src/org/jitsi/impl/neomedia/device/MediaDeviceSession.java +++ b/src/org/jitsi/impl/neomedia/device/MediaDeviceSession.java @@ -1389,7 +1389,12 @@ else if (ev instanceof RealizeCompleteEvent) FormatParametersAwareCodec.class, processor)) { - fpac.setFormatParameters(format.getFormatParameters()); + Map<String, String> formatParameters + = format == null + ? null + : format.getFormatParameters(); + if (formatParameters != null) + fpac.setFormatParameters(formatParameters); } } } -- GitLab