Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1993)

Unified Diff: remoting/base/codec_test.cc

Issue 5635003: Reenable encoder/decoder tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 10 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/base/codec_test.h ('k') | remoting/base/encode_decode_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/base/codec_test.cc
diff --git a/remoting/base/codec_test.cc b/remoting/base/codec_test.cc
index dcc165e73fa3dadc1c7453d37a9af635b7494b99..0521b52dbefbd76d855166c5ee9a2dc4dd1dcc79 100644
--- a/remoting/base/codec_test.cc
+++ b/remoting/base/codec_test.cc
@@ -29,42 +29,6 @@ static const gfx::Rect kTestRects[] = {
namespace remoting {
-// A class to test that the state transition of the Encoder is correct.
-class EncoderStateTester {
- public:
- EncoderStateTester()
- : next_state_(Encoder::EncodingStarting) {
- }
-
- ~EncoderStateTester() {
- EXPECT_EQ(Encoder::EncodingStarting, next_state_);
- }
-
- // Set the state output of the Encoder.
- void ReceivedState(Encoder::EncodingState state) {
- if (state & Encoder::EncodingStarting) {
- EXPECT_EQ(Encoder::EncodingStarting, next_state_);
- next_state_ = Encoder::EncodingInProgress | Encoder::EncodingEnded;
- } else {
- EXPECT_FALSE(next_state_ & Encoder::EncodingStarting);
- }
-
- if (state & Encoder::EncodingInProgress) {
- EXPECT_TRUE(next_state_ & Encoder::EncodingInProgress);
- }
-
- if (state & Encoder::EncodingEnded) {
- EXPECT_TRUE(next_state_ & Encoder::EncodingEnded);
- next_state_ = Encoder::EncodingStarting;
- }
- }
-
- private:
- Encoder::EncodingState next_state_;
-
- DISALLOW_COPY_AND_ASSIGN(EncoderStateTester);
-};
-
// A class to test the message output of the encoder.
class EncoderMessageTester {
public:
@@ -86,35 +50,31 @@ class EncoderMessageTester {
}
}
- // Test that we received the correct message.
- void ReceivedMessage(ChromotingHostMessage* message) {
- EXPECT_TRUE(message->has_update_stream_packet());
-
+ // Test that we received the correct packet.
+ void ReceivedPacket(VideoPacket* packet) {
if (state_ == kWaitingForBeginRect) {
- EXPECT_TRUE(message->update_stream_packet().has_begin_rect());
+ EXPECT_TRUE((packet->flags() & VideoPacket::FIRST_PACKET) != 0);
state_ = kWaitingForRectData;
++begin_rect_;
if (strict_) {
gfx::Rect rect = rects_.front();
rects_.pop_front();
- EXPECT_EQ(rect.x(), message->update_stream_packet().begin_rect().x());
- EXPECT_EQ(rect.y(), message->update_stream_packet().begin_rect().y());
- EXPECT_EQ(rect.width(),
- message->update_stream_packet().begin_rect().width());
- EXPECT_EQ(rect.height(),
- message->update_stream_packet().begin_rect().height());
+ EXPECT_EQ(rect.x(), packet->format().x());
+ EXPECT_EQ(rect.y(), packet->format().y());
+ EXPECT_EQ(rect.width(), packet->format().width());
+ EXPECT_EQ(rect.height(), packet->format().height());
}
} else {
- EXPECT_FALSE(message->update_stream_packet().has_begin_rect());
+ EXPECT_FALSE((packet->flags() & VideoPacket::FIRST_PACKET) != 0);
}
if (state_ == kWaitingForRectData) {
- if (message->update_stream_packet().has_rect_data()) {
+ if (packet->has_data()) {
++rect_data_;
}
- if (message->update_stream_packet().has_end_rect()) {
+ if ((packet->flags() & VideoPacket::LAST_PACKET) != 0) {
// Expect that we have received some data.
EXPECT_GT(rect_data_, 0);
rect_data_ = 0;
@@ -155,32 +115,28 @@ class DecoderTester {
public:
DecoderTester(Decoder* decoder)
: strict_(false),
- decoder_(decoder),
- decode_done_(false) {
+ decoder_(decoder) {
media::VideoFrame::CreateFrame(media::VideoFrame::RGB32,
kWidth, kHeight,
base::TimeDelta(),
base::TimeDelta(), &frame_);
EXPECT_TRUE(frame_.get());
+ decoder_->Initialize(frame_);
}
- void ReceivedMessage(ChromotingHostMessage* message) {
- if (message->has_update_stream_packet()) {
- EXPECT_TRUE(decoder_->PartialDecode(message));
- return;
- }
+ void Reset() {
+ rects_.clear();
+ update_rects_.clear();
+ }
- if (message->has_begin_update_stream()) {
- EXPECT_TRUE(decoder_->BeginDecode(
- frame_, &update_rects_,
- NewRunnableMethod(this, &DecoderTester::OnPartialDecodeDone),
- NewRunnableMethod(this, &DecoderTester::OnDecodeDone)));
- }
+ void ReceivedPacket(VideoPacket* packet) {
+ Decoder::DecodeResult result = decoder_->DecodePacket(packet);
+
+ ASSERT_NE(Decoder::DECODE_ERROR, result);
- if (message->has_end_update_stream()) {
- decoder_->EndDecode();
+ if (result == Decoder::DECODE_DONE) {
+ decoder_->GetUpdatedRects(&update_rects_);
}
- delete message;
}
void set_strict(bool strict) {
@@ -195,19 +151,16 @@ class DecoderTester {
rects_.insert(rects_.begin() + rects_.size(), rects, rects + count);
}
- bool decode_done() const { return decode_done_; }
- void reset_decode_done() { decode_done_ = false; }
-
- private:
- void OnPartialDecodeDone() {
+ void VerifyResults() {
if (!strict_)
return;
+ ASSERT_TRUE(capture_data_.get());
+
// Test the content of the update rect.
+ ASSERT_EQ(rects_.size(), update_rects_.size());
for (size_t i = 0; i < update_rects_.size(); ++i) {
- EXPECT_FALSE(rects_.empty());
- gfx::Rect rect = rects_.front();
- rects_.pop_front();
+ gfx::Rect rect = rects_[i];
EXPECT_EQ(rect, update_rects_[i]);
EXPECT_EQ(frame_->stride(0), capture_data_->data_planes().strides[0]);
@@ -226,29 +179,13 @@ class DecoderTester {
}
}
- void OnDecodeDone() {
- decode_done_ = true;
- if (!strict_)
- return;
-
- EXPECT_TRUE(capture_data_.get());
- for (int i = 0; i < DataPlanes::kPlaneCount; ++i) {
- if (!frame_->data(i) || !capture_data_->data_planes().data[i])
- continue;
- // TODO(hclam): HAndle YUV.
- int size = capture_data_->data_planes().strides[i] * kHeight;
- EXPECT_EQ(0, memcmp(capture_data_->data_planes().data[i],
- frame_->data(i), size));
- }
- }
-
+ private:
bool strict_;
std::deque<gfx::Rect> rects_;
UpdatedRects update_rects_;
Decoder* decoder_;
scoped_refptr<media::VideoFrame> frame_;
scoped_refptr<CaptureData> capture_data_;
- bool decode_done_;
DISALLOW_COPY_AND_ASSIGN(DecoderTester);
};
@@ -257,10 +194,8 @@ class DecoderTester {
// message to other subprograms for validaton.
class EncoderTester {
public:
- EncoderTester(EncoderMessageTester* message_tester,
- EncoderStateTester* state_tester)
+ EncoderTester(EncoderMessageTester* message_tester)
: message_tester_(message_tester),
- state_tester_(state_tester),
decoder_tester_(NULL),
data_available_(0) {
}
@@ -269,32 +204,16 @@ class EncoderTester {
EXPECT_GT(data_available_, 0);
}
- void DataAvailable(ChromotingHostMessage* message,
- Encoder::EncodingState state) {
+ void DataAvailable(VideoPacket *packet) {
++data_available_;
- message_tester_->ReceivedMessage(message);
- state_tester_->ReceivedState(state);
+ message_tester_->ReceivedPacket(packet);
// Send the message to the DecoderTester.
if (decoder_tester_) {
- if (state & Encoder::EncodingStarting) {
- ChromotingHostMessage* begin_update = new ChromotingHostMessage();
- begin_update->mutable_begin_update_stream();
- decoder_tester_->ReceivedMessage(begin_update);
- }
-
- if (state & Encoder::EncodingInProgress) {
- decoder_tester_->ReceivedMessage(message);
- }
-
- if (state & Encoder::EncodingEnded) {
- ChromotingHostMessage* end_update = new ChromotingHostMessage();
- end_update->mutable_end_update_stream();
- decoder_tester_->ReceivedMessage(end_update);
- }
- } else {
- delete message;
+ decoder_tester_->ReceivedPacket(packet);
}
+
+ delete packet;
}
void AddRects(const gfx::Rect* rects, int count) {
@@ -307,17 +226,16 @@ class EncoderTester {
private:
EncoderMessageTester* message_tester_;
- EncoderStateTester* state_tester_;
DecoderTester* decoder_tester_;
int data_available_;
DISALLOW_COPY_AND_ASSIGN(EncoderTester);
};
-scoped_refptr<CaptureData> PrepareEncodeData(PixelFormat format,
+scoped_refptr<CaptureData> PrepareEncodeData(media::VideoFrame::Format format,
uint8** memory) {
// TODO(hclam): Support also YUV format.
- CHECK(format == PIXEL_FORMAT_RGB32);
+ CHECK_EQ(format, media::VideoFrame::RGB32);
int size = kWidth * kHeight * kBytesPerPixel;
*memory = new uint8[size];
@@ -355,12 +273,11 @@ void TestEncoder(Encoder* encoder, bool strict) {
EncoderMessageTester message_tester;
message_tester.set_strict(strict);
- EncoderStateTester state_tester;
- EncoderTester tester(&message_tester, &state_tester);
+ EncoderTester tester(&message_tester);
uint8* memory;
scoped_refptr<CaptureData> data =
- PrepareEncodeData(PIXEL_FORMAT_RGB32, &memory);
+ PrepareEncodeData(media::VideoFrame::RGB32, &memory);
TestEncodingRects(encoder, &tester, data, kTestRects, 1);
TestEncodingRects(encoder, &tester, data, kTestRects + 1, 1);
@@ -380,7 +297,6 @@ static void TestEncodingRects(Encoder* encoder,
}
encoder_tester->AddRects(rects, count);
decoder_tester->AddRects(rects, count);
- decoder_tester->reset_decode_done();
// Generate random data for the updated rects.
srand(0);
@@ -400,19 +316,19 @@ static void TestEncodingRects(Encoder* encoder,
encoder->Encode(data, true,
NewCallback(encoder_tester, &EncoderTester::DataAvailable));
- EXPECT_TRUE(decoder_tester->decode_done());
+ decoder_tester->VerifyResults();
+ decoder_tester->Reset();
}
void TestEncoderDecoder(Encoder* encoder, Decoder* decoder, bool strict) {
EncoderMessageTester message_tester;
message_tester.set_strict(strict);
- EncoderStateTester state_tester;
- EncoderTester encoder_tester(&message_tester, &state_tester);
+ EncoderTester encoder_tester(&message_tester);
uint8* memory;
scoped_refptr<CaptureData> data =
- PrepareEncodeData(PIXEL_FORMAT_RGB32, &memory);
+ PrepareEncodeData(media::VideoFrame::RGB32, &memory);
DecoderTester decoder_tester(decoder);
decoder_tester.set_strict(strict);
decoder_tester.set_capture_data(data);
« no previous file with comments | « remoting/base/codec_test.h ('k') | remoting/base/encode_decode_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698