From 657fe8e68f59dd33b474f62403e11feae37fcf4b Mon Sep 17 00:00:00 2001 From: Lyubomir Marinov Date: Mon, 21 Feb 2011 10:10:48 +0000 Subject: [PATCH] Delivers VideoEvent.VIDEO_REMOVED for the local visual component of desktop streaming/sharing. Reported by Yana Stamcheva. --- .../gui/main/call/OneToOneCallPeerPanel.java | 5 ++-- .../impl/neomedia/VideoMediaStreamImpl.java | 7 +++-- .../device/VideoMediaDeviceSession.java | 27 +++++++++++++++++-- .../service/neomedia/VideoMediaStream.java | 7 +++-- .../AbstractOperationSetVideoTelephony.java | 2 +- .../protocol/media/CallPeerMediaHandler.java | 19 +++++++------ 6 files changed, 49 insertions(+), 18 deletions(-) diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java index a5d58bca8..e7b8e7f42 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java @@ -731,12 +731,11 @@ private void handleVideoEvent(final VideoEvent event) { if (event != null && logger.isTraceEnabled()) logger.trace("UI video event received originated in: " - + event.getOrigin() + " and of type: " + event.getType()); + + event.getOrigin() + " and is of type: " + event.getType()); synchronized (videoContainers) { - if ((event != null) - && !event.isConsumed()) + if ((event != null) && !event.isConsumed()) { Component video = event.getVisualComponent(); diff --git a/src/net/java/sip/communicator/impl/neomedia/VideoMediaStreamImpl.java b/src/net/java/sip/communicator/impl/neomedia/VideoMediaStreamImpl.java index c885b4e4d..a3eb47b77 100644 --- a/src/net/java/sip/communicator/impl/neomedia/VideoMediaStreamImpl.java +++ b/src/net/java/sip/communicator/impl/neomedia/VideoMediaStreamImpl.java @@ -416,14 +416,17 @@ public void videoUpdate(VideoEvent e) /** * Disposes of the visual Component of the local peer. + * + * @param component the visual Component of the local peer to + * dispose of */ - public void disposeLocalVisualComponent() + public void disposeLocalVisualComponent(Component component) { MediaDeviceSession deviceSession = getDeviceSession(); if(deviceSession instanceof VideoMediaDeviceSession) ((VideoMediaDeviceSession) deviceSession) - .disposeLocalVisualComponent(); + .disposeLocalVisualComponent(component); } /** 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 bf4c8f9ec..3b0f8a22f 100644 --- a/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java +++ b/src/net/java/sip/communicator/impl/neomedia/device/VideoMediaDeviceSession.java @@ -594,16 +594,39 @@ public void paint(Graphics g) canvas.setMaximumSize(iconSize); canvas.setPreferredSize(iconSize); - fireVideoEvent(VideoEvent.LOCAL, canvas, VideoEvent.LOCAL); + /* + * Set a clue so that we can recognize it if it gets received as an + * argument to #disposeLocalVisualComponent(). + */ + canvas.setName(DESKTOP_STREAMING_ICON); + + fireVideoEvent(VideoEvent.VIDEO_ADDED, canvas, VideoEvent.LOCAL); } return canvas; } /** * Disposes the local visual Component of the local peer. + * + * @param component the local visual Component of the local peer to + * dispose of */ - public void disposeLocalVisualComponent() + public void disposeLocalVisualComponent(Component component) { + /* + * Desktop streaming does not use a Player but a Canvas with its name + * equals to the value of DESKTOP_STREAMING_ICON. + */ + if ((component != null) + && DESKTOP_STREAMING_ICON.equals(component.getName())) + { + fireVideoEvent( + VideoEvent.VIDEO_REMOVED, + component, + VideoEvent.LOCAL); + return; + } + Player localPlayer = this.localPlayer; if (localPlayer != null) diff --git a/src/net/java/sip/communicator/service/neomedia/VideoMediaStream.java b/src/net/java/sip/communicator/service/neomedia/VideoMediaStream.java index b76ec1c79..3e6a320e4 100644 --- a/src/net/java/sip/communicator/service/neomedia/VideoMediaStream.java +++ b/src/net/java/sip/communicator/service/neomedia/VideoMediaStream.java @@ -28,9 +28,12 @@ public interface VideoMediaStream public Component createLocalVisualComponent(); /** - * Dispose local visual Component of the local peer. + * Disposes of a specific local visual Component of the local peer. + * + * @param component the local visual Component of the local peer to + * dispose of */ - public void disposeLocalVisualComponent(); + public void disposeLocalVisualComponent(Component component); /** * Returns a reference to the visual Component where video from the diff --git a/src/net/java/sip/communicator/service/protocol/media/AbstractOperationSetVideoTelephony.java b/src/net/java/sip/communicator/service/protocol/media/AbstractOperationSetVideoTelephony.java index 5a9fc9072..69f51e2e4 100644 --- a/src/net/java/sip/communicator/service/protocol/media/AbstractOperationSetVideoTelephony.java +++ b/src/net/java/sip/communicator/service/protocol/media/AbstractOperationSetVideoTelephony.java @@ -118,7 +118,7 @@ public Component createLocalVisualComponent( @SuppressWarnings("unchecked") // work with MediaAware* in media package public void disposeLocalVisualComponent(CallPeer peer, Component component) { - ((W)peer).getMediaHandler().disposeLocalVisualComponent(); + ((W)peer).getMediaHandler().disposeLocalVisualComponent(component); } /** diff --git a/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java b/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java index 3d0550dd5..3c15ffa1f 100644 --- a/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java +++ b/src/net/java/sip/communicator/service/protocol/media/CallPeerMediaHandler.java @@ -979,19 +979,22 @@ public void fireVideoEvent(VideoEvent event) */ public Component createLocalVisualComponent() { - return (videoStream == null || !isLocalVideoTransmissionEnabled()) - ? null : videoStream.createLocalVisualComponent(); + return + ((videoStream == null) || !isLocalVideoTransmissionEnabled()) + ? null + : videoStream.createLocalVisualComponent(); } /** - * Dispose local visual Component of the local peer. + * Disposes of a specific local visual Component of the local peer. + * + * @param component the local visual Component of the local peer to + * dispose of */ - public void disposeLocalVisualComponent() + public void disposeLocalVisualComponent(Component component) { - if(videoStream != null) - { - videoStream.disposeLocalVisualComponent(); - } + if (videoStream != null) + videoStream.disposeLocalVisualComponent(component); } /**