Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(215)

Side by Side Diff: media/video/capture/screen/screen_capturer_mac.mm

Issue 14305004: Simplify ScreenCapturer interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "media/video/capture/screen/screen_capturer.h" 5 #include "media/video/capture/screen/screen_capturer.h"
6 6
7 #include <ApplicationServices/ApplicationServices.h> 7 #include <ApplicationServices/ApplicationServices.h>
8 #include <Cocoa/Cocoa.h> 8 #include <Cocoa/Cocoa.h>
9 #include <dlfcn.h> 9 #include <dlfcn.h>
10 #include <IOKit/pwr_mgt/IOPMLib.h> 10 #include <IOKit/pwr_mgt/IOPMLib.h>
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 // A class to perform video frame capturing for mac. 113 // A class to perform video frame capturing for mac.
114 class ScreenCapturerMac : public ScreenCapturer { 114 class ScreenCapturerMac : public ScreenCapturer {
115 public: 115 public:
116 ScreenCapturerMac(); 116 ScreenCapturerMac();
117 virtual ~ScreenCapturerMac(); 117 virtual ~ScreenCapturerMac();
118 118
119 bool Init(); 119 bool Init();
120 120
121 // Overridden from ScreenCapturer: 121 // Overridden from ScreenCapturer:
122 virtual void Start(Delegate* delegate) OVERRIDE; 122 virtual void Start(Delegate* delegate) OVERRIDE;
123 virtual void Stop() OVERRIDE;
124 virtual void InvalidateRegion(const SkRegion& invalid_region) OVERRIDE;
125 virtual void CaptureFrame() OVERRIDE; 123 virtual void CaptureFrame() OVERRIDE;
126 124
127 private: 125 private:
128 void CaptureCursor(); 126 void CaptureCursor();
129 127
130 void GlBlitFast(const ScreenCaptureFrame& buffer, const SkRegion& region); 128 void GlBlitFast(const ScreenCaptureFrame& buffer, const SkRegion& region);
131 void GlBlitSlow(const ScreenCaptureFrame& buffer); 129 void GlBlitSlow(const ScreenCaptureFrame& buffer);
132 void CgBlitPreLion(const ScreenCaptureFrame& buffer, const SkRegion& region); 130 void CgBlitPreLion(const ScreenCaptureFrame& buffer, const SkRegion& region);
133 void CgBlitPostLion(const ScreenCaptureFrame& buffer, const SkRegion& region); 131 void CgBlitPostLion(const ScreenCaptureFrame& buffer, const SkRegion& region);
134 132
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 power_assertion_id_display_(kIOPMNullAssertionID), 226 power_assertion_id_display_(kIOPMNullAssertionID),
229 power_assertion_id_user_(kIOPMNullAssertionID), 227 power_assertion_id_user_(kIOPMNullAssertionID),
230 cg_display_base_address_(NULL), 228 cg_display_base_address_(NULL),
231 cg_display_bytes_per_row_(NULL), 229 cg_display_bytes_per_row_(NULL),
232 cg_display_bits_per_pixel_(NULL), 230 cg_display_bits_per_pixel_(NULL),
233 cgl_set_full_screen_(NULL) 231 cgl_set_full_screen_(NULL)
234 { 232 {
235 } 233 }
236 234
237 ScreenCapturerMac::~ScreenCapturerMac() { 235 ScreenCapturerMac::~ScreenCapturerMac() {
236 if (power_assertion_id_display_ != kIOPMNullAssertionID) {
237 IOPMAssertionRelease(power_assertion_id_display_);
238 power_assertion_id_display_ = kIOPMNullAssertionID;
239 }
240 if (power_assertion_id_user_ != kIOPMNullAssertionID) {
241 IOPMAssertionRelease(power_assertion_id_user_);
242 power_assertion_id_user_ = kIOPMNullAssertionID;
243 }
244
238 ReleaseBuffers(); 245 ReleaseBuffers();
239 UnregisterRefreshAndMoveHandlers(); 246 UnregisterRefreshAndMoveHandlers();
240 CGError err = CGDisplayRemoveReconfigurationCallback( 247 CGError err = CGDisplayRemoveReconfigurationCallback(
241 ScreenCapturerMac::DisplaysReconfiguredCallback, this); 248 ScreenCapturerMac::DisplaysReconfiguredCallback, this);
242 if (err != kCGErrorSuccess) { 249 if (err != kCGErrorSuccess) {
243 LOG(ERROR) << "CGDisplayRemoveReconfigurationCallback " << err; 250 LOG(ERROR) << "CGDisplayRemoveReconfigurationCallback " << err;
244 } 251 }
245 } 252 }
246 253
247 bool ScreenCapturerMac::Init() { 254 bool ScreenCapturerMac::Init() {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 CFSTR("Chrome Remote Desktop connection active"), 293 CFSTR("Chrome Remote Desktop connection active"),
287 &power_assertion_id_display_); 294 &power_assertion_id_display_);
288 // This assertion ensures that the display is woken up if it already asleep 295 // This assertion ensures that the display is woken up if it already asleep
289 // (as used by Apple Remote Desktop). 296 // (as used by Apple Remote Desktop).
290 IOPMAssertionCreateWithName(CFSTR("UserIsActive"), 297 IOPMAssertionCreateWithName(CFSTR("UserIsActive"),
291 kIOPMAssertionLevelOn, 298 kIOPMAssertionLevelOn,
292 CFSTR("Chrome Remote Desktop connection active"), 299 CFSTR("Chrome Remote Desktop connection active"),
293 &power_assertion_id_user_); 300 &power_assertion_id_user_);
294 } 301 }
295 302
296 void ScreenCapturerMac::Stop() {
297 if (power_assertion_id_display_ != kIOPMNullAssertionID) {
298 IOPMAssertionRelease(power_assertion_id_display_);
299 power_assertion_id_display_ = kIOPMNullAssertionID;
300 }
301 if (power_assertion_id_user_ != kIOPMNullAssertionID) {
302 IOPMAssertionRelease(power_assertion_id_user_);
303 power_assertion_id_user_ = kIOPMNullAssertionID;
304 }
305 }
306
307 void ScreenCapturerMac::InvalidateRegion(const SkRegion& invalid_region) {
308 helper_.InvalidateRegion(invalid_region);
309 }
310
311 void ScreenCapturerMac::CaptureFrame() { 303 void ScreenCapturerMac::CaptureFrame() {
312 // Only allow captures when the display configuration is not occurring. 304 // Only allow captures when the display configuration is not occurring.
313 scoped_refptr<ScreenCaptureData> data; 305 scoped_refptr<ScreenCaptureData> data;
314 306
315 base::Time capture_start_time = base::Time::Now(); 307 base::Time capture_start_time = base::Time::Now();
316 308
317 // Wait until the display configuration is stable. If one or more displays 309 // Wait until the display configuration is stable. If one or more displays
318 // are reconfiguring then |display_configuration_capture_event_| will not be 310 // are reconfiguring then |display_configuration_capture_event_| will not be
319 // set until the reconfiguration completes. 311 // set until the reconfiguration completes.
320 // TODO(wez): Replace this with an early-exit (See crbug.com/104542). 312 // TODO(wez): Replace this with an early-exit (See crbug.com/104542).
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 sk_rect = ScaleSkRect(sk_rect, desktop_config_.dip_to_pixel_scale); 780 sk_rect = ScaleSkRect(sk_rect, desktop_config_.dip_to_pixel_scale);
789 sk_rect.round(&skirect_array[i]); 781 sk_rect.round(&skirect_array[i]);
790 782
791 // Translate from local desktop to capturer framebuffer coordinates. 783 // Translate from local desktop to capturer framebuffer coordinates.
792 skirect_array[i].offset(-desktop_config_.pixel_bounds.left(), 784 skirect_array[i].offset(-desktop_config_.pixel_bounds.left(),
793 -desktop_config_.pixel_bounds.top()); 785 -desktop_config_.pixel_bounds.top());
794 } 786 }
795 787
796 SkRegion region; 788 SkRegion region;
797 region.setRects(skirect_array, count); 789 region.setRects(skirect_array, count);
798 InvalidateRegion(region); 790 helper_.InvalidateRegion(region);
799 } 791 }
800 792
801 void ScreenCapturerMac::ScreenUpdateMove(CGScreenUpdateMoveDelta delta, 793 void ScreenCapturerMac::ScreenUpdateMove(CGScreenUpdateMoveDelta delta,
802 size_t count, 794 size_t count,
803 const CGRect* rect_array) { 795 const CGRect* rect_array) {
804 // Translate |rect_array| to identify the move's destination. 796 // Translate |rect_array| to identify the move's destination.
805 CGRect refresh_rects[count]; 797 CGRect refresh_rects[count];
806 for (CGRectCount i = 0; i < count; ++i) { 798 for (CGRectCount i = 0; i < count; ++i) {
807 refresh_rects[i] = CGRectOffset(rect_array[i], delta.dX, delta.dY); 799 refresh_rects[i] = CGRectOffset(rect_array[i], delta.dX, delta.dY);
808 } 800 }
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 877
886 // static 878 // static
887 scoped_ptr<ScreenCapturer> ScreenCapturer::Create() { 879 scoped_ptr<ScreenCapturer> ScreenCapturer::Create() {
888 scoped_ptr<ScreenCapturerMac> capturer(new ScreenCapturerMac()); 880 scoped_ptr<ScreenCapturerMac> capturer(new ScreenCapturerMac());
889 if (!capturer->Init()) 881 if (!capturer->Init())
890 capturer.reset(); 882 capturer.reset();
891 return capturer.PassAs<ScreenCapturer>(); 883 return capturer.PassAs<ScreenCapturer>();
892 } 884 }
893 885
894 } // namespace media 886 } // namespace media
OLDNEW
« no previous file with comments | « media/video/capture/screen/screen_capturer_fake.cc ('k') | media/video/capture/screen/screen_capturer_mac_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698