summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorvhiremath@nvidia.com <vhiremath@nvidia.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-07 07:55:22 +0000
committervhiremath@nvidia.com <vhiremath@nvidia.com@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-07 07:55:22 +0000
commit8cb2f3aca2d071d973dd655b6c085b16036f3bf2 (patch)
tree6480a5fdf466f6e61532f9e785e51c1886065f48 /content
parent2aa4eb3e5d8e8dc32515ec3ad25971261b321412 (diff)
downloadchromium_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.cc14
-rw-r--r--content/common/gpu/media/omx_video_decode_accelerator.h9
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,