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

Unified Diff: media/omx/omx_codec_unittest.cc

Issue 7066071: Removing defunct OpenMAX code. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src
Patch Set: removed tab Created 9 years, 7 months 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 | « media/omx/mock_omx.cc ('k') | media/omx/omx_configurator.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/omx/omx_codec_unittest.cc
diff --git a/media/omx/omx_codec_unittest.cc b/media/omx/omx_codec_unittest.cc
deleted file mode 100644
index 06fa31e593887a0326839c4b7fa33d1419f5963f..0000000000000000000000000000000000000000
--- a/media/omx/omx_codec_unittest.cc
+++ /dev/null
@@ -1,483 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#define _CRT_SECURE_NO_WARNINGS
-
-#if 0
-#include <deque>
-
-#include "base/callback.h"
-#include "base/message_loop.h"
-#include "base/task.h"
-#include "media/base/buffers.h"
-#include "media/base/mock_filters.h"
-#include "media/base/mock_task.h"
-#include "media/ffmpeg/ffmpeg_common.h"
-#include "media/video/omx_video_decode_engine.h"
-#include "media/video/video_decode_engine.h"
-#include "media/omx/mock_omx.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using ::testing::_;
-using ::testing::DoAll;
-using ::testing::InSequence;
-using ::testing::IsNull;
-using ::testing::NotNull;
-using ::testing::Return;
-using ::testing::SaveArg;
-using ::testing::SetArgumentPointee;
-using ::testing::StrEq;
-using ::testing::StrictMock;
-
-namespace media {
-
-static const int kBufferCount = 3;
-static const int kBufferSize = 4096;
-static const char* kComponentName = "OMX.google.video_decoder.avc";
-
-ACTION(ReturnComponentName) {
- strcpy(((char**)arg2)[0], kComponentName);
-}
-
-ACTION(GetHandle) {
- *arg0 = MockOmx::get()->component();
- MockOmx::get()->component()->pApplicationPrivate = arg2;
- memcpy(MockOmx::get()->callbacks(), arg3, sizeof(OMX_CALLBACKTYPE));
-}
-
-ACTION(GetParameterVideoInit) {
- ((OMX_PORT_PARAM_TYPE*)arg1)->nStartPortNumber = 0;
-}
-
-ACTION(GetParameterPortDefinition) {
- OMX_PARAM_PORTDEFINITIONTYPE* port_format =
- (OMX_PARAM_PORTDEFINITIONTYPE*)arg1;
- CHECK(port_format->nPortIndex == 0 || port_format->nPortIndex == 1);
- if (port_format->nPortIndex == 0)
- port_format->eDir = OMX_DirInput;
- else
- port_format->eDir = OMX_DirOutput;
- port_format->nBufferCountMin = kBufferCount;
- port_format->nBufferCountActual = kBufferCount;
- port_format->nBufferSize = kBufferSize;
-}
-
-ACTION(AllocateBuffer) {
- *arg0 = new OMX_BUFFERHEADERTYPE();
- memset(*arg0, 0, sizeof(OMX_BUFFERHEADERTYPE));
- (*arg0)->nAllocLen = arg3;
- (*arg0)->pBuffer = new uint8[arg3];
- (*arg0)->nOutputPortIndex = 1;
- (*arg0)->nInputPortIndex = OMX_ALL;
-}
-
-ACTION(UseBuffer) {
- *arg0 = new OMX_BUFFERHEADERTYPE();
- memset(*arg0, 0, sizeof(OMX_BUFFERHEADERTYPE));
- (*arg0)->nOutputPortIndex = OMX_ALL;
- (*arg0)->nInputPortIndex = 0;
-}
-
-ACTION(FreeBuffer) {
- if (1 == arg1->nOutputPortIndex)
- delete [] arg1->pBuffer;
- delete arg1;
-}
-
-ACTION_P3(SendEvent, event, data1, data2) {
- (*MockOmx::get()->callbacks()->EventHandler)(
- MockOmx::get()->component(),
- MockOmx::get()->component()->pApplicationPrivate,
- event, static_cast<OMX_U32>(data1), static_cast<OMX_U32>(data2), NULL);
-}
-
-ACTION_P(EmptyBufferDone, output_pool_ptr) {
- (*MockOmx::get()->callbacks()->EmptyBufferDone)(
- MockOmx::get()->component(),
- MockOmx::get()->component()->pApplicationPrivate,
- arg0);
- OMX_BUFFERHEADERTYPE* out_buffer = output_pool_ptr->front();
- output_pool_ptr->pop_front();
- if (arg0->nFlags & OMX_BUFFERFLAG_EOS)
- out_buffer->nFlags |= OMX_BUFFERFLAG_EOS;
- out_buffer->nFilledLen = kBufferSize;
- (*MockOmx::get()->callbacks()->FillBufferDone)(
- MockOmx::get()->component(),
- MockOmx::get()->component()->pApplicationPrivate,
- out_buffer);
-}
-
-ACTION_P(EnqueueOutputBuffer, output_pool_ptr) {
- output_pool_ptr->push_back(arg0);
-}
-
-ACTION(FillEosBuffer) {
- arg0->nFlags = OMX_BUFFERFLAG_EOS;
- arg0->nFilledLen = 0;
- (*MockOmx::get()->callbacks()->FillBufferDone)(
- MockOmx::get()->component(),
- MockOmx::get()->component()->pApplicationPrivate,
- arg0);
-}
-
-class TestBuffer : public media::Buffer {
- public:
- TestBuffer() : size_(0), data_(NULL) { }
- explicit TestBuffer(int size) : size_(size) {
- if (size)
- data_.reset(new uint8[size]);
- else
- data_.reset(NULL);
- }
- virtual const uint8* GetData() const {
- return data_.get();
- }
- virtual size_t GetDataSize() const {
- return size_;
- }
- private:
- virtual ~TestBuffer() { }
-
- int size_;
- scoped_array<uint8> data_;
- DISALLOW_COPY_AND_ASSIGN(TestBuffer);
-};
-
-class OmxCodecTest : public testing::Test {
- public:
- OmxCodecTest ()
- : input_buffer_count_(0),
- got_eos_(false),
- omx_engine_(new OmxVideoDecodeEngine()) {
- av_stream_.codec = &av_codec_context_;
- av_codec_context_.width = 16;
- av_codec_context_.height = 16;
- feed_done_cb_ =
- NewCallback(this, &OmxCodecTest::EmptyBufferDoneCallback);
- decode_done_cb_ =
- NewCallback(this, &OmxCodecTest::FillBufferDoneCallback);
- }
-
- ~OmxCodecTest() {
- }
-
- protected:
- void ExpectSettings() {
- // Return the component name.
- EXPECT_CALL(*MockOmx::get(), GetComponentsOfRole(_, _, IsNull()))
- .WillOnce(DoAll(SetArgumentPointee<1>(1),
- Return(OMX_ErrorNone)));
- EXPECT_CALL(*MockOmx::get(), GetComponentsOfRole(_, _, NotNull()))
- .WillOnce(DoAll(SetArgumentPointee<1>(1),
- ReturnComponentName(),
- Return(OMX_ErrorNone)));
-
- // Handle get parameter calls.
- EXPECT_CALL(*MockOmx::get(),
- GetParameter(OMX_IndexParamVideoInit, NotNull()))
- .WillRepeatedly(DoAll(GetParameterVideoInit(), Return(OMX_ErrorNone)));
- EXPECT_CALL(*MockOmx::get(),
- GetParameter(OMX_IndexParamPortDefinition, NotNull()))
- .WillRepeatedly(DoAll(GetParameterPortDefinition(),
- Return(OMX_ErrorNone)));
-
- // Ignore all set parameter calls.
- EXPECT_CALL(*MockOmx::get(), SetParameter(_, _))
- .WillRepeatedly(Return(OMX_ErrorNone));
- }
-
- void ExpectToLoaded() {
- InSequence s;
-
- // Expect initialization.
- EXPECT_CALL(*MockOmx::get(), Init())
- .WillOnce(Return(OMX_ErrorNone));
-
- // Return the handle.
- EXPECT_CALL(*MockOmx::get(),
- GetHandle(NotNull(), StrEq(kComponentName),
- NotNull(), NotNull()))
- .WillOnce(DoAll(GetHandle(),
- Return(OMX_ErrorNone)));
- }
-
- void ExpectLoadedToIdle() {
- InSequence s;
-
- // Expect transition to idle.
- EXPECT_CALL(*MockOmx::get(),
- SendCommand(OMX_CommandStateSet, OMX_StateIdle, _))
- .WillOnce(
- DoAll(
- SendEvent(OMX_EventCmdComplete, OMX_CommandStateSet,
- OMX_StateIdle),
- Return(OMX_ErrorNone)));
-
- // Expect allocation of buffers.
- EXPECT_CALL(*MockOmx::get(),
- UseBuffer(NotNull(), 0, NotNull(), kBufferSize, _))
- .Times(kBufferCount)
- .WillRepeatedly(DoAll(UseBuffer(), Return(OMX_ErrorNone)));
-
- // 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)));
- }
-
- void ExpectToExecuting() {
- InSequence s;
-
- // Expect transition to executing.
- EXPECT_CALL(*MockOmx::get(),
- SendCommand(OMX_CommandStateSet, OMX_StateExecuting, _))
- .WillOnce(DoAll(
- SendEvent(OMX_EventCmdComplete, OMX_CommandStateSet,
- OMX_StateExecuting),
- Return(OMX_ErrorNone)));
-
- // Expect initial FillThisBuffer() calls.
- EXPECT_CALL(*MockOmx::get(), FillThisBuffer(NotNull()))
- .Times(kBufferCount)
- .WillRepeatedly(DoAll(EnqueueOutputBuffer(&output_pool_),
- Return(OMX_ErrorNone)));
- }
-
- void ExpectToIdle() {
- // Expect going to idle
- EXPECT_CALL(*MockOmx::get(),
- SendCommand(OMX_CommandStateSet, OMX_StateIdle, _))
- .WillOnce(DoAll(
- SendEvent(OMX_EventCmdComplete, OMX_CommandStateSet, OMX_StateIdle),
- Return(OMX_ErrorNone)));
- }
-
- void ExpectIdleToLoaded() {
- InSequence s;
-
- // Expect transition to loaded.
- EXPECT_CALL(*MockOmx::get(),
- SendCommand(OMX_CommandStateSet, OMX_StateLoaded, _))
- .WillOnce(DoAll(
- SendEvent(OMX_EventCmdComplete, OMX_CommandStateSet,
- OMX_StateLoaded),
- Return(OMX_ErrorNone)));
-
- // Expect free buffer for input port.
- EXPECT_CALL(*MockOmx::get(), FreeBuffer(0, NotNull()))
- .Times(kBufferCount)
- .WillRepeatedly(DoAll(FreeBuffer(), Return(OMX_ErrorNone)));
-
- EXPECT_CALL(*MockOmx::get(), FreeBuffer(1, NotNull()))
- .Times(kBufferCount)
- .WillRepeatedly(DoAll(FreeBuffer(), Return(OMX_ErrorNone)));
- }
-
- void ExpectToEmpty() {
- InSequence s;
-
- EXPECT_CALL(*MockOmx::get(), FreeHandle(MockOmx::get()->component()))
- .WillOnce(Return(OMX_ErrorNone));
- EXPECT_CALL(*MockOmx::get(), Deinit())
- .WillOnce(Return(OMX_ErrorNone));
- }
-
- // TODO(hclam): Make a more generic about when to stop.
- void ExpectStart() {
- ExpectToLoaded();
- ExpectLoadedToIdle();
- ExpectToExecuting();
- EXPECT_CALL(init_done_cb_task_, Run());
- }
-
- void ExpectStop() {
- EXPECT_CALL(stop_task_, Run());
- ExpectToIdle();
- ExpectIdleToLoaded();
- ExpectToEmpty();
- }
-
- void EmptyBufferDoneCallback(scoped_refptr<Buffer> buffer) {
- if (buffer.get()) {
- input_units_.push_back(buffer);
- } else {
- input_buffer_count_++;
- scoped_refptr<Buffer> buffer_ref = new TestBuffer(input_buffer_count_);
- input_units_.push_back(buffer_ref);
- }
- }
-
- void FillBufferDoneCallback(scoped_refptr<VideoFrame> frame) {
- output_units_.push_back(frame);
- if (frame->IsEndOfStream())
- got_eos_ = true;
- }
-
- void MakeEmptyBufferRequest() {
- scoped_refptr<Buffer> buffer = input_units_.front();
- input_units_.pop_front();
- omx_engine_->EmptyThisBuffer(buffer);
- }
-
- void SendEOSInputBuffer() {
- input_units_.pop_front();
- scoped_refptr<Buffer> buffer_ref = new TestBuffer();
- input_units_.push_front(buffer_ref);
- EXPECT_CALL(*MockOmx::get(), EmptyThisBuffer(NotNull()))
- .WillOnce(DoAll(EmptyBufferDone(&output_pool_), Return(OMX_ErrorNone)))
- .RetiresOnSaturation();
- MakeEmptyBufferRequest();
- message_loop_.RunAllPending();
- }
-
- int input_buffer_count_;
-
- std::deque<scoped_refptr<Buffer> > input_units_;
- std::deque<scoped_refptr<VideoFrame> > output_units_;
- std::deque<OMX_BUFFERHEADERTYPE*> fill_this_buffer_received_;
- std::deque<OMX_BUFFERHEADERTYPE*> output_pool_;
-
- MockOmx mock_omx_;
-
- bool got_eos_;
- MessageLoop message_loop_;
- scoped_refptr<OmxVideoDecodeEngine> omx_engine_;
-
- AVStream av_stream_;
- AVCodecContext av_codec_context_;
-
- VideoDecodeEngine::ProduceVideoSampleCallback* feed_done_cb_;
- VideoDecodeEngine::ConsumeVideoFrameCallback* decode_done_cb_;
- TaskMocker init_done_cb_task_;
-
- TaskMocker stop_task_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(OmxCodecTest);
-};
-
-TEST_F(OmxCodecTest, SimpleStartAndStop) {
- ExpectSettings();
- ExpectStart();
- omx_engine_->Initialize(&message_loop_,
- &av_stream_,
- feed_done_cb_,
- decode_done_cb_,
- init_done_cb_task_.CreateTask());
- message_loop_.RunAllPending();
-
- EXPECT_EQ(kBufferCount, input_buffer_count_);
- EXPECT_EQ(VideoDecodeEngine::kNormal, omx_engine_->state());
-
- ExpectStop();
- omx_engine_->Stop(stop_task_.CreateTask());
- message_loop_.RunAllPending();
-}
-
-TEST_F(OmxCodecTest, NormalFlow) {
- ExpectSettings();
- ExpectStart();
- omx_engine_->Initialize(&message_loop_,
- &av_stream_,
- feed_done_cb_,
- decode_done_cb_,
- init_done_cb_task_.CreateTask());
- message_loop_.RunAllPending();
-
- EXPECT_EQ(kBufferCount, input_buffer_count_);
- EXPECT_EQ(VideoDecodeEngine::kNormal, omx_engine_->state());
-
- // Make emptybuffer requests.
- EXPECT_EQ(0u, output_units_.size());
- int count = output_pool_.size();
- for (int i = 0; i < kBufferCount; ++i) {
- // Give input buffers to OmxVideoDecodeEngine. OmxVideoDecodeEngine will
- // make a new FillThisBuffer() call for each read.
- EXPECT_CALL(*MockOmx::get(), EmptyThisBuffer(NotNull()))
- .WillOnce(DoAll(EmptyBufferDone(&output_pool_), Return(OMX_ErrorNone)))
- .RetiresOnSaturation();
- EXPECT_CALL(*MockOmx::get(), FillThisBuffer(NotNull()))
- .WillOnce(DoAll(EnqueueOutputBuffer(&output_pool_),
- Return(OMX_ErrorNone)))
- .RetiresOnSaturation();
- MakeEmptyBufferRequest();
- }
- message_loop_.RunAllPending();
- EXPECT_EQ(kBufferCount, static_cast<int>(input_units_.size()));
- EXPECT_EQ(kBufferCount, static_cast<int>(output_units_.size()));
- EXPECT_EQ(count, static_cast<int>(output_pool_.size()));
- output_units_.clear();
-
- // Send EndOfStream, expect eos flag.
- SendEOSInputBuffer();
- EXPECT_EQ(kBufferCount - 1, static_cast<int>(input_units_.size()));
- EXPECT_EQ(1, static_cast<int>(output_units_.size()));
- EXPECT_EQ(count - 1, static_cast<int>(output_pool_.size()));
- EXPECT_TRUE(got_eos_);
-
- // Shutdown.
- ExpectStop();
- omx_engine_->Stop(stop_task_.CreateTask());
- message_loop_.RunAllPending();
-}
-
-TEST_F(OmxCodecTest, RecycleInputBuffers) {
- ExpectSettings();
- ExpectStart();
- omx_engine_->Initialize(&message_loop_,
- &av_stream_,
- feed_done_cb_,
- decode_done_cb_,
- init_done_cb_task_.CreateTask());
- message_loop_.RunAllPending();
-
- EXPECT_EQ(kBufferCount, input_buffer_count_);
- EXPECT_EQ(VideoDecodeEngine::kNormal, omx_engine_->state());
-
- // Make emptybuffer requests, also recycle input buffers
- EXPECT_EQ(0u, output_units_.size());
- int count = output_pool_.size();
- int repeat_count = kBufferCount * 2;
- for (int i = 0; i < repeat_count; ++i) {
- // Give input buffers to OmxVideoDecodeEngine. OmxVideoDecodeEngine will
- // make a new FillThisBuffer() call for each read.
- EXPECT_CALL(*MockOmx::get(), EmptyThisBuffer(NotNull()))
- .WillOnce(DoAll(EmptyBufferDone(&output_pool_), Return(OMX_ErrorNone)))
- .RetiresOnSaturation();
- EXPECT_CALL(*MockOmx::get(), FillThisBuffer(NotNull()))
- .WillOnce(DoAll(EnqueueOutputBuffer(&output_pool_),
- Return(OMX_ErrorNone)))
- .RetiresOnSaturation();
- MakeEmptyBufferRequest();
- message_loop_.RunAllPending();
- CHECK(kBufferCount == static_cast<int>(input_units_.size()));
- CHECK(((i % kBufferCount) + 1) ==
- static_cast<int>(input_units_.back()->GetDataSize()));
- }
- message_loop_.RunAllPending();
- EXPECT_EQ(kBufferCount, static_cast<int>(input_units_.size()));
- EXPECT_EQ(repeat_count, static_cast<int>(output_units_.size()));
- EXPECT_EQ(count, static_cast<int>(output_pool_.size()));
- output_units_.clear();
-
- // Send EndOfStream, expect eos flag.
- SendEOSInputBuffer();
- EXPECT_EQ(kBufferCount - 1, static_cast<int>(input_units_.size()));
- EXPECT_EQ(1, static_cast<int>(output_units_.size()));
- EXPECT_EQ(count - 1, static_cast<int>(output_pool_.size()));
- EXPECT_TRUE(got_eos_);
-
- // Shutdown.
- ExpectStop();
- omx_engine_->Stop(stop_task_.CreateTask());
- message_loop_.RunAllPending();
-}
-
-// TODO(hclam): Add test case for dynamic port config.
-// TODO(hclam): Create a more complicated test case so that read
-// requests and reply from FillThisBuffer() arrives out of order.
-
-} // namespace media
-#endif
« no previous file with comments | « media/omx/mock_omx.cc ('k') | media/omx/omx_configurator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698