summaryrefslogtreecommitdiffstats
path: root/import-layers/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch
diff options
context:
space:
mode:
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.patch115
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, &params) != 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, &params);
+ 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, &params);
+ 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
+
OpenPOWER on IntegriCloud