| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "remoting/host/capturer.h" | 5 #include "remoting/host/capturer.h" |
| 6 | 6 |
| 7 #include <ApplicationServices/ApplicationServices.h> | 7 #include <ApplicationServices/ApplicationServices.h> |
| 8 #include <dlfcn.h> | 8 #include <dlfcn.h> |
| 9 #include <IOKit/pwr_mgt/IOPMLib.h> | 9 #include <IOKit/pwr_mgt/IOPMLib.h> |
| 10 #include <OpenGL/CGLMacro.h> | 10 #include <OpenGL/CGLMacro.h> |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 | 151 |
| 152 // A class to perform capturing for mac. | 152 // A class to perform capturing for mac. |
| 153 class CapturerMac : public Capturer { | 153 class CapturerMac : public Capturer { |
| 154 public: | 154 public: |
| 155 CapturerMac(); | 155 CapturerMac(); |
| 156 virtual ~CapturerMac(); | 156 virtual ~CapturerMac(); |
| 157 | 157 |
| 158 bool Init(); | 158 bool Init(); |
| 159 | 159 |
| 160 // Capturer interface. | 160 // Capturer interface. |
| 161 virtual void Start() OVERRIDE; | 161 virtual void Start(const CursorShapeChangedCallback& callback) OVERRIDE; |
| 162 virtual void Stop() OVERRIDE; | 162 virtual void Stop() OVERRIDE; |
| 163 virtual void ScreenConfigurationChanged() OVERRIDE; | 163 virtual void ScreenConfigurationChanged() OVERRIDE; |
| 164 virtual media::VideoFrame::Format pixel_format() const OVERRIDE; | 164 virtual media::VideoFrame::Format pixel_format() const OVERRIDE; |
| 165 virtual void ClearInvalidRegion() OVERRIDE; | 165 virtual void ClearInvalidRegion() OVERRIDE; |
| 166 virtual void InvalidateRegion(const SkRegion& invalid_region) OVERRIDE; | 166 virtual void InvalidateRegion(const SkRegion& invalid_region) OVERRIDE; |
| 167 virtual void InvalidateScreen(const SkISize& size) OVERRIDE; | 167 virtual void InvalidateScreen(const SkISize& size) OVERRIDE; |
| 168 virtual void InvalidateFullScreen() OVERRIDE; | 168 virtual void InvalidateFullScreen() OVERRIDE; |
| 169 virtual void CaptureInvalidRegion( | 169 virtual void CaptureInvalidRegion( |
| 170 const CaptureCompletedCallback& callback) OVERRIDE; | 170 const CaptureCompletedCallback& callback) OVERRIDE; |
| 171 virtual const SkISize& size_most_recent() const OVERRIDE; | 171 virtual const SkISize& size_most_recent() const OVERRIDE; |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 295 cgl_context_ = NULL; | 295 cgl_context_ = NULL; |
| 296 } | 296 } |
| 297 // The buffers might be in use by the encoder, so don't delete them here. | 297 // The buffers might be in use by the encoder, so don't delete them here. |
| 298 // Instead, mark them as "needs update"; next time the buffers are used by | 298 // Instead, mark them as "needs update"; next time the buffers are used by |
| 299 // the capturer, they will be recreated if necessary. | 299 // the capturer, they will be recreated if necessary. |
| 300 for (int i = 0; i < kNumBuffers; ++i) { | 300 for (int i = 0; i < kNumBuffers; ++i) { |
| 301 buffers_[i].set_needs_update(); | 301 buffers_[i].set_needs_update(); |
| 302 } | 302 } |
| 303 } | 303 } |
| 304 | 304 |
| 305 void CapturerMac::Start() { | 305 void CapturerMac::Start( |
| 306 const CursorShapeChangedCallback& callback) { |
| 307 cursor_shape_changed_callback_ = callback; |
| 308 |
| 306 // Create a power management assertion that wakes the display and prevents it | 309 // Create a power management assertion that wakes the display and prevents it |
| 307 // from going to sleep on user idle. | 310 // from going to sleep on user idle. |
| 308 IOPMAssertionCreate(kIOPMAssertionTypeNoDisplaySleep, | 311 IOPMAssertionCreate(kIOPMAssertionTypeNoDisplaySleep, |
| 309 kIOPMAssertionLevelOn, | 312 kIOPMAssertionLevelOn, |
| 310 &power_assertion_id_); | 313 &power_assertion_id_); |
| 311 } | 314 } |
| 312 | 315 |
| 313 void CapturerMac::Stop() { | 316 void CapturerMac::Stop() { |
| 314 if (power_assertion_id_ != kIOPMNullAssertionID) { | 317 if (power_assertion_id_ != kIOPMNullAssertionID) { |
| 315 IOPMAssertionRelease(power_assertion_id_); | 318 IOPMAssertionRelease(power_assertion_id_); |
| 316 power_assertion_id_ = kIOPMNullAssertionID; | 319 power_assertion_id_ = kIOPMNullAssertionID; |
| 317 } | 320 } |
| 318 } | 321 } |
| 319 | 322 |
| 323 void CapturerMac::SetCursorShapeChangedCallback( |
| 324 const CursorShapeChangedCallback& callback) { |
| 325 // TODO(garykac) Implement cursor shape for Mac. (crbug.com/116299) |
| 326 } |
| 327 |
| 320 void CapturerMac::ScreenConfigurationChanged() { | 328 void CapturerMac::ScreenConfigurationChanged() { |
| 321 ReleaseBuffers(); | 329 ReleaseBuffers(); |
| 322 helper_.ClearInvalidRegion(); | 330 helper_.ClearInvalidRegion(); |
| 323 last_buffer_ = NULL; | 331 last_buffer_ = NULL; |
| 324 | 332 |
| 325 CGDirectDisplayID mainDevice = CGMainDisplayID(); | 333 CGDirectDisplayID mainDevice = CGMainDisplayID(); |
| 326 int width = CGDisplayPixelsWide(mainDevice); | 334 int width = CGDisplayPixelsWide(mainDevice); |
| 327 int height = CGDisplayPixelsHigh(mainDevice); | 335 int height = CGDisplayPixelsHigh(mainDevice); |
| 328 InvalidateScreen(SkISize::Make(width, height)); | 336 InvalidateScreen(SkISize::Make(width, height)); |
| 329 | 337 |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 656 Capturer* Capturer::Create() { | 664 Capturer* Capturer::Create() { |
| 657 CapturerMac* capturer = new CapturerMac(); | 665 CapturerMac* capturer = new CapturerMac(); |
| 658 if (!capturer->Init()) { | 666 if (!capturer->Init()) { |
| 659 delete capturer; | 667 delete capturer; |
| 660 capturer = NULL; | 668 capturer = NULL; |
| 661 } | 669 } |
| 662 return capturer; | 670 return capturer; |
| 663 } | 671 } |
| 664 | 672 |
| 665 } // namespace remoting | 673 } // namespace remoting |
| OLD | NEW |