gstreamer1.0-omx: Add raspberry pi optimization patches and config options

Patches from Hong Li <honglh@gmail.com>

Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
Khem Raj 2016-02-11 12:53:20 -08:00 committed by Andrei Gherzan
parent 06709d784d
commit 27445a1e4c
4 changed files with 218 additions and 0 deletions

View File

@ -0,0 +1,137 @@
--- a/config/bellagio/gstomx.conf
+++ b/config/bellagio/gstomx.conf
@@ -1,6 +1,6 @@
[omxmpeg4videodec]
type-name=GstOMXMPEG4VideoDec
-core-name=/usr/local/lib/libomxil-bellagio.so.0
+core-name=/usr/lib/libomxil-bellagio.so.0
component-name=OMX.st.video_decoder.mpeg4
rank=256
in-port-index=0
@@ -9,7 +9,7 @@
[omxh264dec]
type-name=GstOMXH264Dec
-core-name=/usr/local/lib/libomxil-bellagio.so.0
+core-name=/usr/lib/libomxil-bellagio.so.0
component-name=OMX.st.video_decoder.avc
rank=256
in-port-index=0
@@ -18,7 +18,7 @@
[omxmpeg4videoenc]
type-name=GstOMXMPEG4VideoEnc
-core-name=/usr/local/lib/libomxil-bellagio.so.0
+core-name=/usr/lib/libomxil-bellagio.so.0
component-name=OMX.st.video_encoder.mpeg4
rank=0
in-port-index=0
@@ -27,7 +27,7 @@
[omxaacenc]
type-name=GstOMXAACEnc
-core-name=/usr/local/lib/libomxil-bellagio.so.0
+core-name=/usr/lib/libomxil-bellagio.so.0
component-name=OMX.st.audio_encoder.aac
rank=0
in-port-index=0
--- a/config/rpi/gstomx.conf
+++ b/config/rpi/gstomx.conf
@@ -1,6 +1,6 @@
[omxmpeg2videodec]
type-name=GstOMXMPEG2VideoDec
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_decode
rank=257
in-port-index=130
@@ -9,7 +9,7 @@
[omxmpeg4videodec]
type-name=GstOMXMPEG4VideoDec
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_decode
rank=257
in-port-index=130
@@ -18,7 +18,7 @@
[omxh263dec]
type-name=GstOMXH263Dec
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_decode
rank=257
in-port-index=130
@@ -27,7 +27,7 @@
[omxh264dec]
type-name=GstOMXH264Dec
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_decode
rank=257
in-port-index=130
@@ -36,7 +36,7 @@
[omxtheoradec]
type-name=GstOMXTheoraDec
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_decode
rank=257
in-port-index=130
@@ -45,7 +45,7 @@
[omxvp8dec]
type-name=GstOMXVP8Dec
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_decode
rank=257
in-port-index=130
@@ -54,7 +54,7 @@
[omxmjpegdec]
type-name=GstOMXMJPEGDec
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_decode
rank=257
in-port-index=130
@@ -63,7 +63,7 @@
[omxvc1dec]
type-name=GstOMXWMVDec
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_decode
rank=256
in-port-index=130
@@ -73,7 +73,7 @@
[omxh264enc]
type-name=GstOMXH264Enc
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.video_encode
rank=257
in-port-index=200
@@ -82,7 +82,7 @@
[omxanalogaudiosink]
type-name=GstOMXAnalogAudioSink
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.audio_render
rank=256
in-port-index=100
@@ -92,7 +92,7 @@
[omxhdmiaudiosink]
type-name=GstOMXHdmiAudioSink
-core-name=/opt/vc/lib/libopenmaxil.so
+core-name=/usr/lib/libopenmaxil.so
component-name=OMX.broadcom.audio_render
rank=257
in-port-index=100

View File

@ -0,0 +1,47 @@
From 2e111e52f96f0b942abda120c30a876629bd73fc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Enrique=20Oca=C3=B1a=20Gonz=C3=A1lez?= <eocanha@igalia.com>
Date: Mon, 25 May 2015 14:53:35 +0200
Subject: [PATCH] Don't try to acquire buffer when src pad isn't active
This solves a race condition when setting the pipeline from PAUSE to
NULL while the decoder loop is still running. Without this patch, the
thread which interacts with the decode sink pad gets blocked here:
gst_element_change_state()
gst_element_change_state_func()
gst_element_pads_activate() --> Deactivating pads
activate_pads()
gst_pad_set_active()
gst_pad_activate_mode()
post_activate()
GST_PAD_STREAM_LOCK()
while gst_omx_port_acquire_buffer() gets stalled forever in
gst_omx_component_wait_message() waiting for a message that will never
arrive:
gst_omx_video_dec_loop()
gst_omx_port_acquire_buffer()
gst_omx_component_wait_message()
---
omx/gstomxvideodec.c | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c
index cd24944..57a61dd 100644
--- a/omx/gstomxvideodec.c
+++ b/omx/gstomxvideodec.c
@@ -1247,6 +1247,11 @@ gst_omx_video_dec_loop (GstOMXVideoDec * self)
GstClockTimeDiff deadline;
OMX_ERRORTYPE err;
+ if (!gst_pad_is_active(GST_VIDEO_DECODER_SRC_PAD (self))) {
+ GST_DEBUG_OBJECT (self, "Src pad not active, not acquiring buffer and flushing instead");
+ goto flushing;
+ }
+
#if defined (USE_OMX_TARGET_RPI) && defined (HAVE_GST_GL)
port = self->eglimage ? self->egl_out_port : self->dec_out_port;
#else
--
1.8.3.2

View File

@ -0,0 +1,15 @@
diff --git a/omx/gstomx.c b/omx/gstomx.c
index 69696c4..c382019 100644
--- a/omx/gstomx.c
+++ b/omx/gstomx.c
@@ -1508,8 +1508,8 @@ gst_omx_port_set_flushing (GstOMXPort * port, GstClockTime timeout,
last_error = OMX_ErrorNone;
gst_omx_component_handle_messages (comp);
while (signalled && last_error == OMX_ErrorNone && !port->flushed
- && port->buffers
- && port->buffers->len > g_queue_get_length (&port->pending_buffers)) {
+ /* && port->buffers
+ && port->buffers->len > g_queue_get_length (&port->pending_buffers) */) {
signalled = gst_omx_component_wait_message (comp, timeout);
if (signalled)
gst_omx_component_handle_messages (comp);

View File

@ -0,0 +1,19 @@
#
# Need to make this conditional to gstreamer1
#
SRC_URI_append_rpi = " \
file://0001-config-files-path.patch \
file://0002-Don-t-try-to-acquire-buffer-when-src-pad-isn-t-activ.patch \
file://0003-fix-decoder-flushing.patch \
"
FILESEXTRAPATHS_prepend := "${THISDIR}/gstreamer1.0-omx:"
GSTREAMER_1_0_OMX_TARGET_rpi = "rpi"
GSTREAMER_1_0_OMX_CORE_NAME_rpi = "${libdir}/libopenmaxil.so"
# How to make this RPI specific?
EXTRA_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""
#examples only build with GL but not GLES, so disable it for RPI
EXTRA_OECONF_append_rpi = " --disable-examples"