| Index: remoting/codec/codec_test.cc
|
| diff --git a/remoting/codec/codec_test.cc b/remoting/codec/codec_test.cc
|
| index eff143d1c6e1dca9d1fc8c926ccf023eb0b84997..83d103586db3e162b05d92d9b3ed3044e5bddd2d 100644
|
| --- a/remoting/codec/codec_test.cc
|
| +++ b/remoting/codec/codec_test.cc
|
| @@ -50,88 +50,6 @@ std::vector<std::vector<DesktopRect> > MakeTestRectLists(DesktopSize size) {
|
|
|
| namespace remoting {
|
|
|
| -// A class to test the message output of the encoder.
|
| -class VideoEncoderMessageTester {
|
| - public:
|
| - VideoEncoderMessageTester()
|
| - : begin_rect_(0),
|
| - rect_data_(0),
|
| - end_rect_(0),
|
| - state_(kWaitingForBeginRect),
|
| - strict_(false) {
|
| - }
|
| -
|
| - ~VideoEncoderMessageTester() {
|
| - EXPECT_EQ(begin_rect_, end_rect_);
|
| - EXPECT_GT(begin_rect_, 0);
|
| - EXPECT_EQ(kWaitingForBeginRect, state_);
|
| - if (strict_) {
|
| - EXPECT_TRUE(region_.Equals(received_region_));
|
| - }
|
| - }
|
| -
|
| - // Test that we received the correct packet.
|
| - void ReceivedPacket(VideoPacket* packet) {
|
| - if (state_ == kWaitingForBeginRect) {
|
| - EXPECT_TRUE((packet->flags() & VideoPacket::FIRST_PACKET) != 0);
|
| - state_ = kWaitingForRectData;
|
| - ++begin_rect_;
|
| -
|
| - if (strict_) {
|
| - received_region_.AddRect(webrtc::DesktopRect::MakeXYWH(
|
| - packet->format().x(), packet->format().y(),
|
| - packet->format().width(), packet->format().height()));
|
| - }
|
| - } else {
|
| - EXPECT_FALSE((packet->flags() & VideoPacket::FIRST_PACKET) != 0);
|
| - }
|
| -
|
| - if (state_ == kWaitingForRectData) {
|
| - if (packet->has_data()) {
|
| - ++rect_data_;
|
| - }
|
| -
|
| - if ((packet->flags() & VideoPacket::LAST_PACKET) != 0) {
|
| - // Expect that we have received some data.
|
| - EXPECT_GT(rect_data_, 0);
|
| - rect_data_ = 0;
|
| - state_ = kWaitingForBeginRect;
|
| - ++end_rect_;
|
| - }
|
| -
|
| - if ((packet->flags() & VideoPacket::LAST_PARTITION) != 0) {
|
| - // LAST_PARTITION must always be marked with LAST_PACKET.
|
| - EXPECT_TRUE((packet->flags() & VideoPacket::LAST_PACKET) != 0);
|
| - }
|
| - }
|
| - }
|
| -
|
| - void set_strict(bool strict) {
|
| - strict_ = strict;
|
| - }
|
| -
|
| - void AddRects(const DesktopRect* rects, int count) {
|
| - region_.AddRects(rects, count);
|
| - }
|
| -
|
| - private:
|
| - enum State {
|
| - kWaitingForBeginRect,
|
| - kWaitingForRectData,
|
| - };
|
| -
|
| - int begin_rect_;
|
| - int rect_data_;
|
| - int end_rect_;
|
| - State state_;
|
| - bool strict_;
|
| -
|
| - DesktopRegion region_;
|
| - DesktopRegion received_region_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(VideoEncoderMessageTester);
|
| -};
|
| -
|
| class VideoDecoderTester {
|
| public:
|
| VideoDecoderTester(VideoDecoder* decoder,
|
| @@ -207,18 +125,12 @@ class VideoDecoderTester {
|
| ASSERT_TRUE(frame_);
|
|
|
| // Test the content of the update region.
|
| - //
|
| - // TODO(sergeyu): Change this to use DesktopRegion when it's capable of
|
| - // merging the rectangles.
|
| - SkRegion expected_region;
|
| - for (webrtc::DesktopRegion::Iterator it(expected_region_);
|
| - !it.IsAtEnd(); it.Advance()) {
|
| - expected_region.op(
|
| - SkIRect::MakeXYWH(it.rect().top(), it.rect().left(),
|
| - it.rect().width(), it.rect().height()),
|
| - SkRegion::kUnion_Op);
|
| + webrtc::DesktopRegion update_region;
|
| + for (SkRegion::Iterator i(update_region_); !i.done(); i.next()) {
|
| + update_region.AddRect(webrtc::DesktopRect::MakeXYWH(
|
| + i.rect().x(), i.rect().y(), i.rect().width(), i.rect().height()));
|
| }
|
| - EXPECT_EQ(expected_region, update_region_);
|
| + EXPECT_TRUE(expected_region_.Equals(update_region));
|
|
|
| for (SkRegion::Iterator i(update_region_); !i.done(); i.next()) {
|
| const int stride = view_size_.width() * kBytesPerPixel;
|
| @@ -299,9 +211,8 @@ class VideoDecoderTester {
|
| // the message to other subprograms for validaton.
|
| class VideoEncoderTester {
|
| public:
|
| - VideoEncoderTester(VideoEncoderMessageTester* message_tester)
|
| - : message_tester_(message_tester),
|
| - decoder_tester_(NULL),
|
| + VideoEncoderTester()
|
| + : decoder_tester_(NULL),
|
| data_available_(0) {
|
| }
|
|
|
| @@ -311,24 +222,17 @@ class VideoEncoderTester {
|
|
|
| void DataAvailable(scoped_ptr<VideoPacket> packet) {
|
| ++data_available_;
|
| - message_tester_->ReceivedPacket(packet.get());
|
| -
|
| // Send the message to the VideoDecoderTester.
|
| if (decoder_tester_) {
|
| decoder_tester_->ReceivedPacket(packet.get());
|
| }
|
| }
|
|
|
| - void AddRects(const DesktopRect* rects, int count) {
|
| - message_tester_->AddRects(rects, count);
|
| - }
|
| -
|
| void set_decoder_tester(VideoDecoderTester* decoder_tester) {
|
| decoder_tester_ = decoder_tester;
|
| }
|
|
|
| private:
|
| - VideoEncoderMessageTester* message_tester_;
|
| VideoDecoderTester* decoder_tester_;
|
| int data_available_;
|
|
|
| @@ -356,19 +260,15 @@ static void TestEncodingRects(VideoEncoder* encoder,
|
| for (int i = 0; i < count; ++i) {
|
| frame->mutable_updated_region()->AddRect(rects[i]);
|
| }
|
| - tester->AddRects(rects, count);
|
|
|
| - encoder->Encode(frame, base::Bind(
|
| - &VideoEncoderTester::DataAvailable, base::Unretained(tester)));
|
| + scoped_ptr<VideoPacket> packet = encoder->Encode(*frame);
|
| + tester->DataAvailable(packet.Pass());
|
| }
|
|
|
| void TestVideoEncoder(VideoEncoder* encoder, bool strict) {
|
| const int kSizes[] = {320, 319, 317, 150};
|
|
|
| - VideoEncoderMessageTester message_tester;
|
| - message_tester.set_strict(strict);
|
| -
|
| - VideoEncoderTester tester(&message_tester);
|
| + VideoEncoderTester tester;
|
|
|
| for (size_t xi = 0; xi < arraysize(kSizes); ++xi) {
|
| for (size_t yi = 0; yi < arraysize(kSizes); ++yi) {
|
| @@ -394,7 +294,6 @@ static void TestEncodeDecodeRects(VideoEncoder* encoder,
|
| for (int i = 0; i < count; ++i) {
|
| frame->mutable_updated_region()->AddRect(rects[i]);
|
| }
|
| - encoder_tester->AddRects(rects, count);
|
| decoder_tester->AddRects(rects, count);
|
|
|
| // Generate random data for the updated region.
|
| @@ -412,8 +311,8 @@ static void TestEncodeDecodeRects(VideoEncoder* encoder,
|
| }
|
| }
|
|
|
| - encoder->Encode(frame, base::Bind(&VideoEncoderTester::DataAvailable,
|
| - base::Unretained(encoder_tester)));
|
| + scoped_ptr<VideoPacket> packet = encoder->Encode(*frame);
|
| + encoder_tester->DataAvailable(packet.Pass());
|
| decoder_tester->VerifyResults();
|
| decoder_tester->Reset();
|
| }
|
| @@ -422,10 +321,7 @@ void TestVideoEncoderDecoder(
|
| VideoEncoder* encoder, VideoDecoder* decoder, bool strict) {
|
| DesktopSize kSize = DesktopSize(320, 240);
|
|
|
| - VideoEncoderMessageTester message_tester;
|
| - message_tester.set_strict(strict);
|
| -
|
| - VideoEncoderTester encoder_tester(&message_tester);
|
| + VideoEncoderTester encoder_tester;
|
|
|
| scoped_ptr<webrtc::DesktopFrame> frame = PrepareFrame(kSize);
|
|
|
| @@ -475,9 +371,8 @@ void TestVideoEncoderDecoderGradient(VideoEncoder* encoder,
|
| decoder_tester.set_frame(frame.get());
|
| decoder_tester.AddRegion(frame->updated_region());
|
|
|
| - encoder->Encode(frame.get(),
|
| - base::Bind(&VideoDecoderTester::ReceivedScopedPacket,
|
| - base::Unretained(&decoder_tester)));
|
| + scoped_ptr<VideoPacket> packet = encoder->Encode(*frame);
|
| + decoder_tester.ReceivedScopedPacket(packet.Pass());
|
|
|
| decoder_tester.VerifyResultsApprox(expected_result->data(),
|
| max_error_limit, mean_error_limit);
|
|
|