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

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

Issue 1864213002: Convert //remoting to use std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Mac IWYU Created 4 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 unified diff | Download patch
« no previous file with comments | « remoting/codec/audio_encoder_verbatim.cc ('k') | remoting/codec/scoped_vpx_codec.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/codec_test.h"
6
5 #include <stddef.h> 7 #include <stddef.h>
6 #include <stdint.h> 8 #include <stdint.h>
7 #include <stdlib.h> 9 #include <stdlib.h>
8 10
9 #include <deque> 11 #include <deque>
12 #include <memory>
10 #include <utility> 13 #include <utility>
11 14
12 #include "base/bind.h" 15 #include "base/bind.h"
13 #include "base/logging.h" 16 #include "base/logging.h"
14 #include "base/macros.h" 17 #include "base/macros.h"
15 #include "base/memory/scoped_ptr.h"
16 #include "media/base/video_frame.h" 18 #include "media/base/video_frame.h"
17 #include "remoting/base/util.h" 19 #include "remoting/base/util.h"
18 #include "remoting/codec/codec_test.h"
19 #include "remoting/codec/video_decoder.h" 20 #include "remoting/codec/video_decoder.h"
20 #include "remoting/codec/video_encoder.h" 21 #include "remoting/codec/video_encoder.h"
21 #include "remoting/proto/video.pb.h" 22 #include "remoting/proto/video.pb.h"
22 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
23 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" 24 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h"
24 25
25 using webrtc::BasicDesktopFrame; 26 using webrtc::BasicDesktopFrame;
26 using webrtc::DesktopFrame; 27 using webrtc::DesktopFrame;
27 using webrtc::DesktopRect; 28 using webrtc::DesktopRect;
28 using webrtc::DesktopRegion; 29 using webrtc::DesktopRegion;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 void Reset() { 70 void Reset() {
70 frame_.reset(new BasicDesktopFrame(frame_->size())); 71 frame_.reset(new BasicDesktopFrame(frame_->size()));
71 expected_region_.Clear(); 72 expected_region_.Clear();
72 } 73 }
73 74
74 void ResetRenderedData() { 75 void ResetRenderedData() {
75 memset(frame_->data(), 0, 76 memset(frame_->data(), 0,
76 frame_->size().width() * frame_->size().height() * kBytesPerPixel); 77 frame_->size().width() * frame_->size().height() * kBytesPerPixel);
77 } 78 }
78 79
79 void ReceivedPacket(scoped_ptr<VideoPacket> packet) { 80 void ReceivedPacket(std::unique_ptr<VideoPacket> packet) {
80 ASSERT_TRUE(decoder_->DecodePacket(*packet, frame_.get())); 81 ASSERT_TRUE(decoder_->DecodePacket(*packet, frame_.get()));
81 } 82 }
82 83
83 void set_strict(bool strict) { 84 void set_strict(bool strict) {
84 strict_ = strict; 85 strict_ = strict;
85 } 86 }
86 87
87 void set_expected_frame(DesktopFrame* frame) { 88 void set_expected_frame(DesktopFrame* frame) {
88 expected_frame_ = frame; 89 expected_frame_ = frame;
89 } 90 }
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
159 } 160 }
160 original++; 161 original++;
161 decoded++; 162 decoded++;
162 return sqrt(error_sum_squares / 3.0); 163 return sqrt(error_sum_squares / 3.0);
163 } 164 }
164 165
165 private: 166 private:
166 bool strict_; 167 bool strict_;
167 DesktopRegion expected_region_; 168 DesktopRegion expected_region_;
168 VideoDecoder* decoder_; 169 VideoDecoder* decoder_;
169 scoped_ptr<DesktopFrame> frame_; 170 std::unique_ptr<DesktopFrame> frame_;
170 DesktopFrame* expected_frame_; 171 DesktopFrame* expected_frame_;
171 172
172 DISALLOW_COPY_AND_ASSIGN(VideoDecoderTester); 173 DISALLOW_COPY_AND_ASSIGN(VideoDecoderTester);
173 }; 174 };
174 175
175 // The VideoEncoderTester provides a hook for retrieving the data, and passing 176 // The VideoEncoderTester provides a hook for retrieving the data, and passing
176 // the message to other subprograms for validaton. 177 // the message to other subprograms for validaton.
177 class VideoEncoderTester { 178 class VideoEncoderTester {
178 public: 179 public:
179 VideoEncoderTester() : decoder_tester_(nullptr), data_available_(0) {} 180 VideoEncoderTester() : decoder_tester_(nullptr), data_available_(0) {}
180 181
181 ~VideoEncoderTester() { 182 ~VideoEncoderTester() {
182 EXPECT_GT(data_available_, 0); 183 EXPECT_GT(data_available_, 0);
183 } 184 }
184 185
185 void DataAvailable(scoped_ptr<VideoPacket> packet) { 186 void DataAvailable(std::unique_ptr<VideoPacket> packet) {
186 ++data_available_; 187 ++data_available_;
187 // Send the message to the VideoDecoderTester. 188 // Send the message to the VideoDecoderTester.
188 if (decoder_tester_) { 189 if (decoder_tester_) {
189 decoder_tester_->ReceivedPacket(std::move(packet)); 190 decoder_tester_->ReceivedPacket(std::move(packet));
190 } 191 }
191 } 192 }
192 193
193 void set_decoder_tester(VideoDecoderTester* decoder_tester) { 194 void set_decoder_tester(VideoDecoderTester* decoder_tester) {
194 decoder_tester_ = decoder_tester; 195 decoder_tester_ = decoder_tester;
195 } 196 }
196 197
197 private: 198 private:
198 VideoDecoderTester* decoder_tester_; 199 VideoDecoderTester* decoder_tester_;
199 int data_available_; 200 int data_available_;
200 201
201 DISALLOW_COPY_AND_ASSIGN(VideoEncoderTester); 202 DISALLOW_COPY_AND_ASSIGN(VideoEncoderTester);
202 }; 203 };
203 204
204 scoped_ptr<DesktopFrame> PrepareFrame(const DesktopSize& size) { 205 std::unique_ptr<DesktopFrame> PrepareFrame(const DesktopSize& size) {
205 scoped_ptr<DesktopFrame> frame(new BasicDesktopFrame(size)); 206 std::unique_ptr<DesktopFrame> frame(new BasicDesktopFrame(size));
206 207
207 srand(0); 208 srand(0);
208 int memory_size = size.width() * size.height() * kBytesPerPixel; 209 int memory_size = size.width() * size.height() * kBytesPerPixel;
209 for (int i = 0; i < memory_size; ++i) { 210 for (int i = 0; i < memory_size; ++i) {
210 frame->data()[i] = rand() % 256; 211 frame->data()[i] = rand() % 256;
211 } 212 }
212 213
213 return frame; 214 return frame;
214 } 215 }
215 216
216 static void TestEncodingRects(VideoEncoder* encoder, 217 static void TestEncodingRects(VideoEncoder* encoder,
217 VideoEncoderTester* tester, 218 VideoEncoderTester* tester,
218 DesktopFrame* frame, 219 DesktopFrame* frame,
219 const DesktopRegion& region) { 220 const DesktopRegion& region) {
220 *frame->mutable_updated_region() = region; 221 *frame->mutable_updated_region() = region;
221 tester->DataAvailable(encoder->Encode(*frame)); 222 tester->DataAvailable(encoder->Encode(*frame));
222 } 223 }
223 224
224 void TestVideoEncoder(VideoEncoder* encoder, bool strict) { 225 void TestVideoEncoder(VideoEncoder* encoder, bool strict) {
225 const int kSizes[] = {80, 79, 77, 54}; 226 const int kSizes[] = {80, 79, 77, 54};
226 227
227 VideoEncoderTester tester; 228 VideoEncoderTester tester;
228 229
229 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) { 230 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) {
230 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) { 231 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) {
231 DesktopSize size(kSizes[xi], kSizes[yi]); 232 DesktopSize size(kSizes[xi], kSizes[yi]);
232 scoped_ptr<DesktopFrame> frame = PrepareFrame(size); 233 std::unique_ptr<DesktopFrame> frame = PrepareFrame(size);
233 for (const DesktopRegion& region : MakeTestRegionLists(size)) { 234 for (const DesktopRegion& region : MakeTestRegionLists(size)) {
234 TestEncodingRects(encoder, &tester, frame.get(), region); 235 TestEncodingRects(encoder, &tester, frame.get(), region);
235 } 236 }
236 237
237 // Pass some empty frames through the encoder. 238 // Pass some empty frames through the encoder.
238 for (int i = 0; i < 5; ++i) { 239 for (int i = 0; i < 5; ++i) {
239 TestEncodingRects(encoder, &tester, frame.get(), DesktopRegion()); 240 TestEncodingRects(encoder, &tester, frame.get(), DesktopRegion());
240 } 241 }
241 } 242 }
242 } 243 }
243 } 244 }
244 245
245 void TestVideoEncoderEmptyFrames(VideoEncoder* encoder, 246 void TestVideoEncoderEmptyFrames(VideoEncoder* encoder,
246 int max_topoff_frames) { 247 int max_topoff_frames) {
247 const DesktopSize kSize(100, 100); 248 const DesktopSize kSize(100, 100);
248 scoped_ptr<DesktopFrame> frame(PrepareFrame(kSize)); 249 std::unique_ptr<DesktopFrame> frame(PrepareFrame(kSize));
249 250
250 frame->mutable_updated_region()->SetRect( 251 frame->mutable_updated_region()->SetRect(
251 webrtc::DesktopRect::MakeSize(kSize)); 252 webrtc::DesktopRect::MakeSize(kSize));
252 EXPECT_TRUE(encoder->Encode(*frame)); 253 EXPECT_TRUE(encoder->Encode(*frame));
253 254
254 int topoff_frames = 0; 255 int topoff_frames = 0;
255 frame->mutable_updated_region()->Clear(); 256 frame->mutable_updated_region()->Clear();
256 for (int i = 0; i < max_topoff_frames + 1; ++i) { 257 for (int i = 0; i < max_topoff_frames + 1; ++i) {
257 if (!encoder->Encode(*frame)) 258 if (!encoder->Encode(*frame))
258 break; 259 break;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 decoder_tester->Reset(); 293 decoder_tester->Reset();
293 } 294 }
294 295
295 void TestVideoEncoderDecoder(VideoEncoder* encoder, 296 void TestVideoEncoderDecoder(VideoEncoder* encoder,
296 VideoDecoder* decoder, 297 VideoDecoder* decoder,
297 bool strict) { 298 bool strict) {
298 DesktopSize kSize = DesktopSize(160, 120); 299 DesktopSize kSize = DesktopSize(160, 120);
299 300
300 VideoEncoderTester encoder_tester; 301 VideoEncoderTester encoder_tester;
301 302
302 scoped_ptr<DesktopFrame> frame = PrepareFrame(kSize); 303 std::unique_ptr<DesktopFrame> frame = PrepareFrame(kSize);
303 304
304 VideoDecoderTester decoder_tester(decoder, kSize); 305 VideoDecoderTester decoder_tester(decoder, kSize);
305 decoder_tester.set_strict(strict); 306 decoder_tester.set_strict(strict);
306 decoder_tester.set_expected_frame(frame.get()); 307 decoder_tester.set_expected_frame(frame.get());
307 encoder_tester.set_decoder_tester(&decoder_tester); 308 encoder_tester.set_decoder_tester(&decoder_tester);
308 309
309 for (const DesktopRegion& region : MakeTestRegionLists(kSize)) { 310 for (const DesktopRegion& region : MakeTestRegionLists(kSize)) {
310 TestEncodeDecodeRects(encoder, &encoder_tester, &decoder_tester, 311 TestEncodeDecodeRects(encoder, &encoder_tester, &decoder_tester,
311 frame.get(), region); 312 frame.get(), region);
312 } 313 }
(...skipping 10 matching lines...) Expand all
323 *p++ = 0; 324 *p++ = 0;
324 } 325 }
325 } 326 }
326 } 327 }
327 328
328 void TestVideoEncoderDecoderGradient(VideoEncoder* encoder, 329 void TestVideoEncoderDecoderGradient(VideoEncoder* encoder,
329 VideoDecoder* decoder, 330 VideoDecoder* decoder,
330 const DesktopSize& screen_size, 331 const DesktopSize& screen_size,
331 double max_error_limit, 332 double max_error_limit,
332 double mean_error_limit) { 333 double mean_error_limit) {
333 scoped_ptr<BasicDesktopFrame> frame( 334 std::unique_ptr<BasicDesktopFrame> frame(new BasicDesktopFrame(screen_size));
334 new BasicDesktopFrame(screen_size));
335 FillWithGradient(frame.get()); 335 FillWithGradient(frame.get());
336 frame->mutable_updated_region()->SetRect(DesktopRect::MakeSize(screen_size)); 336 frame->mutable_updated_region()->SetRect(DesktopRect::MakeSize(screen_size));
337 337
338 VideoDecoderTester decoder_tester(decoder, screen_size); 338 VideoDecoderTester decoder_tester(decoder, screen_size);
339 decoder_tester.set_expected_frame(frame.get()); 339 decoder_tester.set_expected_frame(frame.get());
340 decoder_tester.AddRegion(frame->updated_region()); 340 decoder_tester.AddRegion(frame->updated_region());
341 decoder_tester.ReceivedPacket(encoder->Encode(*frame)); 341 decoder_tester.ReceivedPacket(encoder->Encode(*frame));
342 342
343 decoder_tester.VerifyResultsApprox(max_error_limit, mean_error_limit); 343 decoder_tester.VerifyResultsApprox(max_error_limit, mean_error_limit);
344 } 344 }
345 345
346 } // namespace remoting 346 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/codec/audio_encoder_verbatim.cc ('k') | remoting/codec/scoped_vpx_codec.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698