| Index: remoting/host/capturer_mac.cc
|
| diff --git a/remoting/host/capturer_mac.cc b/remoting/host/capturer_mac.cc
|
| index d13a5f56e11c65d2f4af9ea0ae06dfcbcd331c9d..6eb446de04134446faa57a06ed89970e5c84e5ca 100644
|
| --- a/remoting/host/capturer_mac.cc
|
| +++ b/remoting/host/capturer_mac.cc
|
| @@ -2,15 +2,81 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "base/logging.h"
|
| -#include "remoting/host/capturer_mac.h"
|
| +#include "remoting/host/capturer.h"
|
| +
|
| +#include <ApplicationServices/ApplicationServices.h>
|
| +#include <OpenGL/CGLMacro.h>
|
| +#include <OpenGL/OpenGL.h>
|
|
|
| #include <stddef.h>
|
|
|
| -#include <OpenGL/CGLMacro.h>
|
| +#include "base/logging.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "remoting/host/capturer_helper.h"
|
|
|
| namespace remoting {
|
|
|
| +namespace {
|
| +// A class to perform capturing for mac.
|
| +class CapturerMac : public Capturer {
|
| + public:
|
| + CapturerMac();
|
| + virtual ~CapturerMac();
|
| +
|
| + // Capturer interface.
|
| + virtual void ScreenConfigurationChanged() OVERRIDE;
|
| + virtual media::VideoFrame::Format pixel_format() const OVERRIDE;
|
| + virtual void ClearInvalidRects() OVERRIDE;
|
| + virtual void InvalidateRects(const InvalidRects& inval_rects) OVERRIDE;
|
| + virtual void InvalidateScreen(const gfx::Size& size) OVERRIDE;
|
| + virtual void InvalidateFullScreen() OVERRIDE;
|
| + virtual void CaptureInvalidRects(CaptureCompletedCallback* callback) OVERRIDE;
|
| + virtual const gfx::Size& size_most_recent() const OVERRIDE;
|
| +
|
| + private:
|
| + void CaptureRects(const InvalidRects& rects,
|
| + CaptureCompletedCallback* callback);
|
| +
|
| + void ScreenRefresh(CGRectCount count, const CGRect *rect_array);
|
| + void ScreenUpdateMove(CGScreenUpdateMoveDelta delta,
|
| + size_t count,
|
| + const CGRect *rect_array);
|
| + static void ScreenRefreshCallback(CGRectCount count,
|
| + const CGRect *rect_array,
|
| + void *user_parameter);
|
| + static void ScreenUpdateMoveCallback(CGScreenUpdateMoveDelta delta,
|
| + size_t count,
|
| + const CGRect *rect_array,
|
| + void *user_parameter);
|
| + static void DisplaysReconfiguredCallback(CGDirectDisplayID display,
|
| + CGDisplayChangeSummaryFlags flags,
|
| + void *user_parameter);
|
| +
|
| + void ReleaseBuffers();
|
| + CGLContextObj cgl_context_;
|
| + static const int kNumBuffers = 2;
|
| + scoped_array<uint8> buffers_[kNumBuffers];
|
| + scoped_array<uint8> flip_buffer_;
|
| +
|
| + // A thread-safe list of invalid rectangles, and the size of the most
|
| + // recently captured screen.
|
| + CapturerHelper helper_;
|
| +
|
| + // Screen size.
|
| + int width_;
|
| + int height_;
|
| +
|
| + int bytes_per_row_;
|
| +
|
| + // The current buffer with valid data for reading.
|
| + int current_buffer_;
|
| +
|
| + // Format of pixels returned in buffer.
|
| + media::VideoFrame::Format pixel_format_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(CapturerMac);
|
| +};
|
| +
|
| CapturerMac::CapturerMac()
|
| : cgl_context_(NULL),
|
| width_(0),
|
| @@ -195,6 +261,8 @@ void CapturerMac::DisplaysReconfiguredCallback(
|
| }
|
| }
|
|
|
| +} // namespace
|
| +
|
| // static
|
| Capturer* Capturer::Create() {
|
| return new CapturerMac();
|
|
|