From cd6a51e1e651b9ca994697fb1b3be6b25a5899ce Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Mon, 2 Nov 2009 15:35:53 +0000 Subject: [PATCH] In neomedia, introduces AudioMediaStream#isMute(). Support for firing events on changes to the mute property of AudioMediaStream is not implemented and is to be added. --- .../impl/neomedia/AudioMediaStreamImpl.java | 14 ++++++++++++ .../device/AudioCaptureMediaDevice.java | 19 +++++++++++++++- .../neomedia/device/CaptureMediaDevice.java | 22 ++++++++++++++++++- .../service/neomedia/AudioMediaStream.java | 10 +++++++++ 4 files changed, 63 insertions(+), 2 deletions(-) diff --git a/src/net/java/sip/communicator/impl/neomedia/AudioMediaStreamImpl.java b/src/net/java/sip/communicator/impl/neomedia/AudioMediaStreamImpl.java index c74e72195..d66af6ed9 100644 --- a/src/net/java/sip/communicator/impl/neomedia/AudioMediaStreamImpl.java +++ b/src/net/java/sip/communicator/impl/neomedia/AudioMediaStreamImpl.java @@ -122,6 +122,20 @@ public void addSoundLevelListener(SoundLevelListener listener) // TODO Auto-generated method stub } + /** + * Determines whether this AudioMediaStream is set to transmit + * silence instead of the audio being fed from its MediaDevice. + * + * @return true if this AudioMediaStream is set to + * transmit silence instead of the audio fed from its MediaDevice; + * false, otherwise + * @see AudioMediaStream#isMute() + */ + public boolean isMute() + { + return ((AudioCaptureMediaDevice) getDevice()).isMute(); + } + /** * Registers {@link #CUSTOM_CODEC_FORMATS} with a specific * RTPManager. diff --git a/src/net/java/sip/communicator/impl/neomedia/device/AudioCaptureMediaDevice.java b/src/net/java/sip/communicator/impl/neomedia/device/AudioCaptureMediaDevice.java index 23bc15ba3..334a16224 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/AudioCaptureMediaDevice.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/AudioCaptureMediaDevice.java @@ -48,6 +48,23 @@ public AudioCaptureMediaDevice(CaptureDeviceInfo captureDeviceInfo) super(captureDeviceInfo, MediaType.AUDIO); } + /** + * Determines whether this MediaDevice will provide silence instead + * of actual captured data next time it is read. + * + * @return true if this MediaDevice will provide silence + * instead of actual captured data next time it is read; false, + * otherwise + */ + public boolean isMute() + { + CaptureDevice captureDevice = getCaptureDevice(false); + + if (captureDevice instanceof MutePushBufferDataSource) + return ((MutePushBufferDataSource) captureDevice).isMute(); + return false; + } + /** * Sets the JMF CaptureDevice this instance wraps and provides a * MediaDevice implementation for. Tries to enable muting. @@ -69,7 +86,7 @@ protected void setCaptureDevice(CaptureDevice captureDevice) /** * Sets the indicator which determines whether this MediaDevice - * will start providing silence instead of actual capture data next time it + * will start providing silence instead of actual captured data next time it * is read. * * @param mute true to have this MediaDevice start diff --git a/src/net/java/sip/communicator/impl/neomedia/device/CaptureMediaDevice.java b/src/net/java/sip/communicator/impl/neomedia/device/CaptureMediaDevice.java index 7f26ed41c..97704d842 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/CaptureMediaDevice.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/CaptureMediaDevice.java @@ -150,7 +150,27 @@ DataSource createOutputDataSource() */ public CaptureDevice getCaptureDevice() { - if (captureDevice == null) + return getCaptureDevice(true); + } + + /** + * Gets the JMF CaptureDevice this instance wraps and provides an + * implementation of MediaDevice for and, optionally, creates it if + * it does not exist yet. + * + * @param create true to create the CaptureDevice this + * instance provides an implementation of MediaDevice for it it + * does not exist yet; false to not create it and return + * null if it does not exist yet + * @return the JMF CaptureDevice this instance wraps and provides + * an implementation of MediaDevice for if it exists or + * create is true and its creation succeeds; null + * if it does not exist yet and create is false or its + * creation fails + */ + protected CaptureDevice getCaptureDevice(boolean create) + { + if ((captureDevice == null) && create) { CaptureDevice captureDevice = null; Throwable exception = null; diff --git a/src/net/java/sip/communicator/service/neomedia/AudioMediaStream.java b/src/net/java/sip/communicator/service/neomedia/AudioMediaStream.java index 0293d3604..e3081e1e4 100644 --- a/src/net/java/sip/communicator/service/neomedia/AudioMediaStream.java +++ b/src/net/java/sip/communicator/service/neomedia/AudioMediaStream.java @@ -82,4 +82,14 @@ public interface AudioMediaStream * MediaDevice again. */ public void setMute(boolean mute); + + /** + * Determines whether this AudioMediaStream is set to transmit + * silence instead of the audio being fed from its MediaDevice. + * + * @return true if this AudioMediaStream is set to + * transmit silence instead of the audio fed from its MediaDevice; + * false, otherwise + */ + public boolean isMute(); }