[Chromoting] Add unit tests for up- and down-scaling.


Review URL: https://chromiumcodereview.appspot.com/10828058

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148888 0039d316-1c4b-4281-b951-d872f2087c98
parent aacecdcf
This diff is collapsed.
...@@ -14,11 +14,6 @@ namespace remoting { ...@@ -14,11 +14,6 @@ namespace remoting {
class Decoder; class Decoder;
class Encoder; class Encoder;
// Prepare testing data for encoding. Memory created is written to |memory|.
// Returns randomly generated data in CaptureData.
scoped_refptr<CaptureData> PrepareEncodeData(media::VideoFrame::Format format,
uint8** memory);
// Generate test data and test the encoder for a regular encoding sequence. // Generate test data and test the encoder for a regular encoding sequence.
// This will test encoder test and the sequence of messages sent. // This will test encoder test and the sequence of messages sent.
// //
...@@ -35,6 +30,8 @@ void TestEncoderDecoder(Encoder* encoder, Decoder* decoder, bool strict); ...@@ -35,6 +30,8 @@ void TestEncoderDecoder(Encoder* encoder, Decoder* decoder, bool strict);
// Generate a frame containing a gradient, and test the encoder and decoder // Generate a frame containing a gradient, and test the encoder and decoder
// pair. // pair.
void TestEncoderDecoderGradient(Encoder* encoder, Decoder* decoder, void TestEncoderDecoderGradient(Encoder* encoder, Decoder* decoder,
const SkISize& screen_size,
const SkISize& view_size,
double max_error_limit, double max_error_limit,
double mean_error_limit); double mean_error_limit);
......
...@@ -10,19 +10,65 @@ ...@@ -10,19 +10,65 @@
namespace remoting { namespace remoting {
TEST(DecoderVp8Test, EncodeAndDecode) { class DecoderVp8Test : public testing::Test {
EncoderVp8 encoder; protected:
DecoderVp8 decoder; EncoderVp8 encoder_;
TestEncoderDecoder(&encoder, &decoder, false); DecoderVp8 decoder_;
void TestGradient(int screen_width, int screen_height,
int view_width, int view_height,
double max_error_limit, double mean_error_limit) {
TestEncoderDecoderGradient(&encoder_, &decoder_,
SkISize::Make(screen_width, screen_height),
SkISize::Make(view_width, view_height),
max_error_limit, mean_error_limit);
}
};
TEST_F(DecoderVp8Test, EncodeAndDecode) {
TestEncoderDecoder(&encoder_, &decoder_, false);
} }
// Check that encoding and decoding a particular frame doesn't change the // Check that encoding and decoding a particular frame doesn't change the
// frame too much. The frame used is a gradient, which does not contain sharp // frame too much. The frame used is a gradient, which does not contain sharp
// transitions, so encoding lossiness should not be too high. // transitions, so encoding lossiness should not be too high.
TEST(DecoderVp8Test, Gradient) { TEST_F(DecoderVp8Test, Gradient) {
EncoderVp8 encoder; TestGradient(320, 240, 320, 240, 0.03, 0.01);
DecoderVp8 decoder; }
TestEncoderDecoderGradient(&encoder, &decoder, 0.03, 0.01);
TEST_F(DecoderVp8Test, GradientScaleUpEvenToEven) {
TestGradient(320, 240, 640, 480, 0.04, 0.02);
}
TEST_F(DecoderVp8Test, GradientScaleUpEvenToOdd) {
TestGradient(320, 240, 641, 481, 0.04, 0.02);
}
TEST_F(DecoderVp8Test, GradientScaleUpOddToEven) {
TestGradient(321, 241, 640, 480, 0.04, 0.02);
}
TEST_F(DecoderVp8Test, GradientScaleUpOddToOdd) {
TestGradient(321, 241, 641, 481, 0.04, 0.02);
}
TEST_F(DecoderVp8Test, GradientScaleDownEvenToEven) {
TestGradient(320, 240, 160, 120, 0.04, 0.02);
}
TEST_F(DecoderVp8Test, GradientScaleDownEvenToOdd) {
// TODO(simonmorris): The maximum error is non-deterministic.
// The mean error is not too high, which suggests that the problem is
// restricted to a small area of the output image. See crbug.com/139437.
TestGradient(320, 240, 161, 121, 1.0, 0.02);
}
TEST_F(DecoderVp8Test, GradientScaleDownOddToEven) {
TestGradient(321, 241, 160, 120, 0.04, 0.02);
}
TEST_F(DecoderVp8Test, GradientScaleDownOddToOdd) {
TestGradient(321, 241, 161, 121, 0.04, 0.02);
} }
} // namespace remoting } // namespace remoting
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment