Exemplo n.º 1
0
static void
free_buffer (gpointer data)
{
  struct GstShmBuffer *gsb = data;
  g_return_if_fail (gsb->pipe != NULL);
  g_return_if_fail (gsb->pipe->src != NULL);

  GST_LOG ("Freeing buffer %p", gsb->buf);

  GST_OBJECT_LOCK (gsb->pipe->src);
  sp_client_recv_finish (gsb->pipe->pipe, gsb->buf);
  GST_OBJECT_UNLOCK (gsb->pipe->src);

  gst_shm_pipe_dec (gsb->pipe);

  g_slice_free (struct GstShmBuffer, gsb);
}
Exemplo n.º 2
0
static gboolean
shm_reader_fd_cb (GIOChannel *source,
    GIOCondition condition,
    gpointer data)
{
  ShmReaderPrivate *priv = SHM_READER (data)->priv;

  if (condition & G_IO_IN)
    {
      gchar *buf;
      gulong ret;

      ret = sp_client_recv (priv->client, &buf);

      if (ret == -1)
        {
          goto error;
        }
      else if (ret > 0)
        {
          g_signal_emit (data, signals[SIGNAL_GOT_DATA], 0, ret, buf);

          if (sp_client_recv_finish (priv->client, buf) == 0)
            goto error;
        }
      /* else: it was a system message and already handled */
    }
  else if (condition & (G_IO_ERR | G_IO_HUP | G_IO_NVAL))
    {
      goto error;
    }

  return TRUE;

error:
  shm_reader_disconnect (data);
  return FALSE;

}