Index: media/omx/omx_codec_unittest.cc |
diff --git a/media/omx/omx_codec_unittest.cc b/media/omx/omx_codec_unittest.cc |
index eb4faccc1df44eb5a6e8bd58d2d0588e75ce83f2..adf81322c74aaa06d6b5c62487ac8b969932c096 100644 |
--- a/media/omx/omx_codec_unittest.cc |
+++ b/media/omx/omx_codec_unittest.cc |
@@ -115,26 +115,11 @@ class MockOmxConfigurator : public OmxConfigurator { |
OMX_PARAM_PORTDEFINITIONTYPE* output_def)); |
}; |
-class MockOmxOutputSink : public OmxOutputSink { |
- public: |
- MOCK_CONST_METHOD0(ProvidesEGLImages, bool()); |
- MOCK_METHOD3(AllocateEGLImages, |
- bool(int width, int height, |
- std::vector<EGLImageKHR>* images)); |
- MOCK_METHOD1(ReleaseEGLImages, |
- void(const std::vector<EGLImageKHR>& images)); |
- MOCK_METHOD2(UseThisBuffer, void(int buffer_id, |
- OMX_BUFFERHEADERTYPE* buffer)); |
- MOCK_METHOD1(StopUsingThisBuffer, void(int buffer_id)); |
- MOCK_METHOD2(BufferReady, void(int buffer_id, |
- BufferUsedCallback* callback)); |
-}; |
- |
class OmxCodecTest : public testing::Test { |
public: |
OmxCodecTest () |
: omx_codec_(new OmxCodec(&message_loop_)) { |
- omx_codec_->Setup(&mock_configurator_, &mock_output_sink_); |
+ omx_codec_->Setup(&mock_configurator_); |
} |
~OmxCodecTest() { |
@@ -206,20 +191,11 @@ class OmxCodecTest : public testing::Test { |
.Times(kBufferCount) |
.WillRepeatedly(DoAll(UseBuffer(), Return(OMX_ErrorNone))); |
- // Don't support EGL images in this case. |
- EXPECT_CALL(mock_output_sink_, ProvidesEGLImages()) |
- .WillOnce(Return(false)); |
- |
// Expect allocation of output buffers and send command complete. |
EXPECT_CALL(*MockOmx::get(), |
AllocateBuffer(NotNull(), 1, IsNull(), kBufferSize)) |
.Times(kBufferCount) |
.WillRepeatedly(DoAll(AllocateBuffer(), Return(OMX_ErrorNone))); |
- |
- // The allocate output buffers will then be passed to output sink. |
- for (int i = 0; i < kBufferCount; ++i) { |
- EXPECT_CALL(mock_output_sink_, UseThisBuffer(i, _)); |
- } |
} |
void ExpectToExecuting() { |
@@ -262,18 +238,9 @@ class OmxCodecTest : public testing::Test { |
.Times(kBufferCount) |
.WillRepeatedly(DoAll(FreeBuffer(), Return(OMX_ErrorNone))); |
- // Expect free output buffer. |
- for (int i = 0; i < kBufferCount; ++i) { |
- EXPECT_CALL(mock_output_sink_, StopUsingThisBuffer(i)); |
- } |
- |
EXPECT_CALL(*MockOmx::get(), FreeBuffer(1, NotNull())) |
.Times(kBufferCount) |
.WillRepeatedly(DoAll(FreeBuffer(), Return(OMX_ErrorNone))); |
- |
- // Report that the sink don't provide EGL images. |
- EXPECT_CALL(mock_output_sink_, ProvidesEGLImages()) |
- .WillOnce(Return(false)); |
} |
void ExpectToEmpty() { |
@@ -298,9 +265,8 @@ class OmxCodecTest : public testing::Test { |
ExpectToEmpty(); |
} |
- void ReadCallback(int buffer_id, |
- OmxOutputSink::BufferUsedCallback* callback) { |
- output_units_.push_back(std::make_pair(buffer_id, callback)); |
+ void ReadCallback(OMX_BUFFERHEADERTYPE* buffer) { |
+ output_units_.push_back(buffer); |
} |
void MakeReadRequest() { |
@@ -318,13 +284,11 @@ class OmxCodecTest : public testing::Test { |
.RetiresOnSaturation(); |
} |
- typedef std::pair<int, OmxOutputSink::BufferUsedCallback*> OutputUnit; |
- std::deque<OutputUnit> output_units_; |
+ std::deque<OMX_BUFFERHEADERTYPE*> output_units_; |
std::deque<OMX_BUFFERHEADERTYPE*> fill_this_buffer_received_; |
MockOmx mock_omx_; |
MockOmxConfigurator mock_configurator_; |
- MockOmxOutputSink mock_output_sink_; |
MessageLoop message_loop_; |
scoped_refptr<OmxCodec> omx_codec_; |
@@ -358,6 +322,11 @@ TEST_F(OmxCodecTest, EndOfStream) { |
// buffers already. |
EXPECT_EQ(0u, output_units_.size()); |
for (int i = 0; i < kBufferCount; ++i) { |
+ // Give buffers back to OmxCodec. OmxCodec will make a new |
+ // FillThisBuffer() call for each read. |
+ EXPECT_CALL(*MockOmx::get(), FillThisBuffer(NotNull())) |
+ .WillOnce(DoAll(FillEosBuffer(), Return(OMX_ErrorNone))) |
+ .RetiresOnSaturation(); |
MakeReadRequest(); |
} |
message_loop_.RunAllPending(); |
@@ -365,19 +334,11 @@ TEST_F(OmxCodecTest, EndOfStream) { |
// Make sure buffers received are in order. |
for (int i = 0; i < kBufferCount; ++i) { |
- EXPECT_EQ(i, output_units_[i].first); |
- EXPECT_TRUE(output_units_[i].second != NULL); |
+ // TODO(jiesun): How to verify this now? |
+ // EXPECT_EQ(i, output_units_[i].first); |
+ EXPECT_TRUE(output_units_[i] != NULL); |
} |
- // Give buffers back to OmxCodec. OmxCodec will make a new |
- // FillThisBuffer() call for each read. |
- for (int i = kBufferCount - 1; i >= 0; --i) { |
- EXPECT_CALL(*MockOmx::get(), FillThisBuffer(NotNull())) |
- .WillOnce(DoAll(FillEosBuffer(), Return(OMX_ErrorNone))) |
- .RetiresOnSaturation(); |
- output_units_[i].second->Run(output_units_[i].first); |
- delete output_units_[i].second; |
- } |
output_units_.clear(); |
// Make some read requests and make sure end-of-stream buffer id |
@@ -390,8 +351,7 @@ TEST_F(OmxCodecTest, EndOfStream) { |
EXPECT_EQ(2 * kBufferCount, static_cast<int>(output_units_.size())); |
for (size_t i = 0; i <output_units_.size(); ++i) { |
- EXPECT_EQ(OmxCodec::kEosBuffer, output_units_[i].first); |
- EXPECT_EQ(NULL, output_units_[i].second); |
+ EXPECT_EQ(NULL, output_units_[i]); |
} |
output_units_.clear(); |
@@ -413,6 +373,7 @@ TEST_F(OmxCodecTest, OutputFlowControl) { |
// start. Reads issued to OmxCodec will be fulfilled now. |
EXPECT_EQ(0u, output_units_.size()); |
for (int i = 0; i < kBufferCount; ++i) { |
+ ExpectAndSaveFillThisBuffer(); |
MakeReadRequest(); |
} |
message_loop_.RunAllPending(); |
@@ -420,26 +381,22 @@ TEST_F(OmxCodecTest, OutputFlowControl) { |
// Make sure buffers received are in order. |
for (int i = 0; i < kBufferCount; ++i) { |
- EXPECT_EQ(i, output_units_[i].first); |
- EXPECT_TRUE(output_units_[i].second != NULL); |
+ EXPECT_TRUE(output_units_[i] != NULL); |
} |
- // Give the buffer back in reverse order. |
- for (int i = kBufferCount - 1; i >= 0; --i) { |
- ExpectAndSaveFillThisBuffer(); |
- output_units_[i].second->Run(output_units_[i].first); |
- delete output_units_[i].second; |
- } |
output_units_.clear(); |
// In each loop, perform the following actions: |
// 1. Make a read request to OmxCodec. |
// 2. Fake a response for FillBufferDone(). |
// 3. Expect read response received. |
- // 4. Give the buffer read back to OmxCodec. |
- // 5. Expect a FillThisBuffer() is called to OpenMAX. |
for (int i = 0; i < kBufferCount; ++i) { |
// 1. First make a read request. |
+ // Since a buffer is given back to OmxCodec. A FillThisBuffer() is called |
+ // to OmxCodec. |
+ EXPECT_CALL(*MockOmx::get(), FillThisBuffer(NotNull())) |
+ .WillOnce(Return(OMX_ErrorNone)) |
+ .RetiresOnSaturation(); |
MakeReadRequest(); |
// 2. Then fake a response from OpenMAX. |
@@ -460,17 +417,8 @@ TEST_F(OmxCodecTest, OutputFlowControl) { |
// receive one buffer now. Also expect the buffer id be received in |
// reverse order. |
EXPECT_EQ(1u, output_units_.size()); |
- EXPECT_EQ(kBufferCount - i - 1, output_units_.front().first); |
- |
- // 4. Since a buffer is given back to OmxCodec. A FillThisBuffer() is called |
- // to OmxCodec. |
- EXPECT_CALL(*MockOmx::get(), FillThisBuffer(NotNull())) |
- .WillOnce(Return(OMX_ErrorNone)) |
- .RetiresOnSaturation(); |
+ //EXPECT_EQ(kBufferCount - i - 1, output_units_.front().first); |
- // 5. Give this buffer back to OmxCodec. |
- output_units_.front().second->Run(output_units_.front().first); |
- delete output_units_.front().second; |
output_units_.pop_front(); |
// Make sure actions are completed. |