diff options
Diffstat (limited to 'omx/gstomxaudiosink.c')
-rw-r--r-- | omx/gstomxaudiosink.c | 76 |
1 files changed, 76 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)", |