static GstFlowReturn gst_shout2send_render (GstBaseSink * basesink, GstBuffer * buf) { GstShout2send *sink; glong ret; gint delay; GstFlowReturn fret; GstMapInfo map; sink = GST_SHOUT2SEND (basesink); /* presumably we connect here because we need to know the format before * we can set up the connection, which we don't know yet in _start() */ if (!sink->connected) { if (!gst_shout2send_connect (sink)) return GST_FLOW_ERROR; } delay = shout_delay (sink->conn); if (delay > 0) { GST_LOG_OBJECT (sink, "waiting %d msec", delay); if (gst_poll_wait (sink->timer, GST_MSECOND * delay) == -1) { GST_LOG_OBJECT (sink, "unlocked"); fret = gst_base_sink_wait_preroll (basesink); if (fret != GST_FLOW_OK) return fret; } } else { GST_LOG_OBJECT (sink, "we're %d msec late", -delay); } gst_buffer_map (buf, &map, GST_MAP_READ); GST_LOG_OBJECT (sink, "sending %u bytes of data", (guint) map.size); ret = shout_send (sink->conn, map.data, map.size); gst_buffer_unmap (buf, &map); if (ret != SHOUTERR_SUCCESS) goto send_error; return GST_FLOW_OK; /* ERRORS */ send_error: { GST_ELEMENT_ERROR (sink, RESOURCE, WRITE, (NULL), ("shout_send() failed: %s", shout_get_error (sink->conn))); g_signal_emit (sink, gst_shout2send_signals[SIGNAL_CONNECTION_PROBLEM], 0, shout_get_errno (sink->conn)); return GST_FLOW_ERROR; } }
static PyObject* pshoutobj_delay(ShoutObject* self) { return Py_BuildValue("i", shout_delay(self->conn)); }