summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2016-12-21 23:59:21 -0800
committerAndrei Gherzan <andrei@gherzan.ro>2017-01-18 17:45:56 +0100
commit7f99a4cb6d512aa2afbd2df2f79cef00398d07b7 (patch)
treef2fa0e4c26a51e8a6209bbf108d4d615901851e3
parentac715f78f86f3edd7252ccca3fc35f81c6002604 (diff)
downloadmeta-raspberrypi-7f99a4cb6d512aa2afbd2df2f79cef00398d07b7.tar.gz
gstreamer1.0-omx: Add 1.10x support
Restructure the bbappends such that common portions can be put in a common bbappend and version specific bbappend then only do the patching Signed-off-by: Khem Raj <raj.khem@gmail.com>
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx%.bbappend9
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0001-Don-t-try-to-acquire-buffer-when-src-pad-isn-t-activ.patch48
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0001-config-files-path.patch137
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0002-fix-decoder-flushing.patch16
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0003-no-timeout-on-get-state.patch16
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0004-Properly-handle-drain-requests-while-flushing.patch30
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0005-Don-t-abort-gst_omx_video_dec_set_format-if-there-s-.patch30
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx_1.10%.bbappend13
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend10
-rw-r--r--recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bbappend9
10 files changed, 299 insertions, 19 deletions
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx%.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-omx%.bbappend
new file mode 100644
index 0000000..67e46de
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx%.bbappend
@@ -0,0 +1,9 @@
1GSTREAMER_1_0_OMX_TARGET_rpi = "rpi"
2GSTREAMER_1_0_OMX_CORE_NAME_rpi = "${libdir}/libopenmaxil.so"
3
4
5# How to make this RPI specific?
6EXTRA_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""
7#examples only build with GL but not GLES, so disable it for RPI
8EXTRA_OECONF_append_rpi = " --disable-examples"
9
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0001-Don-t-try-to-acquire-buffer-when-src-pad-isn-t-activ.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/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.10/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.10/0001-config-files-path.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0001-config-files-path.patch
new file mode 100644
index 0000000..a7da922
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/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.10/0002-fix-decoder-flushing.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0002-fix-decoder-flushing.patch
new file mode 100644
index 0000000..d4c7c81
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/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.10/0003-no-timeout-on-get-state.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0003-no-timeout-on-get-state.patch
new file mode 100644
index 0000000..0a0050d
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/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.10/0004-Properly-handle-drain-requests-while-flushing.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0004-Properly-handle-drain-requests-while-flushing.patch
new file mode 100644
index 0000000..4d10f24
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0004-Properly-handle-drain-requests-while-flushing.patch
@@ -0,0 +1,30 @@
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
13Index: gst-omx-1.10.2/omx/gstomx.c
14===================================================================
15--- gst-omx-1.10.2.orig/omx/gstomx.c
16+++ gst-omx-1.10.2/omx/gstomx.c
17@@ -737,6 +737,13 @@ gst_omx_component_new (GstObject * paren
18
19 g_mutex_lock (&comp->lock);
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 return comp;
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/0005-Don-t-abort-gst_omx_video_dec_set_format-if-there-s-.patch b/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.10/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.10/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.10%.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.10%.bbappend
new file mode 100644
index 0000000..d419867
--- /dev/null
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.10%.bbappend
@@ -0,0 +1,13 @@
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"
12
13FILESEXTRAPATHS_prepend := "${THISDIR}/gstreamer1.0-omx-1.10:"
diff --git a/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend
index 1e84abe..49ba376 100644
--- a/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.2.0.bbappend
@@ -9,16 +9,6 @@ SRC_URI_append_rpi = " \
9 file://0004-Properly-handle-drain-requests-while-flushing.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 \ 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 \ 11 file://0006-omxvideodec-unref-allocator-after-getting-it-from-al.patch \
12 file://0007-omxvideodec-Use-gstglmemoryegl-for-the-RPi.patch \
13" 12"
14 13
15FILESEXTRAPATHS_prepend := "${THISDIR}/gstreamer1.0-omx-1.2.0:" 14FILESEXTRAPATHS_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_git.bbappend b/recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bbappend
index a13aad7..9bcc446 100644
--- a/recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bbappend
+++ b/recipes-multimedia/gstreamer/gstreamer1.0-omx_git.bbappend
@@ -11,12 +11,3 @@ SRC_URI_append_rpi = " \
11" 11"
12 12
13FILESEXTRAPATHS_prepend := "${THISDIR}/gstreamer1.0-omx:" 13FILESEXTRAPATHS_prepend := "${THISDIR}/gstreamer1.0-omx:"
14
15GSTREAMER_1_0_OMX_TARGET_rpi = "rpi"
16GSTREAMER_1_0_OMX_CORE_NAME_rpi = "${libdir}/libopenmaxil.so"
17
18
19# How to make this RPI specific?
20EXTRA_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""
21#examples only build with GL but not GLES, so disable it for RPI
22EXTRA_OECONF_append_rpi = " --disable-examples"