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

Unified Diff: media/video/capture/screen/screen_capturer_helper.cc

Issue 13983010: Use webrtc::DesktopCapturer for screen capturer implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: q 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 side-by-side diff with in-line comments
Download patch
Index: media/video/capture/screen/screen_capturer_helper.cc
diff --git a/media/video/capture/screen/screen_capturer_helper.cc b/media/video/capture/screen/screen_capturer_helper.cc
index 2f4534260c9cb0190481a9a3115988b4f6dce087..3753693afc5aac6fbc89737f6b3a8489b031197a 100644
--- a/media/video/capture/screen/screen_capturer_helper.cc
+++ b/media/video/capture/screen/screen_capturer_helper.cc
@@ -12,7 +12,6 @@
namespace media {
ScreenCapturerHelper::ScreenCapturerHelper() :
- size_most_recent_(SkISize::Make(0, 0)),
log_grid_size_(0) {
}
@@ -25,33 +24,55 @@ void ScreenCapturerHelper::ClearInvalidRegion() {
}
void ScreenCapturerHelper::InvalidateRegion(
- const SkRegion& invalid_region) {
+ const webrtc::DesktopRegion& invalid_region) {
base::AutoLock auto_invalid_region_lock(invalid_region_lock_);
- invalid_region_.op(invalid_region, SkRegion::kUnion_Op);
+ for (webrtc::DesktopRegion::Iterator it(invalid_region);
+ !it.IsAtEnd(); it.Advance()) {
+ invalid_region_.op(SkIRect::MakeLTRB(it.rect().left(), it.rect().top(),
alexeypa (please no reviews) 2013/04/26 21:33:58 nit: Add a TODO to replace SkRegion with webrtc::D
Sergey Ulanov 2013/05/07 22:25:50 I don't think we need TODO for it - it's something
+ it.rect().top(), it.rect().bottom()),
+ SkRegion::kUnion_Op);
+ }
}
-void ScreenCapturerHelper::InvalidateScreen(const SkISize& size) {
+void ScreenCapturerHelper::InvalidateScreen(const webrtc::DesktopSize& size) {
base::AutoLock auto_invalid_region_lock(invalid_region_lock_);
invalid_region_.op(SkIRect::MakeWH(size.width(), size.height()),
SkRegion::kUnion_Op);
}
void ScreenCapturerHelper::InvalidateFullScreen() {
- if (!size_most_recent_.isZero())
+ if (!size_most_recent_.is_empty())
InvalidateScreen(size_most_recent_);
}
-void ScreenCapturerHelper::SwapInvalidRegion(SkRegion* invalid_region) {
+void ScreenCapturerHelper::SwapInvalidRegion(
Wez 2013/04/26 18:48:14 nit: IIRC this is a Swap simply to avoid unnecessa
Sergey Ulanov 2013/05/07 22:25:50 The X11 capturer seems to rely on Swap() - it call
Sergey Ulanov 2013/05/08 01:26:49 Actually it looks like Swap wasn't necessary for X
+ webrtc::DesktopRegion* invalid_region) {
+ SkRegion sk_invalid_region;
+ for (webrtc::DesktopRegion::Iterator it(*invalid_region);
+ !it.IsAtEnd(); it.Advance()) {
+ sk_invalid_region.op(SkIRect::MakeLTRB(it.rect().left(), it.rect().top(),
+ it.rect().top(), it.rect().bottom()),
+ SkRegion::kUnion_Op);
+ }
+
{
base::AutoLock auto_invalid_region_lock(invalid_region_lock_);
- invalid_region->swap(invalid_region_);
+ sk_invalid_region.swap(invalid_region_);
}
+
if (log_grid_size_ > 0) {
scoped_ptr<SkRegion> expanded_region(
- ExpandToGrid(*invalid_region, log_grid_size_));
- invalid_region->swap(*expanded_region);
- invalid_region->op(SkRegion(SkIRect::MakeSize(size_most_recent_)),
- SkRegion::kIntersect_Op);
+ ExpandToGrid(sk_invalid_region, log_grid_size_));
+ sk_invalid_region.swap(*expanded_region);
+ sk_invalid_region.op(SkIRect::MakeWH(size_most_recent_.width(),
+ size_most_recent_.height()),
+ SkRegion::kIntersect_Op);
+ }
+ invalid_region->Clear();
+ for (SkRegion::Iterator it(sk_invalid_region); !it.done(); it.next()) {
+ invalid_region->AddRect(webrtc::DesktopRect::MakeLTRB(
+ it.rect().left(), it.rect().top(),
+ it.rect().right(), it.rect().bottom()));
}
}
@@ -59,11 +80,12 @@ void ScreenCapturerHelper::SetLogGridSize(int log_grid_size) {
log_grid_size_ = log_grid_size;
}
-const SkISize& ScreenCapturerHelper::size_most_recent() const {
+const webrtc::DesktopSize& ScreenCapturerHelper::size_most_recent() const {
return size_most_recent_;
}
-void ScreenCapturerHelper::set_size_most_recent(const SkISize& size) {
+void ScreenCapturerHelper::set_size_most_recent(
+ const webrtc::DesktopSize& size) {
size_most_recent_ = size;
}
@@ -85,34 +107,19 @@ scoped_ptr<SkRegion> ScreenCapturerHelper::ExpandToGrid(
DCHECK(log_grid_size >= 1);
int grid_size = 1 << log_grid_size;
int grid_size_mask = ~(grid_size - 1);
- // Count the rects in the region.
- int rectNum = 0;
- SkRegion::Iterator iter(region);
- while (!iter.done()) {
- iter.next();
- ++rectNum;
- }
+
// Expand each rect.
- scoped_ptr<SkIRect[]> rects(new SkIRect[rectNum]);
- iter.rewind();
- int rectI = 0;
- while (!iter.done()) {
+ scoped_ptr<SkRegion> expanded_region(new SkRegion());
+ for (SkRegion::Iterator iter(region); !iter.done(); iter.next()) {
SkIRect rect = iter.rect();
- iter.next();
- int left = std::min(rect.left(), rect.right());
- int right = std::max(rect.left(), rect.right());
- int top = std::min(rect.top(), rect.bottom());
- int bottom = std::max(rect.top(), rect.bottom());
- left = DownToMultiple(left, grid_size_mask);
- right = UpToMultiple(right, grid_size, grid_size_mask);
- top = DownToMultiple(top, grid_size_mask);
- bottom = UpToMultiple(bottom, grid_size, grid_size_mask);
- rects[rectI++] = SkIRect::MakeLTRB(left, top, right, bottom);
+ int left = DownToMultiple(rect.left(), grid_size_mask);
+ int right = UpToMultiple(rect.right(), grid_size, grid_size_mask);
+ int top = DownToMultiple(rect.top(), grid_size_mask);
+ int bottom = UpToMultiple(rect.bottom(), grid_size, grid_size_mask);
+ expanded_region->op(SkIRect::MakeLTRB(left, right, top, bottom),
alexeypa (please no reviews) 2013/04/26 21:33:58 nit: SkRegion::setRects() is potentially more opti
Sergey Ulanov 2013/05/07 22:25:50 It doesn't at the moment and I suspect the differe
+ SkRegion::kUnion_Op);
}
- // Make the union of the expanded rects.
- scoped_ptr<SkRegion> regionNew(new SkRegion());
- regionNew->setRects(rects.get(), rectNum);
- return regionNew.Pass();
+ return expanded_region.Pass();
}
} // namespace media

Powered by Google App Engine
This is Rietveld 408576698