OLD | NEW |
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 <deque> | 5 #include <deque> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 | 7 |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
11 #include "media/base/video_frame.h" | 11 #include "media/base/video_frame.h" |
12 #include "remoting/codec/codec_test.h" | 12 #include "remoting/codec/codec_test.h" |
13 #include "remoting/codec/video_decoder.h" | 13 #include "remoting/codec/video_decoder.h" |
14 #include "remoting/codec/video_encoder.h" | 14 #include "remoting/codec/video_encoder.h" |
15 #include "remoting/base/util.h" | 15 #include "remoting/base/util.h" |
16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
17 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" | 17 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
18 | 18 |
19 using webrtc::DesktopRect; | 19 using webrtc::DesktopRect; |
| 20 using webrtc::DesktopRegion; |
20 using webrtc::DesktopSize; | 21 using webrtc::DesktopSize; |
21 | 22 |
22 namespace { | 23 namespace { |
23 | 24 |
24 const int kBytesPerPixel = 4; | 25 const int kBytesPerPixel = 4; |
25 | 26 |
26 // Some sample rects for testing. | 27 // Some sample rects for testing. |
27 std::vector<std::vector<DesktopRect> > MakeTestRectLists(DesktopSize size) { | 28 std::vector<std::vector<DesktopRect> > MakeTestRectLists(DesktopSize size) { |
28 std::vector<std::vector<DesktopRect> > rect_lists; | 29 std::vector<std::vector<DesktopRect> > rect_lists; |
29 std::vector<DesktopRect> rects; | 30 std::vector<DesktopRect> rects; |
(...skipping 19 matching lines...) Expand all Loading... |
49 | 50 |
50 namespace remoting { | 51 namespace remoting { |
51 | 52 |
52 // A class to test the message output of the encoder. | 53 // A class to test the message output of the encoder. |
53 class VideoEncoderMessageTester { | 54 class VideoEncoderMessageTester { |
54 public: | 55 public: |
55 VideoEncoderMessageTester() | 56 VideoEncoderMessageTester() |
56 : begin_rect_(0), | 57 : begin_rect_(0), |
57 rect_data_(0), | 58 rect_data_(0), |
58 end_rect_(0), | 59 end_rect_(0), |
59 added_rects_(0), | |
60 state_(kWaitingForBeginRect), | 60 state_(kWaitingForBeginRect), |
61 strict_(false) { | 61 strict_(false) { |
62 } | 62 } |
63 | 63 |
64 ~VideoEncoderMessageTester() { | 64 ~VideoEncoderMessageTester() { |
65 EXPECT_EQ(begin_rect_, end_rect_); | 65 EXPECT_EQ(begin_rect_, end_rect_); |
66 EXPECT_GT(begin_rect_, 0); | 66 EXPECT_GT(begin_rect_, 0); |
67 EXPECT_EQ(kWaitingForBeginRect, state_); | 67 EXPECT_EQ(kWaitingForBeginRect, state_); |
68 if (strict_) { | 68 if (strict_) { |
69 EXPECT_EQ(added_rects_, begin_rect_); | 69 EXPECT_TRUE(region_.Equals(received_region_)); |
70 } | 70 } |
71 } | 71 } |
72 | 72 |
73 // Test that we received the correct packet. | 73 // Test that we received the correct packet. |
74 void ReceivedPacket(VideoPacket* packet) { | 74 void ReceivedPacket(VideoPacket* packet) { |
75 if (state_ == kWaitingForBeginRect) { | 75 if (state_ == kWaitingForBeginRect) { |
76 EXPECT_TRUE((packet->flags() & VideoPacket::FIRST_PACKET) != 0); | 76 EXPECT_TRUE((packet->flags() & VideoPacket::FIRST_PACKET) != 0); |
77 state_ = kWaitingForRectData; | 77 state_ = kWaitingForRectData; |
78 ++begin_rect_; | 78 ++begin_rect_; |
79 | 79 |
80 if (strict_) { | 80 if (strict_) { |
81 DesktopRect rect = rects_.front(); | 81 received_region_.AddRect(webrtc::DesktopRect::MakeXYWH( |
82 rects_.pop_front(); | 82 packet->format().x(), packet->format().y(), |
83 EXPECT_EQ(rect.left(), packet->format().x()); | 83 packet->format().width(), packet->format().height())); |
84 EXPECT_EQ(rect.top(), packet->format().y()); | |
85 EXPECT_EQ(rect.width(), packet->format().width()); | |
86 EXPECT_EQ(rect.height(), packet->format().height()); | |
87 } | 84 } |
88 } else { | 85 } else { |
89 EXPECT_FALSE((packet->flags() & VideoPacket::FIRST_PACKET) != 0); | 86 EXPECT_FALSE((packet->flags() & VideoPacket::FIRST_PACKET) != 0); |
90 } | 87 } |
91 | 88 |
92 if (state_ == kWaitingForRectData) { | 89 if (state_ == kWaitingForRectData) { |
93 if (packet->has_data()) { | 90 if (packet->has_data()) { |
94 ++rect_data_; | 91 ++rect_data_; |
95 } | 92 } |
96 | 93 |
(...skipping 10 matching lines...) Expand all Loading... |
107 EXPECT_TRUE((packet->flags() & VideoPacket::LAST_PACKET) != 0); | 104 EXPECT_TRUE((packet->flags() & VideoPacket::LAST_PACKET) != 0); |
108 } | 105 } |
109 } | 106 } |
110 } | 107 } |
111 | 108 |
112 void set_strict(bool strict) { | 109 void set_strict(bool strict) { |
113 strict_ = strict; | 110 strict_ = strict; |
114 } | 111 } |
115 | 112 |
116 void AddRects(const DesktopRect* rects, int count) { | 113 void AddRects(const DesktopRect* rects, int count) { |
117 rects_.insert(rects_.begin() + rects_.size(), rects, rects + count); | 114 region_.AddRects(rects, count); |
118 added_rects_ += count; | |
119 } | 115 } |
120 | 116 |
121 private: | 117 private: |
122 enum State { | 118 enum State { |
123 kWaitingForBeginRect, | 119 kWaitingForBeginRect, |
124 kWaitingForRectData, | 120 kWaitingForRectData, |
125 }; | 121 }; |
126 | 122 |
127 int begin_rect_; | 123 int begin_rect_; |
128 int rect_data_; | 124 int rect_data_; |
129 int end_rect_; | 125 int end_rect_; |
130 int added_rects_; | |
131 State state_; | 126 State state_; |
132 bool strict_; | 127 bool strict_; |
133 | 128 |
134 std::deque<DesktopRect> rects_; | 129 DesktopRegion region_; |
| 130 DesktopRegion received_region_; |
135 | 131 |
136 DISALLOW_COPY_AND_ASSIGN(VideoEncoderMessageTester); | 132 DISALLOW_COPY_AND_ASSIGN(VideoEncoderMessageTester); |
137 }; | 133 }; |
138 | 134 |
139 class VideoDecoderTester { | 135 class VideoDecoderTester { |
140 public: | 136 public: |
141 VideoDecoderTester(VideoDecoder* decoder, | 137 VideoDecoderTester(VideoDecoder* decoder, |
142 const DesktopSize& screen_size, | 138 const DesktopSize& screen_size, |
143 const DesktopSize& view_size) | 139 const DesktopSize& view_size) |
144 : screen_size_(screen_size), | 140 : screen_size_(screen_size), |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 decoder_tester.ResetRenderedData(); | 486 decoder_tester.ResetRenderedData(); |
491 decoder->Invalidate( | 487 decoder->Invalidate( |
492 SkISize::Make(view_size.width(), view_size.height()), | 488 SkISize::Make(view_size.width(), view_size.height()), |
493 SkRegion(SkIRect::MakeWH(view_size.width(), view_size.height()))); | 489 SkRegion(SkIRect::MakeWH(view_size.width(), view_size.height()))); |
494 decoder_tester.RenderFrame(); | 490 decoder_tester.RenderFrame(); |
495 decoder_tester.VerifyResultsApprox(expected_result->data(), | 491 decoder_tester.VerifyResultsApprox(expected_result->data(), |
496 max_error_limit, mean_error_limit); | 492 max_error_limit, mean_error_limit); |
497 } | 493 } |
498 | 494 |
499 } // namespace remoting | 495 } // namespace remoting |
OLD | NEW |