| Index: trunk/src/remoting/codec/video_encoder_vp8.cc
|
| ===================================================================
|
| --- trunk/src/remoting/codec/video_encoder_vp8.cc (revision 224204)
|
| +++ trunk/src/remoting/codec/video_encoder_vp8.cc (working copy)
|
| @@ -12,7 +12,6 @@
|
| #include "remoting/proto/video.pb.h"
|
| #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
|
| #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h"
|
| -#include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
|
|
|
| extern "C" {
|
| #define VPX_CODEC_DISABLE_COMPAT 1
|
| @@ -146,31 +145,30 @@
|
| }
|
|
|
| void VideoEncoderVp8::PrepareImage(const webrtc::DesktopFrame& frame,
|
| - webrtc::DesktopRegion* updated_region) {
|
| + SkRegion* updated_region) {
|
| if (frame.updated_region().is_empty()) {
|
| - updated_region->Clear();
|
| + updated_region->setEmpty();
|
| return;
|
| }
|
|
|
| // Align the region to macroblocks, to avoid encoding artefacts.
|
| // This also ensures that all rectangles have even-aligned top-left, which
|
| // is required for ConvertRGBToYUVWithRect() to work.
|
| - std::vector<webrtc::DesktopRect> aligned_rects;
|
| + std::vector<SkIRect> aligned_rects;
|
| for (webrtc::DesktopRegion::Iterator r(frame.updated_region());
|
| !r.IsAtEnd(); r.Advance()) {
|
| const webrtc::DesktopRect& rect = r.rect();
|
| - aligned_rects.push_back(AlignRect(webrtc::DesktopRect::MakeLTRB(
|
| - rect.left(), rect.top(), rect.right(), rect.bottom())));
|
| + aligned_rects.push_back(AlignRect(
|
| + SkIRect::MakeLTRB(rect.left(), rect.top(), rect.right(), rect.bottom())));
|
| }
|
| DCHECK(!aligned_rects.empty());
|
| - updated_region->Clear();
|
| - updated_region->AddRects(&aligned_rects[0], aligned_rects.size());
|
| + updated_region->setRects(&aligned_rects[0], aligned_rects.size());
|
|
|
| // Clip back to the screen dimensions, in case they're not macroblock aligned.
|
| // The conversion routines don't require even width & height, so this is safe
|
| // even if the source dimensions are not even.
|
| - updated_region->IntersectWith(
|
| - webrtc::DesktopRect::MakeWH(image_->w, image_->h));
|
| + updated_region->op(SkIRect::MakeWH(image_->w, image_->h),
|
| + SkRegion::kIntersect_Op);
|
|
|
| // Convert the updated region to YUV ready for encoding.
|
| const uint8* rgb_data = frame.data();
|
| @@ -181,25 +179,22 @@
|
| uint8* y_data = image_->planes[0];
|
| uint8* u_data = image_->planes[1];
|
| uint8* v_data = image_->planes[2];
|
| - for (webrtc::DesktopRegion::Iterator r(*updated_region); !r.IsAtEnd();
|
| - r.Advance()) {
|
| - const webrtc::DesktopRect& rect = r.rect();
|
| + for (SkRegion::Iterator r(*updated_region); !r.done(); r.next()) {
|
| + const SkIRect& rect = r.rect();
|
| ConvertRGB32ToYUVWithRect(
|
| rgb_data, y_data, u_data, v_data,
|
| - rect.left(), rect.top(), rect.width(), rect.height(),
|
| + rect.x(), rect.y(), rect.width(), rect.height(),
|
| rgb_stride, y_stride, uv_stride);
|
| }
|
| }
|
|
|
| -void VideoEncoderVp8::PrepareActiveMap(
|
| - const webrtc::DesktopRegion& updated_region) {
|
| +void VideoEncoderVp8::PrepareActiveMap(const SkRegion& updated_region) {
|
| // Clear active map first.
|
| memset(active_map_.get(), 0, active_map_width_ * active_map_height_);
|
|
|
| // Mark updated areas active.
|
| - for (webrtc::DesktopRegion::Iterator r(updated_region); !r.IsAtEnd();
|
| - r.Advance()) {
|
| - const webrtc::DesktopRect& rect = r.rect();
|
| + for (SkRegion::Iterator r(updated_region); !r.done(); r.next()) {
|
| + const SkIRect& rect = r.rect();
|
| int left = rect.left() / kMacroBlockSize;
|
| int right = (rect.right() - 1) / kMacroBlockSize;
|
| int top = rect.top() / kMacroBlockSize;
|
| @@ -232,7 +227,7 @@
|
| }
|
|
|
| // Convert the updated capture data ready for encode.
|
| - webrtc::DesktopRegion updated_region;
|
| + SkRegion updated_region;
|
| PrepareImage(frame, &updated_region);
|
|
|
| // Update active map based on updated region.
|
| @@ -268,8 +263,8 @@
|
| scoped_ptr<VideoPacket> packet(new VideoPacket());
|
|
|
| while (!got_data) {
|
| - const vpx_codec_cx_pkt_t* vpx_packet =
|
| - vpx_codec_get_cx_data(codec_.get(), &iter);
|
| + const vpx_codec_cx_pkt_t* vpx_packet = vpx_codec_get_cx_data(codec_.get(),
|
| + &iter);
|
| if (!vpx_packet)
|
| continue;
|
|
|
| @@ -295,11 +290,10 @@
|
| packet->mutable_format()->set_x_dpi(frame.dpi().x());
|
| packet->mutable_format()->set_y_dpi(frame.dpi().y());
|
| }
|
| - for (webrtc::DesktopRegion::Iterator r(updated_region); !r.IsAtEnd();
|
| - r.Advance()) {
|
| + for (SkRegion::Iterator r(updated_region); !r.done(); r.next()) {
|
| Rect* rect = packet->add_dirty_rects();
|
| - rect->set_x(r.rect().left());
|
| - rect->set_y(r.rect().top());
|
| + rect->set_x(r.rect().x());
|
| + rect->set_y(r.rect().y());
|
| rect->set_width(r.rect().width());
|
| rect->set_height(r.rect().height());
|
| }
|
|
|