summaryrefslogtreecommitdiffstats
path: root/common/recipes-multimedia/gstreamer/gst-openmax
diff options
context:
space:
mode:
authorNobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>2015-03-25 10:47:45 +0900
committerNobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>2015-03-25 10:47:45 +0900
commit1c35920d85e424b3f65aa6df1dbde689dd6ec007 (patch)
tree58b2cacb3674111aad5a4ded694db0cef5cf55f3 /common/recipes-multimedia/gstreamer/gst-openmax
commit BSP v1.8.0
Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Diffstat (limited to 'common/recipes-multimedia/gstreamer/gst-openmax')
-rw-r--r--common/recipes-multimedia/gstreamer/gst-openmax/0001-Stop-using-deprecated-GLib-thread-API.patch335
-rw-r--r--common/recipes-multimedia/gstreamer/gst-openmax/0001-base_videodec-change-the-tile-height-for-T-L-address.patch27
-rw-r--r--common/recipes-multimedia/gstreamer/gst-openmax/disable_configure.patch15
-rw-r--r--common/recipes-multimedia/gstreamer/gst-openmax/gst-openmax.conf7
4 files changed, 384 insertions, 0 deletions
diff --git a/common/recipes-multimedia/gstreamer/gst-openmax/0001-Stop-using-deprecated-GLib-thread-API.patch b/common/recipes-multimedia/gstreamer/gst-openmax/0001-Stop-using-deprecated-GLib-thread-API.patch
new file mode 100644
index 0000000..34b51fa
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gst-openmax/0001-Stop-using-deprecated-GLib-thread-API.patch
@@ -0,0 +1,335 @@
+From 4244ae9ac47f9a72f10797dcf71ca4427393528d Mon Sep 17 00:00:00 2001
+From: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
+Date: Mon, 22 Apr 2013 15:06:19 +0900
+Subject: [PATCH] Stop using deprecated GLib thread API
+
+Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
+---
+ omx/gstomx_base_filter.c | 12 ++++-----
+ omx/gstomx_base_filter.h | 2 +-
+ omx/gstomx_util.c | 62 ++++++++++++++++++++++++----------------------
+ omx/gstomx_util.h | 8 +++---
+ 4 files changed, 44 insertions(+), 40 deletions(-)
+
+diff --git a/omx/gstomx_base_filter.c b/omx/gstomx_base_filter.c
+index 674dcaa..46120b7 100644
+--- a/omx/gstomx_base_filter.c
++++ b/omx/gstomx_base_filter.c
+@@ -121,7 +121,7 @@ change_state (GstElement * element, GstStateChange transition)
+
+ switch (transition) {
+ case GST_STATE_CHANGE_PAUSED_TO_READY:
+- g_mutex_lock (self->ready_lock);
++ g_mutex_lock (&self->ready_lock);
+ if (self->ready) {
+ /* unlock */
+ g_omx_port_finish (self->in_port);
+@@ -131,7 +131,7 @@ change_state (GstElement * element, GstStateChange transition)
+ g_omx_core_unload (core);
+ self->ready = FALSE;
+ }
+- g_mutex_unlock (self->ready_lock);
++ g_mutex_unlock (&self->ready_lock);
+ if (core->omx_state != OMX_StateLoaded &&
+ core->omx_state != OMX_StateInvalid) {
+ ret = GST_STATE_CHANGE_FAILURE;
+@@ -163,7 +163,7 @@ finalize (GObject * obj)
+
+ g_omx_core_free (self->gomx);
+
+- g_mutex_free (self->ready_lock);
++ g_mutex_clear (&self->ready_lock);
+
+ G_OBJECT_CLASS (parent_class)->finalize (obj);
+ }
+@@ -576,7 +576,7 @@ pad_chain (GstPad * pad, GstBuffer * buf)
+ GST_LOG_OBJECT (self, "state: %d", gomx->omx_state);
+
+ if (G_UNLIKELY (gomx->omx_state == OMX_StateLoaded)) {
+- g_mutex_lock (self->ready_lock);
++ g_mutex_lock (&self->ready_lock);
+
+ GST_INFO_OBJECT (self, "omx: prepare");
+
+@@ -594,7 +594,7 @@ pad_chain (GstPad * pad, GstBuffer * buf)
+ gst_pad_start_task (self->srcpad, output_loop, self->srcpad);
+ }
+
+- g_mutex_unlock (self->ready_lock);
++ g_mutex_unlock (&self->ready_lock);
+
+ if (gomx->omx_state != OMX_StateIdle)
+ goto out_flushing;
+@@ -890,7 +890,7 @@ type_instance_init (GTypeInstance * instance, gpointer g_class)
+ self->in_port = g_omx_core_new_port (self->gomx, 0);
+ self->out_port = g_omx_core_new_port (self->gomx, 1);
+
+- self->ready_lock = g_mutex_new ();
++ g_mutex_init (&self->ready_lock);
+
+ self->sinkpad =
+ gst_pad_new_from_template (gst_element_class_get_pad_template
+diff --git a/omx/gstomx_base_filter.h b/omx/gstomx_base_filter.h
+index 3175b8a..632344c 100644
+--- a/omx/gstomx_base_filter.h
++++ b/omx/gstomx_base_filter.h
+@@ -49,7 +49,7 @@ struct GstOmxBaseFilter
+
+ gboolean use_timestamps; /** @todo remove; timestamps should always be used */
+ gboolean ready;
+- GMutex *ready_lock;
++ GMutex ready_lock;
+
+ GstOmxBaseFilterCb omx_setup;
+ GstFlowReturn last_pad_push_return;
+diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c
+index aed5d4f..2c9d430 100644
+--- a/omx/gstomx_util.c
++++ b/omx/gstomx_util.c
+@@ -78,7 +78,7 @@ static OMX_CALLBACKTYPE callbacks =
+ { EventHandler, EmptyBufferDone, FillBufferDone };
+
+ /* protect implementations hash_table */
+-static GMutex *imp_mutex;
++static GMutex imp_mutex;
+ static GHashTable *implementations;
+ static gboolean initialized;
+
+@@ -151,7 +151,7 @@ imp_new (const gchar * name)
+ return NULL;
+ }
+
+- imp->mutex = g_mutex_new ();
++ g_mutex_init(&imp->mutex);
+ imp->sym_table.init = dlsym (handle, "OMX_Init");
+ imp->sym_table.deinit = dlsym (handle, "OMX_Deinit");
+ imp->sym_table.get_handle = dlsym (handle, "OMX_GetHandle");
+@@ -167,7 +167,7 @@ imp_free (GOmxImp * imp)
+ if (imp->dl_handle) {
+ dlclose (imp->dl_handle);
+ }
+- g_mutex_free (imp->mutex);
++ g_mutex_clear(&imp->mutex);
+ g_free (imp);
+ }
+
+@@ -177,19 +177,19 @@ request_imp (const gchar * name, gboolean disable_postproc)
+ GOmxImp *imp = NULL;
+ int retry = 1;
+
+- g_mutex_lock (imp_mutex);
++ g_mutex_lock (&imp_mutex);
+ imp = g_hash_table_lookup (implementations, name);
+ if (!imp) {
+ imp = imp_new (name);
+ if (imp)
+ g_hash_table_insert (implementations, g_strdup (name), imp);
+ }
+- g_mutex_unlock (imp_mutex);
++ g_mutex_unlock (&imp_mutex);
+
+ if (!imp)
+ return NULL;
+
+- g_mutex_lock (imp->mutex);
++ g_mutex_lock (&imp->mutex);
+ reinit:
+ if (imp->client_count == 0) {
+ OMX_ERRORTYPE (*r_config) (OMX_STRING path);
+@@ -200,7 +200,7 @@ reinit:
+ if (r_config)
+ omx_error = r_config (FILE_OMXR_CFG_NO_IPC);
+ if ((r_config == NULL) || (omx_error != OMX_ErrorNone)) {
+- g_mutex_unlock (imp->mutex);
++ g_mutex_unlock (&imp->mutex);
+ return NULL;
+ }
+ }
+@@ -211,12 +211,12 @@ reinit:
+ imp->sym_table.deinit ();
+ goto reinit;
+ }
+- g_mutex_unlock (imp->mutex);
++ g_mutex_unlock (&imp->mutex);
+ return NULL;
+ }
+ }
+ imp->client_count++;
+- g_mutex_unlock (imp->mutex);
++ g_mutex_unlock (&imp->mutex);
+
+ return imp;
+ }
+@@ -224,12 +224,12 @@ reinit:
+ static inline void
+ release_imp (GOmxImp * imp)
+ {
+- g_mutex_lock (imp->mutex);
++ g_mutex_lock (&imp->mutex);
+ imp->client_count--;
+ if (imp->client_count == 0) {
+ imp->sym_table.deinit ();
+ }
+- g_mutex_unlock (imp->mutex);
++ g_mutex_unlock (&imp->mutex);
+ }
+
+ void
+@@ -237,7 +237,7 @@ g_omx_init (void)
+ {
+ if (!initialized) {
+ /* safe as plugin_init is safe */
+- imp_mutex = g_mutex_new ();
++ g_mutex_init(&imp_mutex);
+ implementations = g_hash_table_new_full (g_str_hash,
+ g_str_equal, g_free, (GDestroyNotify) imp_free);
+ initialized = TRUE;
+@@ -249,7 +249,7 @@ g_omx_deinit (void)
+ {
+ if (initialized) {
+ g_hash_table_destroy (implementations);
+- g_mutex_free (imp_mutex);
++ g_mutex_clear (&imp_mutex);
+ initialized = FALSE;
+ }
+ }
+@@ -268,8 +268,8 @@ g_omx_core_new (void *object)
+ core->object = object;
+ core->ports = g_ptr_array_new ();
+
+- core->omx_state_condition = g_cond_new ();
+- core->omx_state_mutex = g_mutex_new ();
++ g_cond_init(&core->omx_state_condition);
++ g_mutex_init(&core->omx_state_mutex);
+
+ core->done_sem = g_sem_new ();
+ core->flush_sem = g_sem_new ();
+@@ -289,8 +289,8 @@ g_omx_core_free (GOmxCore * core)
+ g_sem_free (core->flush_sem);
+ g_sem_free (core->done_sem);
+
+- g_mutex_free (core->omx_state_mutex);
+- g_cond_free (core->omx_state_condition);
++ g_mutex_clear (&core->omx_state_mutex);
++ g_cond_clear (&core->omx_state_condition);
+
+ g_ptr_array_free (core->ports, TRUE);
+
+@@ -501,7 +501,7 @@ g_omx_port_new (GOmxCore * core, guint index)
+
+ port->enabled = TRUE;
+ port->queue = async_queue_new ();
+- port->mutex = g_mutex_new ();
++ g_mutex_init (&port->mutex);
+
+ return port;
+ }
+@@ -509,7 +509,7 @@ g_omx_port_new (GOmxCore * core, guint index)
+ void
+ g_omx_port_free (GOmxPort * port)
+ {
+- g_mutex_free (port->mutex);
++ g_mutex_clear (&port->mutex);
+ async_queue_free (port->queue);
+
+ g_free (port->buffers);
+@@ -726,7 +726,7 @@ g_omx_port_finish (GOmxPort * port)
+ static inline void
+ change_state (GOmxCore * core, OMX_STATETYPE state)
+ {
+- g_mutex_lock (core->omx_state_mutex);
++ g_mutex_lock (&core->omx_state_mutex);
+
+ GST_DEBUG_OBJECT (core->object, "state=%d", state);
+ OMX_SendCommand (core->omx_handle, OMX_CommandStateSet, state, NULL);
+@@ -735,13 +735,13 @@ change_state (GOmxCore * core, OMX_STATETYPE state)
+ static inline void
+ complete_change_state (GOmxCore * core, OMX_STATETYPE state)
+ {
+- g_mutex_lock (core->omx_state_mutex);
++ g_mutex_lock (&core->omx_state_mutex);
+
+ core->omx_state = state;
+- g_cond_signal (core->omx_state_condition);
++ g_cond_signal (&core->omx_state_condition);
+ GST_DEBUG_OBJECT (core->object, "state=%d", state);
+
+- g_mutex_unlock (core->omx_state_mutex);
++ g_mutex_unlock (&core->omx_state_mutex);
+ }
+
+ static inline void
+@@ -755,9 +755,13 @@ wait_for_state (GOmxCore * core, OMX_STATETYPE state)
+
+ /* try once */
+ if (core->omx_state != state) {
++ gint64 t = g_get_monotonic_time () +
++ ((gint64)tv.tv_sec * G_USEC_PER_SEC + tv.tv_usec -
++ g_get_real_time ());
++
+ signaled =
+- g_cond_timed_wait (core->omx_state_condition, core->omx_state_mutex,
+- &tv);
++ g_cond_wait_until (&core->omx_state_condition, &core->omx_state_mutex,
++ t);
+
+ if (!signaled) {
+ GST_ERROR_OBJECT (core->object, "timed out switching from '%s' to '%s'",
+@@ -774,7 +778,7 @@ wait_for_state (GOmxCore * core, OMX_STATETYPE state)
+ }
+
+ leave:
+- g_mutex_unlock (core->omx_state_mutex);
++ g_mutex_unlock (&core->omx_state_mutex);
+ }
+
+ /*
+@@ -926,9 +930,9 @@ EventHandler (OMX_HANDLETYPE omx_handle,
+ */
+ if (is_err_type_state_change (core->omx_error)) {
+ /* unlock wait_for_state */
+- g_mutex_lock (core->omx_state_mutex);
+- g_cond_signal (core->omx_state_condition);
+- g_mutex_unlock (core->omx_state_mutex);
++ g_mutex_lock (&core->omx_state_mutex);
++ g_cond_signal (&core->omx_state_condition);
++ g_mutex_unlock (&core->omx_state_mutex);
+ }
+
+ GST_ELEMENT_ERROR (core->object, STREAM, FAILED, (NULL),
+diff --git a/omx/gstomx_util.h b/omx/gstomx_util.h
+index b2a0de5..9a0f062 100644
+--- a/omx/gstomx_util.h
++++ b/omx/gstomx_util.h
+@@ -65,7 +65,7 @@ struct GOmxImp
+ guint client_count;
+ void *dl_handle;
+ GOmxSymbolTable sym_table;
+- GMutex *mutex;
++ GMutex mutex;
+ };
+
+ struct GOmxCore
+@@ -76,8 +76,8 @@ struct GOmxCore
+ OMX_ERRORTYPE omx_error;
+
+ OMX_STATETYPE omx_state;
+- GCond *omx_state_condition;
+- GMutex *omx_state_mutex;
++ GCond omx_state_condition;
++ GMutex omx_state_mutex;
+
+ GPtrArray *ports;
+
+@@ -107,7 +107,7 @@ struct GOmxPort
+ guint port_index;
+ OMX_BUFFERHEADERTYPE **buffers;
+
+- GMutex *mutex;
++ GMutex mutex;
+ gboolean enabled;
+ gboolean omx_allocate; /**< Setup with OMX_AllocateBuffer rather than OMX_UseBuffer */
+ AsyncQueue *queue;
+--
+1.7.9.5
+
diff --git a/common/recipes-multimedia/gstreamer/gst-openmax/0001-base_videodec-change-the-tile-height-for-T-L-address.patch b/common/recipes-multimedia/gstreamer/gst-openmax/0001-base_videodec-change-the-tile-height-for-T-L-address.patch
new file mode 100644
index 0000000..9f2dca2
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gst-openmax/0001-base_videodec-change-the-tile-height-for-T-L-address.patch
@@ -0,0 +1,27 @@
+From 5ae3622b9711655479744ed8a95c20d095dcbf1e Mon Sep 17 00:00:00 2001
+From: Kazunori Kobayashi <kkobayas@igel.co.jp>
+Date: Wed, 10 Apr 2013 11:05:30 +0900
+Subject: [PATCH] base_videodec: change the tile height for T/L addressing
+
+This change is added to follow the change of the tile height to be
+tuned for the R-CarM1A in the REL OMX.
+---
+ omx/gstomx_base_videodec.c | 2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/omx/gstomx_base_videodec.c b/omx/gstomx_base_videodec.c
+index 247f596..da5585d 100644
+--- a/omx/gstomx_base_videodec.c
++++ b/omx/gstomx_base_videodec.c
+@@ -203,7 +203,7 @@ settings_changed_cb (GOmxCore * core)
+ ALIGN2UP (stride, stride);
+ chroma_byte_offset = stride * ALIGN32 (sliceheight);
+ #define OMXR_TILE_WIDTH 32
+-#define OMXR_TILE_HEIGHT 8
++#define OMXR_TILE_HEIGHT 16
+ gst_structure_set (struc, "tile-width", G_TYPE_INT, OMXR_TILE_WIDTH,
+ NULL);
+ gst_structure_set (struc, "tile-height", G_TYPE_INT, OMXR_TILE_HEIGHT,
+--
+1.7.5.4
+
diff --git a/common/recipes-multimedia/gstreamer/gst-openmax/disable_configure.patch b/common/recipes-multimedia/gstreamer/gst-openmax/disable_configure.patch
new file mode 100644
index 0000000..863a8b2
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gst-openmax/disable_configure.patch
@@ -0,0 +1,15 @@
+diff --git a/autogen.sh b/autogen.sh
+index e69af6d..081ac8c 100755
+--- a/autogen.sh
++++ b/autogen.sh
+@@ -112,10 +112,3 @@ test ! -z "$CONFIGURE_DEF_OPT" && echo " ./configure default flags: $CONFIGURE_
+ test ! -z "$CONFIGURE_EXT_OPT" && echo " ./configure external flags: $CONFIGURE_EXT_OPT"
+ test ! -z "$CONFIGURE_FILE_OPT" && echo " ./configure enable/disable flags: $CONFIGURE_FILE_OPT"
+ echo
+-
+-./configure $CONFIGURE_DEF_OPT $CONFIGURE_EXT_OPT $CONFIGURE_FILE_OPT || {
+- echo " configure failed"
+- exit 1
+-}
+-
+-echo "Now type 'make' to compile $package."
diff --git a/common/recipes-multimedia/gstreamer/gst-openmax/gst-openmax.conf b/common/recipes-multimedia/gstreamer/gst-openmax/gst-openmax.conf
new file mode 100644
index 0000000..0e4e4a0
--- /dev/null
+++ b/common/recipes-multimedia/gstreamer/gst-openmax/gst-openmax.conf
@@ -0,0 +1,7 @@
+omx_h264dec,
+ type=GstOmxH264Dec,
+ library-name=libomxshvpu5avc.so,
+ component-name=OMX.re.video_decoder.avc,
+ rank=256,
+ src=video/x-raw-yuv,
+ sink="video/x-h264, stream-format={avc,byte-stream}";