| Index: remoting/host/desktop_session_agent.h
|
| diff --git a/remoting/host/desktop_session_agent.h b/remoting/host/desktop_session_agent.h
|
| index a99352098bbc1722f54211877210e5773d6e53cb..91320ab4e21a0082c719460a579c3614f1132d15 100644
|
| --- a/remoting/host/desktop_session_agent.h
|
| +++ b/remoting/host/desktop_session_agent.h
|
| @@ -5,7 +5,7 @@
|
| #ifndef REMOTING_HOST_DESKTOP_SESSION_AGENT_H_
|
| #define REMOTING_HOST_DESKTOP_SESSION_AGENT_H_
|
|
|
| -#include <list>
|
| +#include <map>
|
|
|
| #include "base/basictypes.h"
|
| #include "base/callback.h"
|
| @@ -16,11 +16,9 @@
|
| #include "ipc/ipc_listener.h"
|
| #include "ipc/ipc_platform_file.h"
|
| #include "media/video/capture/screen/screen_capturer.h"
|
| -#include "media/video/capture/screen/shared_buffer.h"
|
| #include "remoting/host/client_session_control.h"
|
| #include "remoting/protocol/clipboard_stub.h"
|
| -#include "third_party/skia/include/core/SkRect.h"
|
| -#include "third_party/skia/include/core/SkSize.h"
|
| +#include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
|
|
|
| namespace IPC {
|
| class ChannelProxy;
|
| @@ -48,7 +46,8 @@ class InputEventTracker;
|
| class DesktopSessionAgent
|
| : public base::RefCountedThreadSafe<DesktopSessionAgent>,
|
| public IPC::Listener,
|
| - public media::ScreenCapturer::Delegate,
|
| + public webrtc::DesktopCapturer::Callback,
|
| + public media::ScreenCapturer::MouseShapeObserver,
|
| public ClientSessionControl {
|
| public:
|
| class Delegate {
|
| @@ -75,13 +74,11 @@ class DesktopSessionAgent
|
| virtual void OnChannelConnected(int32 peer_pid) OVERRIDE;
|
| virtual void OnChannelError() OVERRIDE;
|
|
|
| - // media::ScreenCapturer::Delegate implementation.
|
| - virtual scoped_refptr<media::SharedBuffer> CreateSharedBuffer(
|
| - uint32 size) OVERRIDE;
|
| - virtual void ReleaseSharedBuffer(
|
| - scoped_refptr<media::SharedBuffer> buffer) OVERRIDE;
|
| - virtual void OnCaptureCompleted(
|
| - scoped_refptr<media::ScreenCaptureData> capture_data) OVERRIDE;
|
| + // webrtc::DesktopCapturer::Callback implementation.
|
| + virtual webrtc::SharedMemory* CreateSharedMemory(size_t size) OVERRIDE;
|
| + virtual void OnCaptureCompleted(webrtc::DesktopFrame* frame) OVERRIDE;
|
| +
|
| + // media::ScreenCapturer::MouseShapeObserver implementation.
|
| virtual void OnCursorShapeChanged(
|
| scoped_ptr<media::MouseCursorShape> cursor_shape) OVERRIDE;
|
|
|
| @@ -102,14 +99,14 @@ class DesktopSessionAgent
|
| void Stop();
|
|
|
| protected:
|
| + friend class base::RefCountedThreadSafe<DesktopSessionAgent>;
|
| +
|
| DesktopSessionAgent(
|
| scoped_refptr<AutoThreadTaskRunner> audio_capture_task_runner,
|
| scoped_refptr<AutoThreadTaskRunner> caller_task_runner,
|
| scoped_refptr<AutoThreadTaskRunner> input_task_runner,
|
| scoped_refptr<AutoThreadTaskRunner> io_task_runner,
|
| scoped_refptr<AutoThreadTaskRunner> video_capture_task_runner);
|
| -
|
| - friend class base::RefCountedThreadSafe<DesktopSessionAgent>;
|
| virtual ~DesktopSessionAgent();
|
|
|
| // ClientSessionControl interface.
|
| @@ -186,6 +183,12 @@ class DesktopSessionAgent
|
| }
|
|
|
| private:
|
| + class SharedBuffer;
|
| + friend class SharedBuffer;
|
| +
|
| + // Called by SharedBuffer when it's destroyed.
|
| + void OnSharedBufferDeleted(int id);
|
| +
|
| // Closes |desktop_pipe_| if it is open.
|
| void CloseDesktopPipeHandle();
|
|
|
| @@ -237,14 +240,13 @@ class DesktopSessionAgent
|
| IPC::PlatformFileForTransit desktop_pipe_;
|
|
|
| // Size of the most recent captured video frame.
|
| - SkISize current_size_;
|
| + webrtc::DesktopSize current_size_;
|
|
|
| // Next shared buffer ID to be used.
|
| int next_shared_buffer_id_;
|
|
|
| - // List of the shared buffers.
|
| - typedef std::list<scoped_refptr<media::SharedBuffer> > SharedBuffers;
|
| - SharedBuffers shared_buffers_;
|
| + // The number of currently allocated shared buffers.
|
| + int shared_buffers_;
|
|
|
| // True if the desktop session agent has been started.
|
| bool started_;
|
| @@ -252,6 +254,10 @@ class DesktopSessionAgent
|
| // Captures the screen.
|
| scoped_ptr<media::ScreenCapturer> video_capturer_;
|
|
|
| + // Keep reference to the last frame sent to make sure shared buffer is alive
|
| + // before it's received.
|
| + scoped_ptr<webrtc::DesktopFrame> last_frame_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(DesktopSessionAgent);
|
| };
|
|
|
|
|