diff options
-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; |