| 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 "remoting/codec/codec_test.h" | 5 #include "remoting/codec/codec_test.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <stdlib.h> | 9 #include <stdlib.h> |
| 10 | 10 |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 } | 212 } |
| 213 | 213 |
| 214 return frame; | 214 return frame; |
| 215 } | 215 } |
| 216 | 216 |
| 217 static void TestEncodingRects(VideoEncoder* encoder, | 217 static void TestEncodingRects(VideoEncoder* encoder, |
| 218 VideoEncoderTester* tester, | 218 VideoEncoderTester* tester, |
| 219 DesktopFrame* frame, | 219 DesktopFrame* frame, |
| 220 const DesktopRegion& region) { | 220 const DesktopRegion& region) { |
| 221 *frame->mutable_updated_region() = region; | 221 *frame->mutable_updated_region() = region; |
| 222 tester->DataAvailable(encoder->Encode(*frame, 0)); | 222 tester->DataAvailable(encoder->Encode(*frame)); |
| 223 } | 223 } |
| 224 | 224 |
| 225 void TestVideoEncoder(VideoEncoder* encoder, bool strict) { | 225 void TestVideoEncoder(VideoEncoder* encoder, bool strict) { |
| 226 const int kSizes[] = {80, 79, 77, 54}; | 226 const int kSizes[] = {80, 79, 77, 54}; |
| 227 | 227 |
| 228 VideoEncoderTester tester; | 228 VideoEncoderTester tester; |
| 229 | 229 |
| 230 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) { | 230 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) { |
| 231 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) { | 231 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) { |
| 232 DesktopSize size(kSizes[xi], kSizes[yi]); | 232 DesktopSize size(kSizes[xi], kSizes[yi]); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 243 } | 243 } |
| 244 } | 244 } |
| 245 | 245 |
| 246 void TestVideoEncoderEmptyFrames(VideoEncoder* encoder, | 246 void TestVideoEncoderEmptyFrames(VideoEncoder* encoder, |
| 247 int max_topoff_frames) { | 247 int max_topoff_frames) { |
| 248 const DesktopSize kSize(100, 100); | 248 const DesktopSize kSize(100, 100); |
| 249 std::unique_ptr<DesktopFrame> frame(PrepareFrame(kSize)); | 249 std::unique_ptr<DesktopFrame> frame(PrepareFrame(kSize)); |
| 250 | 250 |
| 251 frame->mutable_updated_region()->SetRect( | 251 frame->mutable_updated_region()->SetRect( |
| 252 webrtc::DesktopRect::MakeSize(kSize)); | 252 webrtc::DesktopRect::MakeSize(kSize)); |
| 253 EXPECT_TRUE(encoder->Encode(*frame, 0)); | 253 EXPECT_TRUE(encoder->Encode(*frame)); |
| 254 | 254 |
| 255 int topoff_frames = 0; | 255 int topoff_frames = 0; |
| 256 frame->mutable_updated_region()->Clear(); | 256 frame->mutable_updated_region()->Clear(); |
| 257 for (int i = 0; i < max_topoff_frames + 1; ++i) { | 257 for (int i = 0; i < max_topoff_frames + 1; ++i) { |
| 258 if (!encoder->Encode(*frame, 0)) | 258 if (!encoder->Encode(*frame)) |
| 259 break; | 259 break; |
| 260 topoff_frames++; | 260 topoff_frames++; |
| 261 } | 261 } |
| 262 | 262 |
| 263 // If top-off is enabled then our random frame contents should always | 263 // If top-off is enabled then our random frame contents should always |
| 264 // trigger it, so expect at least one top-off frame - strictly, though, | 264 // trigger it, so expect at least one top-off frame - strictly, though, |
| 265 // an encoder may not always need to top-off. | 265 // an encoder may not always need to top-off. |
| 266 EXPECT_GE(topoff_frames, max_topoff_frames ? 1 : 0); | 266 EXPECT_GE(topoff_frames, max_topoff_frames ? 1 : 0); |
| 267 EXPECT_LE(topoff_frames, max_topoff_frames); | 267 EXPECT_LE(topoff_frames, max_topoff_frames); |
| 268 } | 268 } |
| (...skipping 12 matching lines...) Expand all Loading... |
| 281 const int row_size = DesktopFrame::kBytesPerPixel * i.rect().width(); | 281 const int row_size = DesktopFrame::kBytesPerPixel * i.rect().width(); |
| 282 uint8_t* memory = frame->data() + frame->stride() * i.rect().top() + | 282 uint8_t* memory = frame->data() + frame->stride() * i.rect().top() + |
| 283 DesktopFrame::kBytesPerPixel * i.rect().left(); | 283 DesktopFrame::kBytesPerPixel * i.rect().left(); |
| 284 for (int y = 0; y < i.rect().height(); ++y) { | 284 for (int y = 0; y < i.rect().height(); ++y) { |
| 285 for (int x = 0; x < row_size; ++x) | 285 for (int x = 0; x < row_size; ++x) |
| 286 memory[x] = rand() % 256; | 286 memory[x] = rand() % 256; |
| 287 memory += frame->stride(); | 287 memory += frame->stride(); |
| 288 } | 288 } |
| 289 } | 289 } |
| 290 | 290 |
| 291 encoder_tester->DataAvailable(encoder->Encode(*frame, 0)); | 291 encoder_tester->DataAvailable(encoder->Encode(*frame)); |
| 292 decoder_tester->VerifyResults(); | 292 decoder_tester->VerifyResults(); |
| 293 decoder_tester->Reset(); | 293 decoder_tester->Reset(); |
| 294 } | 294 } |
| 295 | 295 |
| 296 void TestVideoEncoderDecoder(VideoEncoder* encoder, | 296 void TestVideoEncoderDecoder(VideoEncoder* encoder, |
| 297 VideoDecoder* decoder, | 297 VideoDecoder* decoder, |
| 298 bool strict) { | 298 bool strict) { |
| 299 DesktopSize kSize = DesktopSize(160, 120); | 299 DesktopSize kSize = DesktopSize(160, 120); |
| 300 | 300 |
| 301 VideoEncoderTester encoder_tester; | 301 VideoEncoderTester encoder_tester; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 331 const DesktopSize& screen_size, | 331 const DesktopSize& screen_size, |
| 332 double max_error_limit, | 332 double max_error_limit, |
| 333 double mean_error_limit) { | 333 double mean_error_limit) { |
| 334 std::unique_ptr<BasicDesktopFrame> frame(new BasicDesktopFrame(screen_size)); | 334 std::unique_ptr<BasicDesktopFrame> frame(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, 0)); | 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 |
| OLD | NEW |