From 822fead013a0f8eea4bd3d83ea04511950d5b0b6 Mon Sep 17 00:00:00 2001 From: Sebastien Vincent Date: Sat, 16 Jan 2010 10:32:47 +0000 Subject: [PATCH] - Enable again muting support for video DataSource; - Add getLocator() method to Push|PullDataSourceDelegate (otherwise MutePush|PullDataSource classes return null and we cannot check if locator is QT/Desktop streaming to disable local video); - Disable local video for desktop streaming. --- .../neomedia/device/ImageStreamingAuto.java | 2 +- .../device/VideoMediaDeviceSession.java | 19 ++++++++++--------- .../imgstreaming/ImageStreamingUtils.java | 2 +- .../PullBufferDataSourceDelegate.java | 13 +++++++++++++ .../PushBufferDataSourceDelegate.java | 13 +++++++++++++ 5 files changed, 38 insertions(+), 11 deletions(-) diff --git a/src/net/java/sip/communicator/impl/neomedia/device/ImageStreamingAuto.java b/src/net/java/sip/communicator/impl/neomedia/device/ImageStreamingAuto.java index 2d97a1a0d..2baaf8b3a 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/ImageStreamingAuto.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/ImageStreamingAuto.java @@ -27,7 +27,7 @@ public ImageStreamingAuto() throws Exception { String name = "Desktop streaming"; CaptureDeviceInfo devInfo = new CaptureDeviceInfo(name, - new MediaLocator(ImageStreamingUtils.LOCATOR_PREFIX + name), + new MediaLocator(ImageStreamingUtils.LOCATOR_PREFIX + ":" + name), DataSource.getFormats()); /* add to JMF device manager */ diff --git a/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java b/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java index 1f50400ae..715886679 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java @@ -12,6 +12,8 @@ import javax.media.protocol.*; import net.java.sip.communicator.impl.neomedia.*; +import net.java.sip.communicator.impl.neomedia.protocol.*; +import net.java.sip.communicator.impl.neomedia.imgstreaming.*; import net.java.sip.communicator.service.neomedia.*; import net.java.sip.communicator.service.neomedia.event.*; import net.java.sip.communicator.util.*; @@ -90,23 +92,22 @@ protected DataSource createCaptureDevice() * Create our DataSource as SourceCloneable so we can use it to both * display local video and stream to remote peer. */ - /* - * FIXME By overriding the super implementation, we have disabled muting - * support. - */ - DataSource captureDevice = getDevice().createOutputDataSource(); + DataSource captureDevice = super.createCaptureDevice(); if (captureDevice != null) { MediaLocator locator = captureDevice.getLocator(); - + /* * FIXME There is no video in calls when using the QuickTime/QTKit - * CaptureDevice so the local video support is disabled for it now. + * CaptureDevice and desktop streaming, so the local video support + * is disabled for them now. */ if ((locator == null) - || !QuickTimeAuto.LOCATOR_PROTOCOL - .equals(locator.getProtocol())) + || (!QuickTimeAuto.LOCATOR_PROTOCOL + .equals(locator.getProtocol()) && + !ImageStreamingUtils.LOCATOR_PREFIX + .equals(locator.getProtocol()))) { DataSource cloneableDataSource = Manager.createCloneableDataSource(captureDevice); diff --git a/src/net/java/sip/communicator/impl/neomedia/imgstreaming/ImageStreamingUtils.java b/src/net/java/sip/communicator/impl/neomedia/imgstreaming/ImageStreamingUtils.java index d97ce2530..ae180153e 100644 --- a/src/net/java/sip/communicator/impl/neomedia/imgstreaming/ImageStreamingUtils.java +++ b/src/net/java/sip/communicator/impl/neomedia/imgstreaming/ImageStreamingUtils.java @@ -19,7 +19,7 @@ public class ImageStreamingUtils /** * The locator prefix used when creating or parsing MediaLocators. */ - public static final String LOCATOR_PREFIX = "imgstreaming:"; + public static final String LOCATOR_PREFIX = "imgstreaming"; /** * Get a scaled BufferedImage. diff --git a/src/net/java/sip/communicator/impl/neomedia/protocol/PullBufferDataSourceDelegate.java b/src/net/java/sip/communicator/impl/neomedia/protocol/PullBufferDataSourceDelegate.java index 2de37a585..d3b2fd015 100644 --- a/src/net/java/sip/communicator/impl/neomedia/protocol/PullBufferDataSourceDelegate.java +++ b/src/net/java/sip/communicator/impl/neomedia/protocol/PullBufferDataSourceDelegate.java @@ -96,6 +96,19 @@ public String getContentType() return dataSource.getContentType(); } + /** + * Implements {@link DataSource#getLocator()}. Delegates to the wrapped + * DataSource. + * + * @return a MediaLocator value which describes the locator of the + * wrapped DataSource + */ + @Override + public MediaLocator getLocator() + { + return dataSource.getLocator(); + } + /** * Implements {@link DataSource#getControl(String)}. Delegates to the * wrapped DataSource. Overrides diff --git a/src/net/java/sip/communicator/impl/neomedia/protocol/PushBufferDataSourceDelegate.java b/src/net/java/sip/communicator/impl/neomedia/protocol/PushBufferDataSourceDelegate.java index 762d05ac6..707b4060e 100644 --- a/src/net/java/sip/communicator/impl/neomedia/protocol/PushBufferDataSourceDelegate.java +++ b/src/net/java/sip/communicator/impl/neomedia/protocol/PushBufferDataSourceDelegate.java @@ -96,6 +96,19 @@ public String getContentType() return dataSource.getContentType(); } + /** + * Implements {@link DataSource#getLocator()}. Delegates to the wrapped + * DataSource. + * + * @return a MediaLocator value which describes the locator of the + * wrapped DataSource + */ + @Override + public MediaLocator getLocator() + { + return dataSource.getLocator(); + } + /** * Implements {@link DataSource#getControl(String)}. Delegates to the * wrapped DataSource. Overrides