diff options
Diffstat (limited to 'import-layers/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch')
-rw-r--r-- | import-layers/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/import-layers/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch b/import-layers/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch new file mode 100644 index 000000000..ed828c361 --- /dev/null +++ b/import-layers/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch @@ -0,0 +1,115 @@ +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 + |