diff options
author | Josep Torra <n770galaxy@gmail.com> | 2014-04-16 10:23:45 +0200 |
---|---|---|
committer | Josep Torra <n770galaxy@gmail.com> | 2014-04-24 13:46:55 +0200 |
commit | 342e1b158607a31adf83d1557fa3a130aa4de9ec (patch) | |
tree | 56b9bfb1e9218665d1fe6f1fc957705a73cdf6fd | |
parent | c8efb51335174800a27b564d22a165201cb6042e (diff) |
omxaudiosink: experiment with a tunneled clockaudiosink
-rw-r--r-- | omx/gstomxaudiosink.c | 76 | ||||
-rw-r--r-- | omx/gstomxaudiosink.h | 3 |
2 files changed, 79 insertions, 0 deletions
diff --git a/omx/gstomxaudiosink.c b/omx/gstomxaudiosink.c index d4fdab9..5a70ff0 100644 --- a/omx/gstomxaudiosink.c +++ b/omx/gstomxaudiosink.c @@ -275,6 +275,77 @@ gst_omx_audio_sink_volume_range_get (GstOMXAudioSink * self) return TRUE; } +#if 0 /*defined (USE_OMX_TARGET_RPI) */ +static gboolean +gst_omx_audio_sink_clock_add (GstOMXAudioSink * self) +{ + GstOMXAudioSinkClass *klass = GST_OMX_AUDIO_SINK_GET_CLASS (self); + gint port_index; + OMX_ERRORTYPE err; + OMX_PORT_PARAM_TYPE param; + + self->clock = + gst_omx_component_new (GST_OBJECT_CAST (self), klass->cdata.core_name, + "OMX.broadcom.clock", NULL, klass->cdata.hacks); + + if (!self->clock) + return FALSE; + + if (gst_omx_component_get_state (self->clock, + GST_CLOCK_TIME_NONE) != OMX_StateLoaded) + return FALSE; + + GST_OMX_INIT_STRUCT (¶m); + + err = + gst_omx_component_get_parameter (self->clock, OMX_IndexParamOtherInit, + ¶m); + if (err != OMX_ErrorNone) { + GST_WARNING_OBJECT (self, "Couldn't get port information: %s (0x%08x)", + gst_omx_error_to_string (err), err); + /* Fallback */ + port_index = 0; + } else { + GST_DEBUG_OBJECT (self, "Detected %u ports, starting at %u", + (guint) param.nPorts, (guint) param.nStartPortNumber); + port_index = param.nStartPortNumber + 0; + } + + self->clock_port = gst_omx_component_add_port (self->clock, port_index); + + if (!self->clock_port) + return FALSE; + + err = gst_omx_port_set_enabled (self->out_port, TRUE); + if (err != OMX_ErrorNone) { + GST_ERROR_OBJECT (self, "Failed to enable port: %s (0x%08x)", + gst_omx_error_to_string (err), err); + return FALSE; + } + + err = gst_omx_setup_tunnel (self->clock_port, self->out_port); + if (err != OMX_ErrorNone) { + GST_ERROR_OBJECT (self, "Failed to setup tunnel: %s (0x%08x)", + gst_omx_error_to_string (err), err); + return FALSE; + } + + err = gst_omx_component_set_state (self->clock, OMX_StateIdle); + if (err != OMX_ErrorNone) { + GST_ERROR_OBJECT (self, "Failed to set state idle: %s (0x%08x)", + gst_omx_error_to_string (err), err); + return FALSE; + } +#if 0 + if (gst_omx_component_get_state (self->clock, + GST_CLOCK_TIME_NONE) != OMX_StateIdle) + return FALSE; +#endif + + return TRUE; +} +#endif + static gboolean gst_omx_audio_sink_open (GstAudioSink * audiosink) { @@ -696,6 +767,11 @@ gst_omx_audio_sink_prepare (GstAudioSink * audiosink, goto configuration; } +#if 0 /*defined (USE_OMX_TARGET_RPI) */ + if (!gst_omx_audio_sink_clock_add (self)) + goto activation; +#endif + err = gst_omx_component_set_state (self->comp, OMX_StateIdle); if (err != OMX_ErrorNone) { GST_ERROR_OBJECT (self, "Failed to set state idle: %s (0x%08x)", diff --git a/omx/gstomxaudiosink.h b/omx/gstomxaudiosink.h index 6d4a8a7..9a64515 100644 --- a/omx/gstomxaudiosink.h +++ b/omx/gstomxaudiosink.h @@ -60,6 +60,9 @@ struct _GstOMXAudioSink /* < protected > */ GstOMXComponent *comp; GstOMXPort *in_port, *out_port; + + GstOMXComponent *clock; + GstOMXPort *clock_port; gboolean mute; gdouble volume; |