// *** main
int main() {
  //makeing a follower
  ShmdataLogger logger = shmdata_make_logger(&mylog, 
                                             &mylog, 
                                             &mylog, 
                                             &mylog, 
                                             &mylog, 
                                             &mylog, 
                                             NULL); 
  assert(NULL != logger); 
  ShmdataFollower follower = shmdata_make_follower("/tmp/check-shmdatasink", 
                                                   &on_data, 
                                                   &on_server_connect, 
                                                   &on_server_disconnect, 
                                                   NULL, 
                                                   logger); 
  assert(NULL != follower); 
  //gstreamer shmdatasink for writing
  GstElement *pipeline, *audiosource, *shmdatasink;
  GstBus *bus;
  guint bus_watch_id;
  gst_init(NULL, NULL);
#ifdef HAVE_CONFIG_H
  GstRegistry *registry = gst_registry_get();
  gst_registry_scan_path(registry, "./" LT_OBJDIR);
#else
  g_printerr("shmdatasink plugin not found");
return -1;
#endif
  loop = g_main_loop_new(NULL, FALSE);
  /* Create gstreamer elements */
  pipeline = gst_pipeline_new("audio-player");
  audiosource = gst_element_factory_make("audiotestsrc", "audiosource");
  shmdatasink = gst_element_factory_make("shmdatasink", "shmdata-output");
  if (!pipeline || !audiosource || !shmdatasink) {
    g_printerr("One element could not be created. Exiting.\n"); return -1; }
  g_object_set(G_OBJECT(shmdatasink), "socket-path", "/tmp/check-shmdatasink", NULL);
  bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
  bus_watch_id = gst_bus_add_watch(bus, bus_call, loop);
  gst_object_unref(bus);
  gst_bin_add_many(GST_BIN(pipeline), audiosource, shmdatasink, NULL);
  gst_element_link(audiosource, shmdatasink);
  gst_element_set_state(pipeline, GST_STATE_PLAYING);
  g_main_loop_run(loop);
  // cleaning gst
  gst_element_set_state(pipeline, GST_STATE_NULL);
  gst_object_unref(GST_OBJECT(pipeline));
  g_source_remove(bus_watch_id);
  g_main_loop_unref(loop);
  // cleaning follower 
  shmdata_delete_follower(follower); 
  shmdata_delete_logger(logger); 
  return res;
}
Beispiel #2
0
static gboolean gst_shmdata_sink_on_caps (GstBaseSink *sink, GstCaps *caps){
  GstShmdataSink *self = GST_SHMDATA_SINK (sink);
  if (NULL == self->socket_path) { 
    GST_ELEMENT_ERROR (self, RESOURCE, OPEN_READ_WRITE, 
        ("Could not make writer with no path."), (NULL)); 
    return FALSE; 
  } 

  GST_DEBUG_OBJECT (self, "Creating new socket at %s" 
      " with shared memory of %lu bytes", self->socket_path, self->size); 
  g_free(self->caps);
  self->caps = gst_caps_to_string (caps);
  g_object_notify(G_OBJECT(sink), "caps");

  GST_DEBUG_OBJECT(G_OBJECT(sink), "on_caps %s", self->caps);

  self->shmlogger = shmdata_make_logger(&gst_shmdata_on_error, 
                                        &gst_shmdata_on_critical, 
                                        &gst_shmdata_on_warning, 
                                        &gst_shmdata_on_message, 
                                        &gst_shmdata_on_info, 
                                        &gst_shmdata_on_debug, 
                                        self); 
  self->shmwriter = shmdata_make_writer(self->socket_path, 
                                        self->size, 
                                        NULL == self->caps ? "unknown" : self->caps, 
                                        &gst_shmdata_sink_on_client_connected,
                                        &gst_shmdata_sink_on_client_disconnected,
                                        self,
                                        self->shmlogger); 
  if (NULL == self->shmwriter) { 
    GST_ELEMENT_ERROR (self, RESOURCE, OPEN_READ_WRITE, 
        ("Could not make shmdata writer."), (NULL)); 
    return FALSE; 
  } 

  self->access = shmdata_get_one_write_access(self->shmwriter);

  GST_DEBUG ("Created shmdata writer at %s", self->socket_path); 
  self->allocator = gst_shmdata_sink_allocator_new (self); 

  return TRUE;
}
Beispiel #3
0
static gboolean
gst_shmdata_src_start_reading (GstShmdataSrc * self)
{
  if (!self->socket_path) {
    GST_ELEMENT_ERROR (self, RESOURCE, NOT_FOUND,
                       ("No path specified for socket."), (NULL));
    return FALSE;
  }

  GST_DEBUG_OBJECT (self, "Opening socket %s", self->socket_path);

  GST_OBJECT_LOCK (self);
  self->is_first_read = TRUE;


  self->shmlogger = shmdata_make_logger(&gst_shmdata_on_error,
                                        &gst_shmdata_on_critical,
                                        &gst_shmdata_on_warning,
                                        &gst_shmdata_on_message,
                                        &gst_shmdata_on_info,
                                        &gst_shmdata_on_debug,
                                        self);
  self->shmfollower = shmdata_make_follower(self->socket_path,
                                            &gst_shmdata_src_on_data,
                                            &gst_shmdata_src_on_server_connect,
                                            &gst_shmdata_src_on_server_disconnect,
                                            self,
                                            self->shmlogger);
  GST_OBJECT_UNLOCK (self);

  if (!self->shmfollower) {
    GST_ELEMENT_ERROR (self, RESOURCE, OPEN_READ_WRITE,
                       ("Could not initialize shmdata follower %s", self->socket_path), (NULL));
    return FALSE;
  }

  return TRUE;
}