| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef REMOTING_CODEC_CODEC_TEST_H_ |
| #define REMOTING_CODEC_CODEC_TEST_H_ |
| |
| #include <list> |
| |
| #include "base/memory/ref_counted.h" |
| |
| namespace webrtc { |
| class DesktopFrame; |
| class DesktopSize; |
| } |
| |
| namespace remoting { |
| |
| class VideoDecoder; |
| class VideoEncoder; |
| |
| // Generate test data and test the encoder for a regular encoding sequence. |
| // This will test encoder test and the sequence of messages sent. |
| // |
| // If |strict| is set to true then this routine will make sure the updated |
| // rects match dirty rects. |
| void TestVideoEncoder(VideoEncoder* encoder, bool strict); |
| |
| // Generate test data and test the encoder for a sequence of one "changed" |
| // frame followed by one or more "unchanged" frames, and verify that the |
| // encoder sends up to |max_topoff_frames| of non-empty data for unchanged |
| // frames, after which it returns null frames. |
| void TestVideoEncoderEmptyFrames(VideoEncoder* encoder, int max_topoff_frames); |
| |
| // Generate test data and test the encoder and decoder pair. |
| // |
| // If |strict| is set to true, this routine will make sure the updated rects |
| // are correct. |
| void TestVideoEncoderDecoder(VideoEncoder* encoder, |
| VideoDecoder* decoder, |
| bool strict); |
| |
| // Generate a frame containing a gradient, and test the encoder and decoder |
| // pair. |
| void TestVideoEncoderDecoderGradient(VideoEncoder* encoder, |
| VideoDecoder* decoder, |
| const webrtc::DesktopSize& screen_size, |
| double max_error_limit, |
| double mean_error_limit); |
| |
| // Run sufficient encoding iterations to measure the FPS of the specified |
| // encoder. The caller may supply one or more DesktopFrames to encode, which |
| // will be cycled through until timing is complete. If the caller does not |
| // supply any frames then a single full-frame of randomized pixels is used. |
| float MeasureVideoEncoderFpsWithSize(VideoEncoder* encoder, |
| const webrtc::DesktopSize& size); |
| float MeasureVideoEncoderFpsWithFrames( |
| VideoEncoder* encoder, |
| const std::list<webrtc::DesktopFrame*>& frames); |
| |
| } // namespace remoting |
| |
| #endif // REMOTING_CODEC_CODEC_TEST_H_ |