Index: media/filters/fake_video_decoder_unittest.cc |
=================================================================== |
--- media/filters/fake_video_decoder_unittest.cc (revision 277175) |
+++ media/filters/fake_video_decoder_unittest.cc (working copy) |
@@ -14,27 +14,18 @@ |
namespace media { |
+static const int kDecodingDelay = 9; |
static const int kTotalBuffers = 12; |
static const int kDurationMs = 30; |
-struct FakeVideoDecoderTestParams { |
- FakeVideoDecoderTestParams(int decoding_delay, int max_decode_requests) |
- : decoding_delay(decoding_delay), |
- max_decode_requests(max_decode_requests) {} |
- int decoding_delay; |
- int max_decode_requests; |
-}; |
- |
-class FakeVideoDecoderTest |
- : public testing::Test, |
- public testing::WithParamInterface<FakeVideoDecoderTestParams> { |
+class FakeVideoDecoderTest : public testing::Test, |
+ public testing::WithParamInterface<int> { |
public: |
FakeVideoDecoderTest() |
- : decoder_(new FakeVideoDecoder(GetParam().decoding_delay, |
- GetParam().max_decode_requests)), |
+ : decoder_(new FakeVideoDecoder(kDecodingDelay, false, GetParam())), |
num_input_buffers_(0), |
num_decoded_frames_(0), |
- last_decode_status_(VideoDecoder::kOk), |
+ last_decode_status_(VideoDecoder::kNotEnoughData), |
pending_decode_requests_(0), |
is_reset_pending_(false) {} |
@@ -43,9 +34,7 @@ |
} |
void InitializeWithConfig(const VideoDecoderConfig& config) { |
- decoder_->Initialize( |
- config, false, NewExpectedStatusCB(PIPELINE_OK), |
- base::Bind(&FakeVideoDecoderTest::FrameReady, base::Unretained(this))); |
+ decoder_->Initialize(config, false, NewExpectedStatusCB(PIPELINE_OK)); |
message_loop_.RunUntilIdle(); |
current_config_ = config; |
} |
@@ -64,16 +53,16 @@ |
message_loop_.RunUntilIdle(); |
} |
- // Callback for VideoDecoder::Decode(). |
- void DecodeDone(VideoDecoder::Status status) { |
+ // Callback for VideoDecoder::Read(). |
+ void FrameReady(VideoDecoder::Status status, |
+ const scoped_refptr<VideoFrame>& frame) { |
DCHECK_GT(pending_decode_requests_, 0); |
+ |
--pending_decode_requests_; |
last_decode_status_ = status; |
- } |
- |
- void FrameReady(const scoped_refptr<VideoFrame>& frame) { |
last_decoded_frame_ = frame; |
- if (!frame->end_of_stream()) |
+ |
+ if (frame && !frame->end_of_stream()) |
num_decoded_frames_++; |
} |
@@ -98,7 +87,7 @@ |
break; |
case NOT_ENOUGH_DATA: |
EXPECT_EQ(0, pending_decode_requests_); |
- ASSERT_EQ(VideoDecoder::kOk, last_decode_status_); |
+ ASSERT_EQ(VideoDecoder::kNotEnoughData, last_decode_status_); |
ASSERT_FALSE(last_decoded_frame_); |
break; |
case ABORTED: |
@@ -132,15 +121,15 @@ |
decoder_->Decode( |
buffer, |
- base::Bind(&FakeVideoDecoderTest::DecodeDone, base::Unretained(this))); |
+ base::Bind(&FakeVideoDecoderTest::FrameReady, base::Unretained(this))); |
message_loop_.RunUntilIdle(); |
} |
void ReadOneFrame() { |
- last_decoded_frame_ = NULL; |
do { |
Decode(); |
- } while (!last_decoded_frame_ && pending_decode_requests_ == 0); |
+ } while (last_decode_status_ == VideoDecoder::kNotEnoughData && |
+ pending_decode_requests_ == 0); |
} |
void ReadUntilEOS() { |
@@ -157,14 +146,14 @@ |
ExpectReadResult(PENDING); |
} |
- void SatisfyDecodeAndExpect(CallbackResult result) { |
+ void SatisfyReadAndExpect(CallbackResult result) { |
decoder_->SatisfyDecode(); |
message_loop_.RunUntilIdle(); |
ExpectReadResult(result); |
} |
void SatisfyRead() { |
- SatisfyDecodeAndExpect(OK); |
+ SatisfyReadAndExpect(OK); |
} |
// Callback for VideoDecoder::Reset(). |
@@ -234,12 +223,10 @@ |
INSTANTIATE_TEST_CASE_P(NoParallelDecode, |
FakeVideoDecoderTest, |
- ::testing::Values(FakeVideoDecoderTestParams(9, 1), |
- FakeVideoDecoderTestParams(0, 1))); |
+ ::testing::Values(1)); |
INSTANTIATE_TEST_CASE_P(ParallelDecode, |
FakeVideoDecoderTest, |
- ::testing::Values(FakeVideoDecoderTestParams(9, 3), |
- FakeVideoDecoderTestParams(0, 3))); |
+ ::testing::Values(3)); |
TEST_P(FakeVideoDecoderTest, Initialize) { |
Initialize(); |
@@ -256,13 +243,12 @@ |
while (num_input_buffers_ < kTotalBuffers) { |
ReadOneFrame(); |
- EXPECT_EQ(num_input_buffers_, |
- num_decoded_frames_ + GetParam().decoding_delay); |
+ EXPECT_EQ(num_input_buffers_, num_decoded_frames_ + kDecodingDelay); |
} |
} |
TEST_P(FakeVideoDecoderTest, Read_ZeroDelay) { |
- decoder_.reset(new FakeVideoDecoder(0, 1)); |
+ decoder_.reset(new FakeVideoDecoder(0, false, 1)); |
Initialize(); |
while (num_input_buffers_ < kTotalBuffers) { |
@@ -272,40 +258,34 @@ |
} |
TEST_P(FakeVideoDecoderTest, Read_Pending_NotEnoughData) { |
- if (GetParam().decoding_delay < 1) |
- return; |
- |
Initialize(); |
decoder_->HoldDecode(); |
ReadOneFrame(); |
ExpectReadResult(PENDING); |
- SatisfyDecodeAndExpect(NOT_ENOUGH_DATA); |
- |
- // Verify that FrameReady() hasn't been called. |
- EXPECT_FALSE(last_decoded_frame_); |
+ SatisfyReadAndExpect(NOT_ENOUGH_DATA); |
} |
TEST_P(FakeVideoDecoderTest, Read_Pending_OK) { |
Initialize(); |
+ ReadOneFrame(); |
EnterPendingReadState(); |
- SatisfyDecodeAndExpect(OK); |
+ SatisfyReadAndExpect(OK); |
} |
TEST_P(FakeVideoDecoderTest, Read_Parallel) { |
- if (GetParam().max_decode_requests < 2) |
+ int max_decode_requests = GetParam(); |
+ if (max_decode_requests < 2) |
return; |
Initialize(); |
+ ReadOneFrame(); |
decoder_->HoldDecode(); |
- for (int i = 0; i < GetParam().max_decode_requests; ++i) { |
+ for (int i = 0; i < max_decode_requests; ++i) { |
ReadOneFrame(); |
ExpectReadResult(PENDING); |
} |
- EXPECT_EQ(GetParam().max_decode_requests, pending_decode_requests_); |
- SatisfyDecodeAndExpect( |
- GetParam().max_decode_requests > GetParam().decoding_delay |
- ? OK |
- : NOT_ENOUGH_DATA); |
+ EXPECT_EQ(max_decode_requests, pending_decode_requests_); |
+ SatisfyReadAndExpect(OK); |
} |
TEST_P(FakeVideoDecoderTest, ReadWithHold_DecodingDelay) { |
@@ -323,7 +303,7 @@ |
} |
DCHECK_EQ(num_decoded_frames_, 1); |
- DCHECK_EQ(num_decodes_satisfied, GetParam().decoding_delay + 1); |
+ DCHECK_EQ(num_decodes_satisfied, kDecodingDelay + 1); |
} |
TEST_P(FakeVideoDecoderTest, Reinitialize) { |
@@ -336,9 +316,6 @@ |
// Reinitializing the decoder during the middle of the decoding process can |
// cause dropped frames. |
TEST_P(FakeVideoDecoderTest, Reinitialize_FrameDropped) { |
- if (GetParam().decoding_delay < 1) |
- return; |
- |
Initialize(); |
ReadOneFrame(); |
Initialize(); |
@@ -356,7 +333,7 @@ |
Initialize(); |
EnterPendingReadState(); |
ResetAndExpect(PENDING); |
- SatisfyDecodeAndExpect(ABORTED); |
+ SatisfyReadAndExpect(ABORTED); |
} |
TEST_P(FakeVideoDecoderTest, Reset_Pending) { |
@@ -369,7 +346,7 @@ |
Initialize(); |
EnterPendingReadState(); |
EnterPendingResetState(); |
- SatisfyDecodeAndExpect(ABORTED); |
+ SatisfyReadAndExpect(ABORTED); |
SatisfyReset(); |
} |
@@ -404,4 +381,16 @@ |
Stop(); |
} |
+TEST_P(FakeVideoDecoderTest, GetDecodeOutput) { |
+ decoder_.reset(new FakeVideoDecoder(kDecodingDelay, true, 1)); |
+ Initialize(); |
+ |
+ while (num_input_buffers_ < kTotalBuffers) { |
+ ReadOneFrame(); |
+ while (decoder_->GetDecodeOutput()) |
+ ++num_decoded_frames_; |
+ EXPECT_EQ(num_input_buffers_, num_decoded_frames_); |
+ } |
+} |
+ |
} // namespace media |