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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 |
8 #include <deque> | 9 #include <deque> |
| 10 #include <utility> |
9 | 11 |
10 #include "base/bind.h" | 12 #include "base/bind.h" |
11 #include "base/logging.h" | 13 #include "base/logging.h" |
12 #include "base/macros.h" | 14 #include "base/macros.h" |
13 #include "base/memory/scoped_ptr.h" | 15 #include "base/memory/scoped_ptr.h" |
14 #include "media/base/video_frame.h" | 16 #include "media/base/video_frame.h" |
15 #include "remoting/base/util.h" | 17 #include "remoting/base/util.h" |
16 #include "remoting/codec/codec_test.h" | 18 #include "remoting/codec/codec_test.h" |
17 #include "remoting/codec/video_decoder.h" | 19 #include "remoting/codec/video_decoder.h" |
18 #include "remoting/codec/video_encoder.h" | 20 #include "remoting/codec/video_encoder.h" |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 VideoEncoderTester() : decoder_tester_(nullptr), data_available_(0) {} | 179 VideoEncoderTester() : decoder_tester_(nullptr), data_available_(0) {} |
178 | 180 |
179 ~VideoEncoderTester() { | 181 ~VideoEncoderTester() { |
180 EXPECT_GT(data_available_, 0); | 182 EXPECT_GT(data_available_, 0); |
181 } | 183 } |
182 | 184 |
183 void DataAvailable(scoped_ptr<VideoPacket> packet) { | 185 void DataAvailable(scoped_ptr<VideoPacket> packet) { |
184 ++data_available_; | 186 ++data_available_; |
185 // Send the message to the VideoDecoderTester. | 187 // Send the message to the VideoDecoderTester. |
186 if (decoder_tester_) { | 188 if (decoder_tester_) { |
187 decoder_tester_->ReceivedPacket(packet.Pass()); | 189 decoder_tester_->ReceivedPacket(std::move(packet)); |
188 } | 190 } |
189 } | 191 } |
190 | 192 |
191 void set_decoder_tester(VideoDecoderTester* decoder_tester) { | 193 void set_decoder_tester(VideoDecoderTester* decoder_tester) { |
192 decoder_tester_ = decoder_tester; | 194 decoder_tester_ = decoder_tester; |
193 } | 195 } |
194 | 196 |
195 private: | 197 private: |
196 VideoDecoderTester* decoder_tester_; | 198 VideoDecoderTester* decoder_tester_; |
197 int data_available_; | 199 int data_available_; |
198 | 200 |
199 DISALLOW_COPY_AND_ASSIGN(VideoEncoderTester); | 201 DISALLOW_COPY_AND_ASSIGN(VideoEncoderTester); |
200 }; | 202 }; |
201 | 203 |
202 scoped_ptr<DesktopFrame> PrepareFrame(const DesktopSize& size) { | 204 scoped_ptr<DesktopFrame> PrepareFrame(const DesktopSize& size) { |
203 scoped_ptr<DesktopFrame> frame(new BasicDesktopFrame(size)); | 205 scoped_ptr<DesktopFrame> frame(new BasicDesktopFrame(size)); |
204 | 206 |
205 srand(0); | 207 srand(0); |
206 int memory_size = size.width() * size.height() * kBytesPerPixel; | 208 int memory_size = size.width() * size.height() * kBytesPerPixel; |
207 for (int i = 0; i < memory_size; ++i) { | 209 for (int i = 0; i < memory_size; ++i) { |
208 frame->data()[i] = rand() % 256; | 210 frame->data()[i] = rand() % 256; |
209 } | 211 } |
210 | 212 |
211 return frame.Pass(); | 213 return frame; |
212 } | 214 } |
213 | 215 |
214 static void TestEncodingRects(VideoEncoder* encoder, | 216 static void TestEncodingRects(VideoEncoder* encoder, |
215 VideoEncoderTester* tester, | 217 VideoEncoderTester* tester, |
216 DesktopFrame* frame, | 218 DesktopFrame* frame, |
217 const DesktopRegion& region) { | 219 const DesktopRegion& region) { |
218 *frame->mutable_updated_region() = region; | 220 *frame->mutable_updated_region() = region; |
219 scoped_ptr<VideoPacket> packet = encoder->Encode(*frame); | 221 tester->DataAvailable(encoder->Encode(*frame)); |
220 tester->DataAvailable(packet.Pass()); | |
221 } | 222 } |
222 | 223 |
223 void TestVideoEncoder(VideoEncoder* encoder, bool strict) { | 224 void TestVideoEncoder(VideoEncoder* encoder, bool strict) { |
224 const int kSizes[] = {80, 79, 77, 54}; | 225 const int kSizes[] = {80, 79, 77, 54}; |
225 | 226 |
226 VideoEncoderTester tester; | 227 VideoEncoderTester tester; |
227 | 228 |
228 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) { | 229 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) { |
229 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) { | 230 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) { |
230 DesktopSize size(kSizes[xi], kSizes[yi]); | 231 DesktopSize size(kSizes[xi], kSizes[yi]); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
279 const int row_size = DesktopFrame::kBytesPerPixel * i.rect().width(); | 280 const int row_size = DesktopFrame::kBytesPerPixel * i.rect().width(); |
280 uint8_t* memory = frame->data() + frame->stride() * i.rect().top() + | 281 uint8_t* memory = frame->data() + frame->stride() * i.rect().top() + |
281 DesktopFrame::kBytesPerPixel * i.rect().left(); | 282 DesktopFrame::kBytesPerPixel * i.rect().left(); |
282 for (int y = 0; y < i.rect().height(); ++y) { | 283 for (int y = 0; y < i.rect().height(); ++y) { |
283 for (int x = 0; x < row_size; ++x) | 284 for (int x = 0; x < row_size; ++x) |
284 memory[x] = rand() % 256; | 285 memory[x] = rand() % 256; |
285 memory += frame->stride(); | 286 memory += frame->stride(); |
286 } | 287 } |
287 } | 288 } |
288 | 289 |
289 scoped_ptr<VideoPacket> packet = encoder->Encode(*frame); | 290 encoder_tester->DataAvailable(encoder->Encode(*frame)); |
290 encoder_tester->DataAvailable(packet.Pass()); | |
291 decoder_tester->VerifyResults(); | 291 decoder_tester->VerifyResults(); |
292 decoder_tester->Reset(); | 292 decoder_tester->Reset(); |
293 } | 293 } |
294 | 294 |
295 void TestVideoEncoderDecoder(VideoEncoder* encoder, | 295 void TestVideoEncoderDecoder(VideoEncoder* encoder, |
296 VideoDecoder* decoder, | 296 VideoDecoder* decoder, |
297 bool strict) { | 297 bool strict) { |
298 DesktopSize kSize = DesktopSize(160, 120); | 298 DesktopSize kSize = DesktopSize(160, 120); |
299 | 299 |
300 VideoEncoderTester encoder_tester; | 300 VideoEncoderTester encoder_tester; |
(...skipping 30 matching lines...) Expand all Loading... |
331 double max_error_limit, | 331 double max_error_limit, |
332 double mean_error_limit) { | 332 double mean_error_limit) { |
333 scoped_ptr<BasicDesktopFrame> frame( | 333 scoped_ptr<BasicDesktopFrame> frame( |
334 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 | 341 decoder_tester.ReceivedPacket(encoder->Encode(*frame)); |
342 scoped_ptr<VideoPacket> packet = encoder->Encode(*frame); | |
343 decoder_tester.ReceivedPacket(packet.Pass()); | |
344 | 342 |
345 decoder_tester.VerifyResultsApprox(max_error_limit, mean_error_limit); | 343 decoder_tester.VerifyResultsApprox(max_error_limit, mean_error_limit); |
346 } | 344 } |
347 | 345 |
348 float MeasureVideoEncoderFpsWithSize(VideoEncoder* encoder, | 346 float MeasureVideoEncoderFpsWithSize(VideoEncoder* encoder, |
349 const DesktopSize& size) { | 347 const DesktopSize& size) { |
350 scoped_ptr<DesktopFrame> frame(PrepareFrame(size)); | 348 scoped_ptr<DesktopFrame> frame(PrepareFrame(size)); |
351 frame->mutable_updated_region()->SetRect(DesktopRect::MakeSize(size)); | 349 frame->mutable_updated_region()->SetRect(DesktopRect::MakeSize(size)); |
352 std::list<DesktopFrame*> frames; | 350 std::list<DesktopFrame*> frames; |
353 frames.push_back(frame.get()); | 351 frames.push_back(frame.get()); |
(...skipping 29 matching lines...) Expand all Loading... |
383 | 381 |
384 if (frame_count >= kWarmUpFrameCount) { | 382 if (frame_count >= kWarmUpFrameCount) { |
385 elapsed = base::TimeTicks::Now() - start_time; | 383 elapsed = base::TimeTicks::Now() - start_time; |
386 } | 384 } |
387 } | 385 } |
388 | 386 |
389 return (frame_count * base::TimeDelta::FromSeconds(1)) / elapsed; | 387 return (frame_count * base::TimeDelta::FromSeconds(1)) / elapsed; |
390 } | 388 } |
391 | 389 |
392 } // namespace remoting | 390 } // namespace remoting |
OLD | NEW |