| From 1cb902edb51d8f5d95f910b79b9b4c208550a7b6 Mon Sep 17 00:00:00 2001 |
| From: Gwang Yoon Hwang <yoon@igalia.com> |
| Date: Wed, 20 Jan 2016 03:10:38 +0900 |
| Subject: [PATCH] omxvideodec : Use gstglmemoryegl for the RPi |
| |
| Modified to use gstglmemoryegl to avoid texture creation/copy operations |
| at the glupload. |
| --- |
| omx/gstomxvideodec.c | 28 ++++++++++++++-------------- |
| 1 file changed, 14 insertions(+), 14 deletions(-) |
| |
| diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c |
| index ec97731..c9d60ff 100644 |
| --- a/omx/gstomxvideodec.c |
| +++ b/omx/gstomxvideodec.c |
| @@ -38,7 +38,7 @@ |
| |
| #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL) |
| #include <gst/gl/gl.h> |
| -#include <gst/gl/egl/gsteglimagememory.h> |
| +#include <gst/gl/egl/gstglmemoryegl.h> |
| #endif |
| |
| #if defined (USE_OMX_TARGET_RPI) && defined(__GNUC__) |
| @@ -125,7 +125,7 @@ gst_omx_video_dec_class_init (GstOMXVideoDecClass * klass) |
| klass->cdata.type = GST_OMX_COMPONENT_TYPE_FILTER; |
| klass->cdata.default_src_template_caps = |
| #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL) |
| - GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE, |
| + GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, |
| "RGBA") "; " |
| #endif |
| "video/x-raw, " |
| @@ -596,8 +596,8 @@ gst_omx_video_dec_allocate_output_buffers (GstOMXVideoDec * self) |
| gst_structure_free (config); |
| |
| #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL) |
| - eglimage = self->eglimage && (allocator |
| - && g_strcmp0 (allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0); |
| + eglimage = self->eglimage |
| + && (allocator && GST_IS_GL_MEMORY_EGL_ALLOCATOR (allocator)); |
| #else |
| /* TODO: Implement something that works for other targets too */ |
| eglimage = FALSE; |
| @@ -640,12 +640,12 @@ gst_omx_video_dec_allocate_output_buffers (GstOMXVideoDec * self) |
| for (i = 0; i < min; i++) { |
| GstBuffer *buffer; |
| GstMemory *mem; |
| + GstGLMemoryEGL *gl_mem; |
| |
| if (gst_buffer_pool_acquire_buffer (pool, &buffer, ¶ms) != GST_FLOW_OK |
| || gst_buffer_n_memory (buffer) != 1 |
| || !(mem = gst_buffer_peek_memory (buffer, 0)) |
| - || g_strcmp0 (mem->allocator->mem_type, |
| - GST_EGL_IMAGE_MEMORY_TYPE) != 0) { |
| + || !GST_IS_GL_MEMORY_EGL_ALLOCATOR (mem->allocator)) { |
| GST_INFO_OBJECT (self, "Failed to allocated %d-th EGLImage", i); |
| g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref); |
| g_list_free (images); |
| @@ -656,13 +656,13 @@ gst_omx_video_dec_allocate_output_buffers (GstOMXVideoDec * self) |
| err = OMX_ErrorUndefined; |
| goto done; |
| } |
| - |
| + gl_mem = (GstGLMemoryEGL *)mem; |
| buffers = g_list_append (buffers, buffer); |
| - gst_egl_image_memory_set_orientation (mem, |
| + gst_gl_memory_egl_set_orientation (gl_mem, |
| GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_FLIP); |
| - images = g_list_append (images, gst_egl_image_memory_get_image (mem)); |
| + images = g_list_append (images, gst_gl_memory_egl_get_image (gl_mem)); |
| if (egl_display == EGL_NO_DISPLAY) |
| - egl_display = gst_egl_image_memory_get_display (mem); |
| + egl_display = gst_gl_memory_egl_get_display (gl_mem); |
| } |
| |
| GST_DEBUG_OBJECT (self, "Allocated %d EGLImages successfully", min); |
| @@ -954,14 +954,14 @@ gst_omx_video_dec_reconfigure_output_port (GstOMXVideoDec * self) |
| gst_caps_unref (state->caps); |
| state->caps = gst_video_info_to_caps (&state->info); |
| gst_caps_set_features (state->caps, 0, |
| - gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE, NULL)); |
| + gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, NULL)); |
| |
| /* try to negotiate with caps feature */ |
| if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) { |
| |
| GST_DEBUG_OBJECT (self, |
| "Failed to negotiate with feature %s", |
| - GST_CAPS_FEATURE_MEMORY_EGL_IMAGE); |
| + GST_CAPS_FEATURE_MEMORY_GL_MEMORY); |
| |
| if (state->caps) |
| gst_caps_replace (&state->caps, NULL); |
| @@ -2554,7 +2554,7 @@ gst_omx_video_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query) |
| |
| gst_query_parse_nth_allocation_param (query, i, &allocator, ¶ms); |
| if (allocator) { |
| - if (g_strcmp0 (allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0) { |
| + if (GST_IS_GL_MEMORY_EGL_ALLOCATOR (allocator)) { |
| found = TRUE; |
| gst_query_set_nth_allocation_param (query, 0, allocator, ¶ms); |
| while (gst_query_get_n_allocation_params (query) > 1) |
| @@ -2572,7 +2572,7 @@ gst_omx_video_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query) |
| * and if allocator is not of type memory EGLImage then fails */ |
| if (feature |
| && gst_caps_features_contains (feature, |
| - GST_CAPS_FEATURE_MEMORY_EGL_IMAGE) && !found) { |
| + GST_CAPS_FEATURE_MEMORY_GL_MEMORY) && !found) { |
| return FALSE; |
| } |
| } |
| -- |
| 2.5.0 |
| |