summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosep Torra <n770galaxy@gmail.com>2014-04-16 10:23:45 +0200
committerJosep Torra <n770galaxy@gmail.com>2014-04-24 13:46:55 +0200
commit342e1b158607a31adf83d1557fa3a130aa4de9ec (patch)
tree56b9bfb1e9218665d1fe6f1fc957705a73cdf6fd
parentc8efb51335174800a27b564d22a165201cb6042e (diff)
omxaudiosink: experiment with a tunneled clockaudiosink
-rw-r--r--omx/gstomxaudiosink.c76
-rw-r--r--omx/gstomxaudiosink.h3
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 (&param);
+
+ err =
+ gst_omx_component_get_parameter (self->clock, OMX_IndexParamOtherInit,
+ &param);
+ 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;