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

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

Issue 13983010: Use webrtc::DesktopCapturer for screen capturer implementation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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_fake.cc
diff --git a/media/video/capture/screen/screen_capturer_fake.cc b/media/video/capture/screen/screen_capturer_fake.cc
index ff4dedbd4eabde183f66855d7b1eda3616b5801b..416bcbb2bf6bf76ea1afa59523b52e21ede83df2 100644
--- a/media/video/capture/screen/screen_capturer_fake.cc
+++ b/media/video/capture/screen/screen_capturer_fake.cc
@@ -4,8 +4,9 @@
#include "media/video/capture/screen/screen_capturer_fake.h"
+#include "base/logging.h"
#include "base/time.h"
-#include "media/video/capture/screen/screen_capture_data.h"
+#include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
namespace media {
@@ -24,66 +25,73 @@ COMPILE_ASSERT((kBoxWidth % kSpeed == 0) && (kWidth % kSpeed == 0) &&
sizes_must_be_multiple_of_kSpeed);
ScreenCapturerFake::ScreenCapturerFake()
- : size_(SkISize::Make(0, 0)),
+ : callback_(NULL),
+ mouse_shape_observer_(NULL),
bytes_per_row_(0),
box_pos_x_(0),
box_pos_y_(0),
box_speed_x_(kSpeed),
- box_speed_y_(kSpeed),
- current_buffer_(0) {
+ box_speed_y_(kSpeed) {
ScreenConfigurationChanged();
}
ScreenCapturerFake::~ScreenCapturerFake() {
}
-void ScreenCapturerFake::Start(Delegate* delegate) {
- delegate_ = delegate;
+void ScreenCapturerFake::Start(Callback* callback) {
+ DCHECK(!callback_);
+ DCHECK(callback);
+ callback_ = callback;
+}
+
+void ScreenCapturerFake::Capture(const webrtc::DesktopRegion& region) {
+ base::Time capture_start_time = base::Time::Now();
- // Create memory for the buffers.
- int buffer_size = size_.height() * bytes_per_row_;
- for (int i = 0; i < kNumBuffers; i++) {
- shared_buffers_[i] = delegate_->CreateSharedBuffer(buffer_size);
- if (shared_buffers_[i]) {
- buffers_[i] = reinterpret_cast<uint8*>(shared_buffers_[i]->ptr());
+ queue_.MoveToNextFrame();
+
+ if (!queue_.current_frame()) {
+ int buffer_size = size_.height() * bytes_per_row_;
+ webrtc::SharedMemory* shared_memory =
+ callback_->CreateSharedMemory(buffer_size);
+ scoped_ptr<webrtc::DesktopFrame> frame;
+ webrtc::DesktopSize frame_size(size_.width(), size_.height());
+ if (shared_memory) {
+ frame.reset(new webrtc::SharedMemoryDesktopFrame(
+ frame_size, bytes_per_row_, shared_memory));
} else {
- private_buffers_[i].reset(new uint8[buffer_size]);
- buffers_[i] = private_buffers_[i].get();
+ frame.reset(new webrtc::BasicDesktopFrame(frame_size));
}
+ queue_.ReplaceCurrentFrame(frame.Pass());
}
-}
-
-void ScreenCapturerFake::CaptureFrame() {
- base::Time capture_start_time = base::Time::Now();
+ DCHECK(queue_.current_frame());
GenerateImage();
- helper_.InvalidateScreen(size_);
-
- SkRegion invalid_region;
- helper_.SwapInvalidRegion(&invalid_region);
- current_buffer_ = (current_buffer_ + 1) % kNumBuffers;
-
- scoped_refptr<ScreenCaptureData> capture_data(new ScreenCaptureData(
- buffers_[current_buffer_], bytes_per_row_, size_));
- capture_data->mutable_dirty_region() = invalid_region;
-
- helper_.set_size_most_recent(size_);
+ queue_.current_frame()->mutable_updated_region()->SetRect(
+ webrtc::DesktopRect::MakeSize(size_));
+ queue_.current_frame()->set_capture_time_ms(
+ (base::Time::Now() - capture_start_time).InMillisecondsRoundedUp());
- capture_data->set_shared_buffer(shared_buffers_[current_buffer_]);
+ callback_->OnCaptureCompleted(queue_.current_frame()->Share());
+}
- capture_data->set_capture_time_ms(
- (base::Time::Now() - capture_start_time).InMillisecondsRoundedUp());
- delegate_->OnCaptureCompleted(capture_data);
+void ScreenCapturerFake::SetMouseShapeObserver(
+ MouseShapeObserver* mouse_shape_observer) {
+ DCHECK(!mouse_shape_observer_);
+ DCHECK(mouse_shape_observer);
+ mouse_shape_observer_ = mouse_shape_observer;
}
void ScreenCapturerFake::GenerateImage() {
- memset(buffers_[current_buffer_], 0xff,
- size_.width() * size_.height() * ScreenCaptureData::kBytesPerPixel);
+ webrtc::DesktopFrame* frame = queue_.current_frame();
+
+ const int kBytesPerPixel = webrtc::DesktopFrame::kBytesPerPixel;
+
+ memset(frame->data(), 0xff,
+ size_.width() * size_.height() * kBytesPerPixel);
- uint8* row = buffers_[current_buffer_] +
- (box_pos_y_ * size_.width() + box_pos_x_) *
- ScreenCaptureData::kBytesPerPixel;
+ uint8* row = frame->data() +
+ (box_pos_y_ * size_.width() + box_pos_x_) * kBytesPerPixel;
box_pos_x_ += box_speed_x_;
if (box_pos_x_ + kBoxWidth >= size_.width() || box_pos_x_ == 0)
@@ -102,18 +110,19 @@ void ScreenCapturerFake::GenerateImage() {
int r = x * 255 / kBoxWidth;
int g = y * 255 / kBoxHeight;
int b = 255 - (x * 255 / kBoxWidth);
- row[x * ScreenCaptureData::kBytesPerPixel] = r;
- row[x * ScreenCaptureData::kBytesPerPixel + 1] = g;
- row[x * ScreenCaptureData::kBytesPerPixel + 2] = b;
- row[x * ScreenCaptureData::kBytesPerPixel + 3] = 0xff;
+ row[x * kBytesPerPixel] = r;
+ row[x * kBytesPerPixel + 1] = g;
+ row[x * kBytesPerPixel + 2] = b;
+ row[x * kBytesPerPixel + 3] = 0xff;
}
row += bytes_per_row_;
}
}
void ScreenCapturerFake::ScreenConfigurationChanged() {
- size_ = SkISize::Make(kWidth, kHeight);
- bytes_per_row_ = size_.width() * ScreenCaptureData::kBytesPerPixel;
+ size_.set(kWidth, kHeight);
+ queue_.Reset();
+ bytes_per_row_ = size_.width() * webrtc::DesktopFrame::kBytesPerPixel;
}
} // namespace media
« no previous file with comments | « media/video/capture/screen/screen_capturer_fake.h ('k') | media/video/capture/screen/screen_capturer_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698