diff options
author | vhiremath@nvidia.com <vhiremath@nvidia.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-07 07:55:22 +0000 |
---|---|---|
committer | vhiremath@nvidia.com <vhiremath@nvidia.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-07 07:55:22 +0000 |
commit | 8cb2f3aca2d071d973dd655b6c085b16036f3bf2 (patch) | |
tree | 6480a5fdf466f6e61532f9e785e51c1886065f48 /content | |
parent | 2aa4eb3e5d8e8dc32515ec3ad25971261b321412 (diff) | |
download | chromium_src-8cb2f3aca2d071d973dd655b6c085b16036f3bf2.zip chromium_src-8cb2f3aca2d071d973dd655b6c085b16036f3bf2.tar.gz chromium_src-8cb2f3aca2d071d973dd655b6c085b16036f3bf2.tar.bz2 |
Destroy egl image handles in the end of playback.
Clean up a couple of unused variables.
BUG=NONE
TEST=omx_video_decode_accelerator_unittest
Review URL: http://codereview.chromium.org/7311004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91677 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content')
-rw-r--r-- | content/common/gpu/media/omx_video_decode_accelerator.cc | 14 | ||||
-rw-r--r-- | content/common/gpu/media/omx_video_decode_accelerator.h | 9 |
2 files changed, 14 insertions, 9 deletions
diff --git a/content/common/gpu/media/omx_video_decode_accelerator.cc b/content/common/gpu/media/omx_video_decode_accelerator.cc index f507fac..4a85f31 100644 --- a/content/common/gpu/media/omx_video_decode_accelerator.cc +++ b/content/common/gpu/media/omx_video_decode_accelerator.cc @@ -396,9 +396,12 @@ void OmxVideoDecodeAccelerator::AssignGLESBuffers( CHECK_EQ(fake_output_buffers_.size(), 0U); CHECK_EQ(pictures_.size(), 0U); + static Gles2TextureToEglImageTranslator texture2eglImage_translator; for (size_t i = 0; i < buffers.size(); ++i) { + EGLImageKHR egl_image = texture2eglImage_translator.TranslateToEglImage( + egl_display_, egl_context_, buffers[i].texture_id()); CHECK(pictures_.insert(std::make_pair( - buffers[i].id(), OutputPicture(buffers[i], NULL))).second); + buffers[i].id(), OutputPicture(buffers[i], NULL, egl_image))).second); } if (pictures_.size() < kNumPictureBuffers) @@ -707,7 +710,6 @@ bool OmxVideoDecodeAccelerator::AllocateInputBuffers() { bool OmxVideoDecodeAccelerator::AllocateOutputBuffers() { DCHECK_EQ(message_loop_, MessageLoop::current()); - static Gles2TextureToEglImageTranslator texture2eglImage_translator; DCHECK(!pictures_.empty()); gfx::Size decoded_pixel_size(pictures_.begin()->second.gles_buffer.size()); @@ -717,10 +719,9 @@ bool OmxVideoDecodeAccelerator::AllocateOutputBuffers() { media::GLESBuffer& gles_buffer = it->second.gles_buffer; OMX_BUFFERHEADERTYPE** omx_buffer = &it->second.omx_buffer_header; DCHECK(!*omx_buffer); - void* egl = texture2eglImage_translator.TranslateToEglImage( - egl_display_, egl_context_, gles_buffer.texture_id()); OMX_ERRORTYPE result = OMX_UseEGLImage( - component_handle_, omx_buffer, output_port_, &gles_buffer, egl); + component_handle_, omx_buffer, output_port_, &gles_buffer, + it->second.egl_image); if (result != OMX_ErrorNone) { LOG(ERROR) << "OMX_UseEGLImage failed with: " << result; return false; @@ -757,6 +758,7 @@ void OmxVideoDecodeAccelerator::FreeOutputBuffers() { DCHECK_EQ(message_loop_, MessageLoop::current()); // Calls to OMX to free buffers. OMX_ERRORTYPE result; + static Gles2TextureToEglImageTranslator texture2eglImage_translator; for (OutputPictureById::iterator it = pictures_.begin(); it != pictures_.end(); ++it) { OMX_BUFFERHEADERTYPE* omx_buffer = it->second.omx_buffer_header; @@ -768,6 +770,8 @@ void OmxVideoDecodeAccelerator::FreeOutputBuffers() { StopOnError(VIDEODECODERERROR_INVALIDINPUT); return; } + texture2eglImage_translator.DestroyEglImage(egl_display_, + it->second.egl_image); client_->DismissPictureBuffer(it->first); } pictures_.clear(); diff --git a/content/common/gpu/media/omx_video_decode_accelerator.h b/content/common/gpu/media/omx_video_decode_accelerator.h index 0496c10..c99eb3c 100644 --- a/content/common/gpu/media/omx_video_decode_accelerator.h +++ b/content/common/gpu/media/omx_video_decode_accelerator.h @@ -20,6 +20,7 @@ #include "base/shared_memory.h" #include "media/video/video_decode_accelerator.h" #include "third_party/angle/include/EGL/egl.h" +#include "third_party/angle/include/EGL/eglext.h" #include "third_party/openmax/il/OMX_Component.h" #include "third_party/openmax/il/OMX_Core.h" #include "third_party/openmax/il/OMX_Video.h" @@ -56,10 +57,12 @@ class OmxVideoDecodeAccelerator : public media::VideoDecodeAccelerator { // Helper struct for keeping track of the relationship between an OMX output // buffer and the GLESBuffer it points to. struct OutputPicture { - OutputPicture(media::GLESBuffer g_b, OMX_BUFFERHEADERTYPE* o_b_h) - : gles_buffer(g_b), omx_buffer_header(o_b_h) {} + OutputPicture(media::GLESBuffer g_b, OMX_BUFFERHEADERTYPE* o_b_h, + EGLImageKHR e_i) + : gles_buffer(g_b), omx_buffer_header(o_b_h), egl_image(e_i) {} media::GLESBuffer gles_buffer; OMX_BUFFERHEADERTYPE* omx_buffer_header; + EGLImageKHR egl_image; }; typedef std::map<int32, OutputPicture> OutputPictureById; @@ -139,8 +142,6 @@ class OmxVideoDecodeAccelerator : public media::VideoDecodeAccelerator { // NOTE: all calls to this object *MUST* be executed in message_loop_. Client* client_; - std::vector<uint32> texture_ids_; - std::vector<uint32> context_ids_; // Method to handle events void EventHandlerCompleteTask(OMX_EVENTTYPE event, OMX_U32 data1, |