diff options
author | Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> | 2015-03-25 10:47:45 +0900 |
---|---|---|
committer | Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> | 2015-03-25 10:47:45 +0900 |
commit | 1c35920d85e424b3f65aa6df1dbde689dd6ec007 (patch) | |
tree | 58b2cacb3674111aad5a4ded694db0cef5cf55f3 /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')
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}"; |