summaryrefslogtreecommitdiffstats
path: root/import-layers/meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch
blob: ed828c361b79f16f9bb26dc03a941cd33987ced1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
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