From f0cbbad0f1229f1774632da5a9bef2af3d15a4c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Wed, 13 Jul 2011 20:37:02 +0200 Subject: [PATCH] omx: Add support for setting the component-role --- omx/gstomx.c | 21 ++++++++++++++++++++- omx/gstomx.h | 2 +- omx/gstomxvideodec.c | 14 ++++++++++++-- omx/gstomxvideodec.h | 1 + 4 files changed, 34 insertions(+), 4 deletions(-) diff --git a/omx/gstomx.c b/omx/gstomx.c index 335d843b9c..8ba0ab5540 100644 --- a/omx/gstomx.c +++ b/omx/gstomx.c @@ -314,7 +314,7 @@ static OMX_CALLBACKTYPE callbacks = GstOMXComponent * gst_omx_component_new (GstObject * parent, const gchar * core_name, - const gchar * component_name) + const gchar * component_name, const gchar * component_role) { OMX_ERRORTYPE err; GstOMXCore *core; @@ -354,6 +354,25 @@ gst_omx_component_new (GstObject * parent, const gchar * core_name, comp->settings_cookie = 0; comp->reconfigure_out_pending = 0; + /* Set component role if any */ + if (component_role) { + OMX_PARAM_COMPONENTROLETYPE param; + + memset (¶m, 0, sizeof (param)); + param.nSize = sizeof (param); + param.nVersion.s.nVersionMajor = 1; + param.nVersion.s.nVersionMinor = 1; + + g_strlcpy ((gchar *) param.cRole, component_role, sizeof (param.cRole)); + err = + OMX_SetParameter (comp->handle, OMX_IndexParamStandardComponentRole, + ¶m); + + GST_DEBUG_OBJECT (parent, "Setting component role to '%s': %s (0x%08x)", + component_role, gst_omx_error_to_string (err), err); + } + + OMX_GetState (comp->handle, &comp->state); return comp; diff --git a/omx/gstomx.h b/omx/gstomx.h index 70d729c38b..c6a9c2961b 100644 --- a/omx/gstomx.h +++ b/omx/gstomx.h @@ -155,7 +155,7 @@ GstOMXCore * gst_omx_core_acquire (const gchar * filename); void gst_omx_core_release (GstOMXCore * core); -GstOMXComponent * gst_omx_component_new (GstObject *parent, const gchar * core_name, const gchar * component_name); +GstOMXComponent * gst_omx_component_new (GstObject *parent, const gchar * core_name, const gchar * component_name, const gchar *component_role); void gst_omx_component_free (GstOMXComponent * comp); OMX_ERRORTYPE gst_omx_component_set_state (GstOMXComponent * comp, OMX_STATETYPE state); diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c index 43072b7433..069d1dd450 100644 --- a/omx/gstomxvideodec.c +++ b/omx/gstomxvideodec.c @@ -82,7 +82,7 @@ gst_omx_video_dec_base_init (gpointer g_class) GKeyFile *config; const gchar *element_name; GError *err; - gchar *core_name, *component_name; + gchar *core_name, *component_name, *component_role; gint in_port_index, out_port_index; gchar *template_caps; GstPadTemplate *templ; @@ -106,6 +106,16 @@ gst_omx_video_dec_base_init (gpointer g_class) g_assert (component_name != NULL); videodec_class->component_name = component_name; + /* If this fails we simply don't set a role */ + if ((component_role = + g_key_file_get_string (config, element_name, "component-role", + NULL))) { + GST_DEBUG ("Using component-role '%s' for element '%s'", component_role, + element_name); + videodec_class->component_role = component_role; + } + + /* Now set the inport/outport indizes and assume sane defaults */ err = NULL; in_port_index = @@ -222,7 +232,7 @@ gst_omx_video_dec_open (GstOMXVideoDec * self) self->component = gst_omx_component_new (GST_OBJECT_CAST (self), klass->core_name, - klass->component_name); + klass->component_name, klass->component_role); if (!self->component) return FALSE; diff --git a/omx/gstomxvideodec.h b/omx/gstomxvideodec.h index 53d5b70111..08458691a0 100644 --- a/omx/gstomxvideodec.h +++ b/omx/gstomxvideodec.h @@ -63,6 +63,7 @@ struct _GstOMXVideoDecClass const gchar *core_name; const gchar *component_name; + const gchar *component_role; const gchar *default_src_template_caps; const gchar *default_sink_template_caps;