summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0001-Don-t-try-to-acquire-buffer-when-src-pad-isn-t-activ.patch48
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0001-config-files-path.patch137
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0002-fix-decoder-flushing.patch16
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0003-no-timeout-on-get-state.patch16
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0004-Properly-handle-drain-requests-while-flushing.patch69
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0005-Don-t-abort-gst_omx_video_dec_set_format-if-there-s-.patch30
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0006-omxvideodec-unref-allocator-after-getting-it-from-al.patch48
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch115
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend24
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bbappend (renamed from recipes-multimedia/gstreamer/gstreamer1.0-omx_%.bbappend)0
10 files changed, 503 insertions, 0 deletions
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0001-Don-t-try-to-acquire-buffer-when-src-pad-isn-t-activ.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0001-Don-t-try-to-acquire-buffer-when-src-pad-isn-t-activ.patch
new file mode 100644
index 0000000..815a7c2
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0001-Don-t-try-to-acquire-buffer-when-src-pad-isn-t-activ.patch
@@ -0,0 +1,48 @@
1From 2e111e52f96f0b942abda120c30a876629bd73fc Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Enrique=20Oca=C3=B1a=20Gonz=C3=A1lez?= <eocanha@igalia.com>
3Date: Mon, 25 May 2015 14:53:35 +0200
4Subject: [PATCH] Don't try to acquire buffer when src pad isn't active
5
6This solves a race condition when setting the pipeline from PAUSE to
7NULL while the decoder loop is still running. Without this patch, the
8thread which interacts with the decode sink pad gets blocked here:
9
10 gst_element_change_state()
11 gst_element_change_state_func()
12 gst_element_pads_activate() --> Deactivating pads
13 activate_pads()
14 gst_pad_set_active()
15 gst_pad_activate_mode()
16 post_activate()
17 GST_PAD_STREAM_LOCK()
18
19while gst_omx_port_acquire_buffer() gets stalled forever in
20gst_omx_component_wait_message() waiting for a message that will never
21arrive:
22
23 gst_omx_video_dec_loop()
24 gst_omx_port_acquire_buffer()
25 gst_omx_component_wait_message()
26---
27 omx/gstomxvideodec.c | 5 +++++
28 1 file changed, 5 insertions(+)
29
30diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
31index cd24944..57a61dd 100644
32--- a/omx/gstomxvideodec.c
33+++ b/omx/gstomxvideodec.c
34@@ -1247,6 +1247,11 @@ gst_omx_video_dec_loop (GstOMXVideoDec * self)
35 GstClockTimeDiff deadline;
36 OMX_ERRORTYPE err;
37
38+ if (!gst_pad_is_active(GST_VIDEO_DECODER_SRC_PAD (self))) {
39+ GST_DEBUG_OBJECT (self, "Src pad not active, not acquiring buffer and flushing instead");
40+ goto flushing;
41+ }
42+
43 #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
44 port = self->eglimage ? self->egl_out_port : self->dec_out_port;
45 #else
46--
471.8.3.2
48
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0001-config-files-path.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0001-config-files-path.patch
new file mode 100644
index 0000000..a7da922
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0001-config-files-path.patch
@@ -0,0 +1,137 @@
1--- a/config/bellagio/gstomx.conf
2+++ b/config/bellagio/gstomx.conf
3@@ -1,6 +1,6 @@
4 [omxmpeg4videodec]
5 type-name=GstOMXMPEG4VideoDec
6-core-name=/usr/local/lib/libomxil-bellagio.so.0
7+core-name=/usr/lib/libomxil-bellagio.so.0
8 component-name=OMX.st.video_decoder.mpeg4
9 rank=256
10 in-port-index=0
11@@ -9,7 +9,7 @@
12
13 [omxh264dec]
14 type-name=GstOMXH264Dec
15-core-name=/usr/local/lib/libomxil-bellagio.so.0
16+core-name=/usr/lib/libomxil-bellagio.so.0
17 component-name=OMX.st.video_decoder.avc
18 rank=256
19 in-port-index=0
20@@ -18,7 +18,7 @@
21
22 [omxmpeg4videoenc]
23 type-name=GstOMXMPEG4VideoEnc
24-core-name=/usr/local/lib/libomxil-bellagio.so.0
25+core-name=/usr/lib/libomxil-bellagio.so.0
26 component-name=OMX.st.video_encoder.mpeg4
27 rank=0
28 in-port-index=0
29@@ -27,7 +27,7 @@
30
31 [omxaacenc]
32 type-name=GstOMXAACEnc
33-core-name=/usr/local/lib/libomxil-bellagio.so.0
34+core-name=/usr/lib/libomxil-bellagio.so.0
35 component-name=OMX.st.audio_encoder.aac
36 rank=0
37 in-port-index=0
38--- a/config/rpi/gstomx.conf
39+++ b/config/rpi/gstomx.conf
40@@ -1,6 +1,6 @@
41 [omxmpeg2videodec]
42 type-name=GstOMXMPEG2VideoDec
43-core-name=/opt/vc/lib/libopenmaxil.so
44+core-name=/usr/lib/libopenmaxil.so
45 component-name=OMX.broadcom.video_decode
46 rank=257
47 in-port-index=130
48@@ -9,7 +9,7 @@
49
50 [omxmpeg4videodec]
51 type-name=GstOMXMPEG4VideoDec
52-core-name=/opt/vc/lib/libopenmaxil.so
53+core-name=/usr/lib/libopenmaxil.so
54 component-name=OMX.broadcom.video_decode
55 rank=257
56 in-port-index=130
57@@ -18,7 +18,7 @@
58
59 [omxh263dec]
60 type-name=GstOMXH263Dec
61-core-name=/opt/vc/lib/libopenmaxil.so
62+core-name=/usr/lib/libopenmaxil.so
63 component-name=OMX.broadcom.video_decode
64 rank=257
65 in-port-index=130
66@@ -27,7 +27,7 @@
67
68 [omxh264dec]
69 type-name=GstOMXH264Dec
70-core-name=/opt/vc/lib/libopenmaxil.so
71+core-name=/usr/lib/libopenmaxil.so
72 component-name=OMX.broadcom.video_decode
73 rank=257
74 in-port-index=130
75@@ -36,7 +36,7 @@
76
77 [omxtheoradec]
78 type-name=GstOMXTheoraDec
79-core-name=/opt/vc/lib/libopenmaxil.so
80+core-name=/usr/lib/libopenmaxil.so
81 component-name=OMX.broadcom.video_decode
82 rank=257
83 in-port-index=130
84@@ -45,7 +45,7 @@
85
86 [omxvp8dec]
87 type-name=GstOMXVP8Dec
88-core-name=/opt/vc/lib/libopenmaxil.so
89+core-name=/usr/lib/libopenmaxil.so
90 component-name=OMX.broadcom.video_decode
91 rank=257
92 in-port-index=130
93@@ -54,7 +54,7 @@
94
95 [omxmjpegdec]
96 type-name=GstOMXMJPEGDec
97-core-name=/opt/vc/lib/libopenmaxil.so
98+core-name=/usr/lib/libopenmaxil.so
99 component-name=OMX.broadcom.video_decode
100 rank=257
101 in-port-index=130
102@@ -63,7 +63,7 @@
103
104 [omxvc1dec]
105 type-name=GstOMXWMVDec
106-core-name=/opt/vc/lib/libopenmaxil.so
107+core-name=/usr/lib/libopenmaxil.so
108 component-name=OMX.broadcom.video_decode
109 rank=256
110 in-port-index=130
111@@ -73,7 +73,7 @@
112
113 [omxh264enc]
114 type-name=GstOMXH264Enc
115-core-name=/opt/vc/lib/libopenmaxil.so
116+core-name=/usr/lib/libopenmaxil.so
117 component-name=OMX.broadcom.video_encode
118 rank=257
119 in-port-index=200
120@@ -82,7 +82,7 @@
121
122 [omxanalogaudiosink]
123 type-name=GstOMXAnalogAudioSink
124-core-name=/opt/vc/lib/libopenmaxil.so
125+core-name=/usr/lib/libopenmaxil.so
126 component-name=OMX.broadcom.audio_render
127 rank=256
128 in-port-index=100
129@@ -92,7 +92,7 @@
130
131 [omxhdmiaudiosink]
132 type-name=GstOMXHdmiAudioSink
133-core-name=/opt/vc/lib/libopenmaxil.so
134+core-name=/usr/lib/libopenmaxil.so
135 component-name=OMX.broadcom.audio_render
136 rank=257
137 in-port-index=100
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0002-fix-decoder-flushing.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0002-fix-decoder-flushing.patch
new file mode 100644
index 0000000..d4c7c81
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0002-fix-decoder-flushing.patch
@@ -0,0 +1,16 @@
1diff --git a/omx/gstomx.c b/omx/gstomx.c
2index 69696c4..c382019 100644
3--- a/omx/gstomx.c
4+++ b/omx/gstomx.c
5@@ -1508,8 +1508,8 @@ gst_omx_port_set_flushing (GstOMXPort * port, GstClockTime timeout,
6 last_error = OMX_ErrorNone;
7 gst_omx_component_handle_messages (comp);
8 while (signalled && last_error == OMX_ErrorNone && !port->flushed
9- && port->buffers
10- && port->buffers->len > g_queue_get_length (&port->pending_buffers)) {
11+ /* && port->buffers
12+ && port->buffers->len > g_queue_get_length (&port->pending_buffers) */) {
13 signalled = gst_omx_component_wait_message (comp, timeout);
14 if (signalled)
15 gst_omx_component_handle_messages (comp);
16
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0003-no-timeout-on-get-state.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0003-no-timeout-on-get-state.patch
new file mode 100644
index 0000000..0a0050d
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0003-no-timeout-on-get-state.patch
@@ -0,0 +1,16 @@
1diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
2index 0d4e7a1..a0d9c74 100644
3--- a/omx/gstomxvideodec.c
4+++ b/omx/gstomxvideodec.c
5@@ -1697,9 +1697,9 @@ gst_omx_video_dec_stop (GstVideoDecoder * decoder)
6 g_cond_broadcast (&self->drain_cond);
7 g_mutex_unlock (&self->drain_lock);
8
9- gst_omx_component_get_state (self->dec, 5 * GST_SECOND);
10+ gst_omx_component_get_state (self->dec, 0);
11 #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
12- gst_omx_component_get_state (self->egl_render, 1 * GST_SECOND);
13+ gst_omx_component_get_state (self->egl_render, 0);
14 #endif
15
16 gst_buffer_replace (&self->codec_data, NULL);
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0004-Properly-handle-drain-requests-while-flushing.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0004-Properly-handle-drain-requests-while-flushing.patch
new file mode 100644
index 0000000..98689f3
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0004-Properly-handle-drain-requests-while-flushing.patch
@@ -0,0 +1,69 @@
1From 80dddfd13aaf2fe7272765f8cf291215fe375e28 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Enrique=20Oca=C3=B1a=20Gonz=C3=A1lez?= <eocanha@igalia.com>
3Date: Tue, 17 Nov 2015 16:51:27 +0000
4Subject: [PATCH] Properly handle drain requests while flushing
5
6Without this commit the decoder streaming thread stops without ever attending
7the drain request, leaving the decoder input thread waiting forever.
8---
9 omx/gstomx.c | 7 +++++++
10 omx/gstomxvideodec.c | 13 +++++++++++++
11 2 files changed, 20 insertions(+)
12
13diff --git a/omx/gstomx.c b/omx/gstomx.c
14index 69696c4..f0cd890 100644
15--- a/omx/gstomx.c
16+++ b/omx/gstomx.c
17@@ -830,6 +830,13 @@ gst_omx_component_set_state (GstOMXComponent * comp, OMX_STATETYPE state)
18 done:
19
20 gst_omx_component_handle_messages (comp);
21+
22+ if (err != OMX_ErrorNone && comp->last_error == OMX_ErrorNone) {
23+ GST_ERROR_OBJECT (comp->parent,
24+ "Last operation returned an error. Setting last_error manually.");
25+ comp->last_error = err;
26+ }
27+
28 g_mutex_unlock (&comp->lock);
29
30 if (err != OMX_ErrorNone) {
31diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
32index d531f75..a26c4a6 100644
33--- a/omx/gstomxvideodec.c
34+++ b/omx/gstomxvideodec.c
35@@ -1539,9 +1539,16 @@ component_error:
36 flushing:
37 {
38 GST_DEBUG_OBJECT (self, "Flushing -- stopping task");
39+
40+ g_mutex_lock (&self->drain_lock);
41+ if (self->draining) {
42+ self->draining = FALSE;
43+ g_cond_broadcast (&self->drain_cond);
44+ }
45 gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
46 self->downstream_flow_ret = GST_FLOW_FLUSHING;
47 self->started = FALSE;
48+ g_mutex_unlock (&self->drain_lock);
49 return;
50 }
51
52@@ -1599,8 +1606,14 @@ flow_error:
53 self->started = FALSE;
54 } else if (flow_ret == GST_FLOW_FLUSHING) {
55 GST_DEBUG_OBJECT (self, "Flushing -- stopping task");
56+ g_mutex_lock (&self->drain_lock);
57+ if (self->draining) {
58+ self->draining = FALSE;
59+ g_cond_broadcast (&self->drain_cond);
60+ }
61 gst_pad_pause_task (GST_VIDEO_DECODER_SRC_PAD (self));
62 self->started = FALSE;
63+ g_mutex_unlock (&self->drain_lock);
64 }
65 GST_VIDEO_DECODER_STREAM_UNLOCK (self);
66 return;
67--
681.8.3.2
69
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0005-Don-t-abort-gst_omx_video_dec_set_format-if-there-s-.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0005-Don-t-abort-gst_omx_video_dec_set_format-if-there-s-.patch
new file mode 100644
index 0000000..b7a8753
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0005-Don-t-abort-gst_omx_video_dec_set_format-if-there-s-.patch
@@ -0,0 +1,30 @@
1From 12103842d5f347cf245e71071d0c44297bcdb1f9 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Enrique=20Oca=C3=B1a=20Gonz=C3=A1lez?= <eocanha@igalia.com>
3Date: Fri, 4 Dec 2015 18:39:59 +0100
4Subject: [PATCH] Don't abort gst_omx_video_dec_set_format() if there's a
5 timeout releasing the buffers taken by the egl_render out port
6
7---
8 omx/gstomxvideodec.c | 5 ++++-
9 1 file changed, 4 insertions(+), 1 deletion(-)
10
11diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
12index 2368f34..da35e0d 100644
13--- a/omx/gstomxvideodec.c
14+++ b/omx/gstomxvideodec.c
15@@ -1905,8 +1905,11 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder,
16 5 * GST_SECOND) != OMX_ErrorNone)
17 return FALSE;
18 if (gst_omx_port_wait_buffers_released (out_port,
19- 1 * GST_SECOND) != OMX_ErrorNone)
20+ 1 * GST_SECOND) != OMX_ErrorNone) {
21+#if !(defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL))
22 return FALSE;
23+#endif
24+ }
25 if (gst_omx_port_deallocate_buffers (self->dec_in_port) != OMX_ErrorNone)
26 return FALSE;
27 if (gst_omx_video_dec_deallocate_output_buffers (self) != OMX_ErrorNone)
28--
292.1.4
30
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0006-omxvideodec-unref-allocator-after-getting-it-from-al.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0006-omxvideodec-unref-allocator-after-getting-it-from-al.patch
new file mode 100644
index 0000000..ace60a6
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0006-omxvideodec-unref-allocator-after-getting-it-from-al.patch
@@ -0,0 +1,48 @@
1From d2df0fb032c36b366a08a1355c4f4c816eb53447 Mon Sep 17 00:00:00 2001
2From: =?UTF-8?q?Aur=C3=A9lien=20Zanelli?= <aurelien.zanelli@darkosphere.fr>
3Date: Fri, 3 Jul 2015 00:26:48 +0200
4Subject: [PATCH] omxvideodec: unref allocator after getting it from allocation
5 query
6
7Otherwise a reference will be leaked for each allocator. It only happens
8when target platform is Raspberry Pi and when we have GL support.
9
10https://bugzilla.gnome.org/show_bug.cgi?id=751867
11---
12 omx/gstomxvideodec.c | 20 ++++++++++++--------
13 1 file changed, 12 insertions(+), 8 deletions(-)
14
15diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
16index cd24944..b8c3756 100644
17--- a/omx/gstomxvideodec.c
18+++ b/omx/gstomxvideodec.c
19@@ -2530,14 +2530,18 @@ gst_omx_video_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
20 GstAllocationParams params;
21
22 gst_query_parse_nth_allocation_param (query, i, &allocator, &params);
23- if (allocator
24- && g_strcmp0 (allocator->mem_type,
25- GST_EGL_IMAGE_MEMORY_TYPE) == 0) {
26- found = TRUE;
27- gst_query_set_nth_allocation_param (query, 0, allocator, &params);
28- while (gst_query_get_n_allocation_params (query) > 1)
29- gst_query_remove_nth_allocation_param (query, 1);
30- break;
31+ if (allocator) {
32+ if (g_strcmp0 (allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0) {
33+ found = TRUE;
34+ gst_query_set_nth_allocation_param (query, 0, allocator, &params);
35+ while (gst_query_get_n_allocation_params (query) > 1)
36+ gst_query_remove_nth_allocation_param (query, 1);
37+ }
38+
39+ gst_object_unref (allocator);
40+
41+ if (found)
42+ break;
43 }
44 }
45
46--
472.5.5
48
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch
new file mode 100644
index 0000000..ed828c3
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.2.0/0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch
@@ -0,0 +1,115 @@
1From 1cb902edb51d8f5d95f910b79b9b4c208550a7b6 Mon Sep 17 00:00:00 2001
2From: Gwang Yoon Hwang <yoon@igalia.com>
3Date: Wed, 20 Jan 2016 03:10:38 +0900
4Subject: [PATCH] omxvideodec : Use gstglmemoryegl for the RPi
5
6Modified to use gstglmemoryegl to avoid texture creation/copy operations
7at the glupload.
8---
9 omx/gstomxvideodec.c | 28 ++++++++++++++--------------
10 1 file changed, 14 insertions(+), 14 deletions(-)
11
12diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
13index ec97731..c9d60ff 100644
14--- a/omx/gstomxvideodec.c
15+++ b/omx/gstomxvideodec.c
16@@ -38,7 +38,7 @@
17
18 #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
19 #include <gst/gl/gl.h>
20-#include <gst/gl/egl/gsteglimagememory.h>
21+#include <gst/gl/egl/gstglmemoryegl.h>
22 #endif
23
24 #if defined (USE_OMX_TARGET_RPI) && defined(__GNUC__)
25@@ -125,7 +125,7 @@ gst_omx_video_dec_class_init (GstOMXVideoDecClass * klass)
26 klass->cdata.type = GST_OMX_COMPONENT_TYPE_FILTER;
27 klass->cdata.default_src_template_caps =
28 #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
29- GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE,
30+ GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_GL_MEMORY,
31 "RGBA") "; "
32 #endif
33 "video/x-raw, "
34@@ -596,8 +596,8 @@ gst_omx_video_dec_allocate_output_buffers (GstOMXVideoDec * self)
35 gst_structure_free (config);
36
37 #if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
38- eglimage = self->eglimage && (allocator
39- && g_strcmp0 (allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0);
40+ eglimage = self->eglimage
41+ && (allocator && GST_IS_GL_MEMORY_EGL_ALLOCATOR (allocator));
42 #else
43 /* TODO: Implement something that works for other targets too */
44 eglimage = FALSE;
45@@ -640,12 +640,12 @@ gst_omx_video_dec_allocate_output_buffers (GstOMXVideoDec * self)
46 for (i = 0; i < min; i++) {
47 GstBuffer *buffer;
48 GstMemory *mem;
49+ GstGLMemoryEGL *gl_mem;
50
51 if (gst_buffer_pool_acquire_buffer (pool, &buffer, &params) != GST_FLOW_OK
52 || gst_buffer_n_memory (buffer) != 1
53 || !(mem = gst_buffer_peek_memory (buffer, 0))
54- || g_strcmp0 (mem->allocator->mem_type,
55- GST_EGL_IMAGE_MEMORY_TYPE) != 0) {
56+ || !GST_IS_GL_MEMORY_EGL_ALLOCATOR (mem->allocator)) {
57 GST_INFO_OBJECT (self, "Failed to allocated %d-th EGLImage", i);
58 g_list_free_full (buffers, (GDestroyNotify) gst_buffer_unref);
59 g_list_free (images);
60@@ -656,13 +656,13 @@ gst_omx_video_dec_allocate_output_buffers (GstOMXVideoDec * self)
61 err = OMX_ErrorUndefined;
62 goto done;
63 }
64-
65+ gl_mem = (GstGLMemoryEGL *)mem;
66 buffers = g_list_append (buffers, buffer);
67- gst_egl_image_memory_set_orientation (mem,
68+ gst_gl_memory_egl_set_orientation (gl_mem,
69 GST_VIDEO_GL_TEXTURE_ORIENTATION_X_NORMAL_Y_FLIP);
70- images = g_list_append (images, gst_egl_image_memory_get_image (mem));
71+ images = g_list_append (images, gst_gl_memory_egl_get_image (gl_mem));
72 if (egl_display == EGL_NO_DISPLAY)
73- egl_display = gst_egl_image_memory_get_display (mem);
74+ egl_display = gst_gl_memory_egl_get_display (gl_mem);
75 }
76
77 GST_DEBUG_OBJECT (self, "Allocated %d EGLImages successfully", min);
78@@ -954,14 +954,14 @@ gst_omx_video_dec_reconfigure_output_port (GstOMXVideoDec * self)
79 gst_caps_unref (state->caps);
80 state->caps = gst_video_info_to_caps (&state->info);
81 gst_caps_set_features (state->caps, 0,
82- gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_EGL_IMAGE, NULL));
83+ gst_caps_features_new (GST_CAPS_FEATURE_MEMORY_GL_MEMORY, NULL));
84
85 /* try to negotiate with caps feature */
86 if (!gst_video_decoder_negotiate (GST_VIDEO_DECODER (self))) {
87
88 GST_DEBUG_OBJECT (self,
89 "Failed to negotiate with feature %s",
90- GST_CAPS_FEATURE_MEMORY_EGL_IMAGE);
91+ GST_CAPS_FEATURE_MEMORY_GL_MEMORY);
92
93 if (state->caps)
94 gst_caps_replace (&state->caps, NULL);
95@@ -2554,7 +2554,7 @@ gst_omx_video_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
96
97 gst_query_parse_nth_allocation_param (query, i, &allocator, &params);
98 if (allocator) {
99- if (g_strcmp0 (allocator->mem_type, GST_EGL_IMAGE_MEMORY_TYPE) == 0) {
100+ if (GST_IS_GL_MEMORY_EGL_ALLOCATOR (allocator)) {
101 found = TRUE;
102 gst_query_set_nth_allocation_param (query, 0, allocator, &params);
103 while (gst_query_get_n_allocation_params (query) > 1)
104@@ -2572,7 +2572,7 @@ gst_omx_video_dec_decide_allocation (GstVideoDecoder * bdec, GstQuery * query)
105 * and if allocator is not of type memory EGLImage then fails */
106 if (feature
107 && gst_caps_features_contains (feature,
108- GST_CAPS_FEATURE_MEMORY_EGL_IMAGE) && !found) {
109+ GST_CAPS_FEATURE_MEMORY_GL_MEMORY) && !found) {
110 return FALSE;
111 }
112 }
113--
1142.5.0
115
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend
new file mode 100644
index 0000000..1e84abe
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend
@@ -0,0 +1,24 @@
1#
2# Need to make this conditional to gstreamer1
3#
4SRC_URI_append_rpi = " \
5 file://0001-config-files-path.patch \
6 file://0001-Don-t-try-to-acquire-buffer-when-src-pad-isn-t-activ.patch \
7 file://0002-fix-decoder-flushing.patch \
8 file://0003-no-timeout-on-get-state.patch \
9 file://0004-Properly-handle-drain-requests-while-flushing.patch \
10 file://0005-Don-t-abort-gst_omx_video_dec_set_format-if-there-s-.patch \
11 file://0006-omxvideodec-unref-allocator-after-getting-it-from-al.patch \
12 file://0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch \
13"
14
15FILESEXTRAPATHS_prepend := "${THISDIR}/gstreamer1.0-omx-1.2.0:"
16
17GSTREAMER_1_0_OMX_TARGET_rpi = "rpi"
18GSTREAMER_1_0_OMX_CORE_NAME_rpi = "${libdir}/libopenmaxil.so"
19
20
21# How to make this RPI specific?
22EXTRA_OECONF_append_rpi = " CFLAGS="$CFLAGS -I${STAGING_DIR_TARGET}/usr/include/IL -I${STAGING_DIR_TARGET}/usr/include/interface/vcos/pthreads -I${STAGING_DIR_TARGET}/usr/include/interface/vmcs_host/linux""
23#examples only build with GL but not GLES, so disable it for RPI
24EXTRA_OECONF_append_rpi = " --disable-examples"
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx_%.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bbappend
index a13aad7..a13aad7 100644
--- a/recipes-multimedia/gstreamer/gstreamer1.0-omx_%.bbappend
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bbappend