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

Side by Side Diff: remoting/codec/video_decoder_verbatim.cc

Issue 23440046: Remove dependency on Skia from chromoting client. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 2 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
« no previous file with comments | « remoting/codec/video_decoder_verbatim.h ('k') | remoting/codec/video_decoder_vp8.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "remoting/codec/video_decoder_verbatim.h" 5 #include "remoting/codec/video_decoder_verbatim.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "remoting/base/util.h" 8 #include "remoting/base/util.h"
9 9
10 namespace remoting { 10 namespace remoting {
11 11
12 VideoDecoderVerbatim::VideoDecoderVerbatim() 12 VideoDecoderVerbatim::VideoDecoderVerbatim() {}
13 : screen_size_(SkISize::Make(0, 0)) {}
14 13
15 VideoDecoderVerbatim::~VideoDecoderVerbatim() {} 14 VideoDecoderVerbatim::~VideoDecoderVerbatim() {}
16 15
17 void VideoDecoderVerbatim::Initialize(const SkISize& screen_size) { 16 void VideoDecoderVerbatim::Initialize(const webrtc::DesktopSize& screen_size) {
18 updated_region_.setEmpty(); 17 updated_region_.Clear();
19 screen_buffer_.reset(); 18 screen_buffer_.reset();
20 19
21 screen_size_ = screen_size; 20 screen_size_ = screen_size;
22 // Allocate the screen buffer, if necessary. 21 // Allocate the screen buffer, if necessary.
23 if (!screen_size_.isEmpty()) { 22 if (!screen_size_.is_empty()) {
24 screen_buffer_.reset( 23 screen_buffer_.reset(
25 new uint8[screen_size_.width() * screen_size_.height() * 24 new uint8[screen_size_.width() * screen_size_.height() *
26 kBytesPerPixel]); 25 kBytesPerPixel]);
27 } 26 }
28 } 27 }
29 28
30 bool VideoDecoderVerbatim::DecodePacket(const VideoPacket& packet) { 29 bool VideoDecoderVerbatim::DecodePacket(const VideoPacket& packet) {
31 SkRegion region; 30 webrtc::DesktopRegion region;
32 31
33 const char* in = packet.data().data(); 32 const char* in = packet.data().data();
34 int stride = kBytesPerPixel * screen_size_.width(); 33 int stride = kBytesPerPixel * screen_size_.width();
35 for (int i = 0; i < packet.dirty_rects_size(); ++i) { 34 for (int i = 0; i < packet.dirty_rects_size(); ++i) {
36 Rect proto_rect = packet.dirty_rects(i); 35 Rect proto_rect = packet.dirty_rects(i);
37 SkIRect rect = SkIRect::MakeXYWH(proto_rect.x(), 36 webrtc::DesktopRect rect =
38 proto_rect.y(), 37 webrtc::DesktopRect::MakeXYWH(proto_rect.x(),
39 proto_rect.width(), 38 proto_rect.y(),
40 proto_rect.height()); 39 proto_rect.width(),
41 region.op(rect, SkRegion::kUnion_Op); 40 proto_rect.height());
41 region.AddRect(rect);
42 42
43 if (!SkIRect::MakeSize(screen_size_).contains(rect)) { 43 if (!DoesRectContain(webrtc::DesktopRect::MakeSize(screen_size_), rect)) {
44 LOG(ERROR) << "Invalid packet received"; 44 LOG(ERROR) << "Invalid packet received";
45 return false; 45 return false;
46 } 46 }
47 47
48 int rect_row_size = kBytesPerPixel * rect.width(); 48 int rect_row_size = kBytesPerPixel * rect.width();
49 uint8_t* out = screen_buffer_.get() + rect.y() * stride + 49 uint8_t* out = screen_buffer_.get() + rect.top() * stride +
50 rect.x() * kBytesPerPixel; 50 rect.left() * kBytesPerPixel;
51 for (int y = rect.y(); y < rect.y() + rect.height(); ++y) { 51 for (int y = rect.top(); y < rect.top() + rect.height(); ++y) {
52 if (in + rect_row_size > packet.data().data() + packet.data().size()) { 52 if (in + rect_row_size > packet.data().data() + packet.data().size()) {
53 LOG(ERROR) << "Invalid packet received"; 53 LOG(ERROR) << "Invalid packet received";
54 return false; 54 return false;
55 } 55 }
56 memcpy(out, in, rect_row_size); 56 memcpy(out, in, rect_row_size);
57 in += rect_row_size; 57 in += rect_row_size;
58 out += stride; 58 out += stride;
59 } 59 }
60 } 60 }
61 61
62 if (in != packet.data().data() + packet.data().size()) { 62 if (in != packet.data().data() + packet.data().size()) {
63 LOG(ERROR) << "Invalid packet received"; 63 LOG(ERROR) << "Invalid packet received";
64 return false; 64 return false;
65 } 65 }
66 66
67 updated_region_.op(region, SkRegion::kUnion_Op); 67 updated_region_.AddRegion(region);
68 68
69 return true; 69 return true;
70 } 70 }
71 71
72 void VideoDecoderVerbatim::Invalidate(const SkISize& view_size, 72 void VideoDecoderVerbatim::Invalidate(const webrtc::DesktopSize& view_size,
73 const SkRegion& region) { 73 const webrtc::DesktopRegion& region) {
74 updated_region_.op(region, SkRegion::kUnion_Op); 74 updated_region_.AddRegion(region);
75 } 75 }
76 76
77 void VideoDecoderVerbatim::RenderFrame(const SkISize& view_size, 77 void VideoDecoderVerbatim::RenderFrame(const webrtc::DesktopSize& view_size,
78 const SkIRect& clip_area, 78 const webrtc::DesktopRect& clip_area,
79 uint8* image_buffer, 79 uint8* image_buffer,
80 int image_stride, 80 int image_stride,
81 SkRegion* output_region) { 81 webrtc::DesktopRegion* output_region) {
82 output_region->setEmpty(); 82 output_region->Clear();
83 83
84 // TODO(alexeypa): scaling is not implemented. 84 // TODO(alexeypa): scaling is not implemented.
85 SkIRect clip_rect = SkIRect::MakeSize(screen_size_); 85 webrtc::DesktopRect clip_rect = webrtc::DesktopRect::MakeSize(screen_size_);
86 if (!clip_rect.intersect(clip_area)) 86 clip_rect.IntersectWith(clip_area);
87 if (clip_rect.is_empty())
87 return; 88 return;
88 89
89 int screen_stride = screen_size_.width() * kBytesPerPixel; 90 int screen_stride = screen_size_.width() * kBytesPerPixel;
90 91
91 for (SkRegion::Iterator i(updated_region_); !i.done(); i.next()) { 92 for (webrtc::DesktopRegion::Iterator i(updated_region_);
92 SkIRect rect(i.rect()); 93 !i.IsAtEnd(); i.Advance()) {
93 if (!rect.intersect(clip_rect)) 94 webrtc::DesktopRect rect(i.rect());
95 rect.IntersectWith(clip_rect);
96 if (rect.is_empty())
94 continue; 97 continue;
95 98
96 CopyRGB32Rect(screen_buffer_.get(), screen_stride, 99 CopyRGB32Rect(screen_buffer_.get(), screen_stride,
97 clip_rect, 100 clip_rect,
98 image_buffer, image_stride, 101 image_buffer, image_stride,
99 clip_area, 102 clip_area,
100 rect); 103 rect);
101 output_region->op(rect, SkRegion::kUnion_Op); 104 output_region->AddRect(rect);
102 } 105 }
103 106
104 updated_region_.setEmpty(); 107 updated_region_.Clear();
105 } 108 }
106 109
107 const SkRegion* VideoDecoderVerbatim::GetImageShape() { 110 const webrtc::DesktopRegion* VideoDecoderVerbatim::GetImageShape() {
108 return NULL; 111 return NULL;
109 } 112 }
110 113
111 } // namespace remoting 114 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/codec/video_decoder_verbatim.h ('k') | remoting/codec/video_decoder_vp8.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698