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

Unified Diff: content/common/gpu/media/omx_video_decode_accelerator_unittest.cc

Issue 7361010: Enable fire-and-forget Destroy of HW video decoder, and misc other improvements. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 9 years, 5 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
Index: content/common/gpu/media/omx_video_decode_accelerator_unittest.cc
diff --git a/content/common/gpu/media/omx_video_decode_accelerator_unittest.cc b/content/common/gpu/media/omx_video_decode_accelerator_unittest.cc
index 6a6d35ca579cd717ee421df6bb05a90a82069a64..5591f2f8e2513aa4e2294b1c57b891bccf32383e 100644
--- a/content/common/gpu/media/omx_video_decode_accelerator_unittest.cc
+++ b/content/common/gpu/media/omx_video_decode_accelerator_unittest.cc
@@ -421,7 +421,6 @@ class EglRenderingVDAClient : public VideoDecodeAccelerator::Client {
virtual void NotifyEndOfBitstreamBuffer(int32 bitstream_buffer_id);
virtual void NotifyFlushDone();
virtual void NotifyResetDone();
- virtual void NotifyDestroyDone();
virtual void NotifyError(VideoDecodeAccelerator::Error error);
// Simple getters for inspecting the state of the Client.
@@ -432,7 +431,7 @@ class EglRenderingVDAClient : public VideoDecodeAccelerator::Client {
EGLDisplay egl_display() { return rendering_helper_->egl_display(); }
EGLContext egl_context() { return rendering_helper_->egl_context(); }
double frames_per_second();
- bool decoder_deleted() { return !decoder_.get(); }
+ bool decoder_deleted() { return !decoder_; }
private:
typedef std::map<int, media::GLESBuffer*> PictureBufferById;
@@ -456,7 +455,7 @@ class EglRenderingVDAClient : public VideoDecodeAccelerator::Client {
size_t encoded_data_next_pos_to_decode_;
int next_bitstream_buffer_id_;
ClientStateNotification* note_;
- scoped_ptr<OmxVideoDecodeAccelerator> decoder_;
+ scoped_refptr<OmxVideoDecodeAccelerator> decoder_;
int delete_decoder_state_;
ClientState state_;
VideoDecodeAccelerator::Error error_;
@@ -485,17 +484,17 @@ EglRenderingVDAClient::EglRenderingVDAClient(RenderingHelper* rendering_helper,
}
EglRenderingVDAClient::~EglRenderingVDAClient() {
- CHECK(!decoder_.get());
+ CHECK(decoder_deleted());
STLDeleteValues(&picture_buffers_by_id_);
SetState(CS_DESTROYED);
}
void EglRenderingVDAClient::CreateDecoder() {
- CHECK(!decoder_.get());
- decoder_.reset(new OmxVideoDecodeAccelerator(this));
+ CHECK(decoder_deleted());
+ decoder_ = new OmxVideoDecodeAccelerator(this);
decoder_->SetEglState(egl_display(), egl_context());
SetState(CS_DECODER_SET);
- if (!decoder_.get())
+ if (decoder_deleted())
return;
// Configure the decoder.
@@ -514,7 +513,7 @@ void EglRenderingVDAClient::ProvidePictureBuffers(
uint32 requested_num_of_buffers,
const gfx::Size& dimensions,
VideoDecodeAccelerator::MemoryType type) {
- if (!decoder_.get())
+ if (decoder_deleted())
return;
CHECK_EQ(type, VideoDecodeAccelerator::PICTUREBUFFER_MEMORYTYPE_GL_TEXTURE);
std::vector<media::GLESBuffer> buffers;
@@ -550,7 +549,7 @@ void EglRenderingVDAClient::PictureReady(const media::Picture& picture) {
// We shouldn't be getting pictures delivered after Reset has completed.
DCHECK_LT(state_, CS_RESET);
- if (!decoder_.get())
+ if (decoder_deleted())
return;
last_frame_delivered_ticks_ = base::TimeTicks::Now();
@@ -587,25 +586,20 @@ void EglRenderingVDAClient::NotifyEndOfBitstreamBuffer(
}
void EglRenderingVDAClient::NotifyFlushDone() {
- if (!decoder_.get())
+ if (decoder_deleted())
return;
SetState(CS_FLUSHED);
- if (!decoder_.get())
+ if (decoder_deleted())
return;
decoder_->Reset();
}
void EglRenderingVDAClient::NotifyResetDone() {
- if (!decoder_.get())
+ if (decoder_deleted())
return;
SetState(CS_RESET);
- if (!decoder_.get())
- return;
- decoder_->Destroy();
-}
-
-void EglRenderingVDAClient::NotifyDestroyDone() {
- SetState(CS_DESTROYED);
+ if (!decoder_deleted())
+ DeleteDecoder();
}
void EglRenderingVDAClient::NotifyError(VideoDecodeAccelerator::Error error) {
@@ -622,12 +616,17 @@ static bool LookingAtNAL(const std::string& encoded, size_t pos) {
void EglRenderingVDAClient::SetState(ClientState new_state) {
note_->Notify(new_state);
state_ = new_state;
- if (new_state == delete_decoder_state_)
+ if (new_state == delete_decoder_state_) {
+ CHECK(!decoder_deleted());
DeleteDecoder();
+ }
}
void EglRenderingVDAClient::DeleteDecoder() {
- decoder_.reset();
+ if (decoder_deleted())
+ return;
+ decoder_->Destroy();
+ decoder_ = NULL;
// Cascade through the rest of the states to simplify test code below.
for (int i = state_ + 1; i < CS_MAX; ++i)
SetState(static_cast<ClientState>(i));
@@ -651,7 +650,7 @@ void EglRenderingVDAClient::GetRangeForNextNALUs(
}
void EglRenderingVDAClient::DecodeNextNALUs() {
- if (!decoder_.get())
+ if (decoder_deleted())
return;
if (encoded_data_next_pos_to_decode_ == encoded_data_->size()) {
decoder_->Flush();
@@ -813,10 +812,8 @@ TEST_P(OmxVideoDecodeAcceleratorTest, TestSimpleDecode) {
rendering_thread.Stop();
};
-// TODO(fischman): Remove DISABLED_ prefix when ~OVDA can tear down OMX
-// synchronously (http://crosbug.com/p/4869).
INSTANTIATE_TEST_CASE_P(
- DISABLED_TearDownTiming, OmxVideoDecodeAcceleratorTest,
+ TearDownTiming, OmxVideoDecodeAcceleratorTest,
::testing::Values(
MakeTuple(1, 1, CS_DECODER_SET), MakeTuple(1, 1, CS_INITIALIZED),
MakeTuple(1, 1, CS_FLUSHED), MakeTuple(1, 1, CS_RESET),
@@ -832,10 +829,10 @@ INSTANTIATE_TEST_CASE_P(
INSTANTIATE_TEST_CASE_P(
DecodeVariations, OmxVideoDecodeAcceleratorTest,
::testing::Values(
- MakeTuple(1, 1, CS_DESTROYED), MakeTuple(1, 3, CS_DESTROYED),
- MakeTuple(2, 1, CS_DESTROYED), MakeTuple(3, 1, CS_DESTROYED),
- MakeTuple(5, 1, CS_DESTROYED), MakeTuple(8, 1, CS_DESTROYED),
- MakeTuple(15, 1, CS_DESTROYED)));
+ MakeTuple(1, 1, CS_RESET), MakeTuple(1, 3, CS_RESET),
+ MakeTuple(2, 1, CS_RESET), MakeTuple(3, 1, CS_RESET),
+ MakeTuple(5, 1, CS_RESET), MakeTuple(8, 1, CS_RESET),
+ MakeTuple(15, 1, CS_RESET)));
// TODO(fischman, vrk): add more tests! In particular:
// - Test life-cycle: Seek/Stop/Pause/Play/RePlay for a single decoder.

Powered by Google App Engine
This is Rietveld 408576698