Exemplo n.º 1
0
static void
gst_bus_dispose (GObject * object)
{
  GstBus *bus;

  bus = GST_BUS (object);

  if (bus->queue) {
    GstMessage *message;

    g_mutex_lock (bus->queue_lock);
    do {
      message = g_queue_pop_head (bus->queue);
      if (message)
        gst_message_unref (message);
    } while (message != NULL);
    g_queue_free (bus->queue);
    bus->queue = NULL;
    g_mutex_unlock (bus->queue_lock);
    g_mutex_free (bus->queue_lock);
    bus->queue_lock = NULL;
    g_cond_free (bus->priv->queue_cond);
    bus->priv->queue_cond = NULL;
  }

  if (bus->priv->main_context) {
    g_main_context_unref (bus->priv->main_context);
    bus->priv->main_context = NULL;
  }

  G_OBJECT_CLASS (parent_class)->dispose (object);
}
Exemplo n.º 2
0
static void
gst_bus_dispose (GObject * object)
{
  GstBus *bus = GST_BUS (object);

  if (bus->priv->queue) {
    GstMessage *message;

    g_mutex_lock (&bus->priv->queue_lock);
    do {
      message = gst_atomic_queue_pop (bus->priv->queue);
      if (message)
        gst_message_unref (message);
    } while (message != NULL);
    gst_atomic_queue_unref (bus->priv->queue);
    bus->priv->queue = NULL;
    g_mutex_unlock (&bus->priv->queue_lock);
    g_mutex_clear (&bus->priv->queue_lock);

    if (bus->priv->poll)
      gst_poll_free (bus->priv->poll);
    bus->priv->poll = NULL;
  }

  G_OBJECT_CLASS (parent_class)->dispose (object);
}
Exemplo n.º 3
0
static void on_pipeline_proxy_signal(GDBusProxy *proxy, gchar *sender_name, gchar *signal_name,
	GVariant *parameters, gpointer user_data)
{
	GstBus *bus = GST_BUS(user_data);

	g_print("Sender name: %s\n", sender_name);
	g_print("signal name: %s\n", signal_name);
}
Exemplo n.º 4
0
static void
gst_bus_finalize (GObject * object)
{
  GstBus *bus = GST_BUS (object);

  if (bus->priv->sync_handler_notify)
    bus->priv->sync_handler_notify (bus->priv->sync_handler_data);

  G_OBJECT_CLASS (parent_class)->finalize (object);
}
Exemplo n.º 5
0
static void
gst_bus_get_property (GObject * object, guint prop_id,
    GValue * value, GParamSpec * pspec)
{
  GstBus *bus;

  bus = GST_BUS (object);

  switch (prop_id) {
    default:
      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
      break;
  }
}
Exemplo n.º 6
0
static VALUE
rg_set_xwindow_id_with_buswatch(VALUE self, VALUE bus,
                                              VALUE x_window_id)
{
    struct xid_callback_data* xid_cb_data;
    GObject *sink;

    xid_cb_data = g_slice_new(struct xid_callback_data);
    xid_cb_data->xid = NUM2ULL(x_window_id);
    xid_cb_data->bus = RVAL2GOBJ(bus);

    sink = RVAL2GOBJ(self);
    g_object_set_qdata_full(sink, xoverlay_xid_data_quark,
                            xid_cb_data, xid_callback_data_destroy_cb);

    gst_bus_enable_sync_message_emission(GST_BUS(xid_cb_data->bus));
    xid_cb_data->cb_id =
        g_signal_connect_object(xid_cb_data->bus, "sync-message",
                                G_CALLBACK(bus_sync_func_cb), sink, 0);
    return self;
}
Exemplo n.º 7
0
/**
 * 初始化声音系统.
 */
void SoundSystem::InitSublayer()
{
        GstElement *pipeline;
        GstElement *filesrc, *decode, *volume, *convert, *sink;
        GstBus *bus;

        gst_init(NULL, NULL);
        pipeline = gst_pipeline_new("sound-system");
        g_datalist_set_data_full(&eltset, "pipeline-element", pipeline,
                                 GDestroyNotify(gst_object_unref));
        filesrc = gst_element_factory_make("filesrc", "source");
        g_datalist_set_data(&eltset, "filesrc-element", filesrc);
        decode = gst_element_factory_make("decodebin", "decode");
        g_datalist_set_data(&eltset, "decode-element", decode);
        volume = gst_element_factory_make("volume", "volume");
        g_datalist_set_data(&eltset, "volume-element", volume);
        convert = gst_element_factory_make("audioconvert", "convert");
        g_datalist_set_data(&eltset, "convert-element", convert);
        sink = gst_element_factory_make("autoaudiosink", "output");
        g_datalist_set_data(&eltset, "output-element", sink);

        gst_bin_add_many(GST_BIN(pipeline), filesrc, decode, volume, convert, sink, NULL);
        gst_element_link_many(filesrc, decode, NULL);
        gst_element_link_many(volume, convert, sink, NULL);
        g_signal_connect_swapped(decode, "pad-added", G_CALLBACK(LinkElement), &eltset);

        bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
        gst_bus_add_signal_watch(GST_BUS(bus));
        g_signal_connect_swapped(bus, "message::error",
                         G_CALLBACK(ErrorMessageOccur), this);
        g_signal_connect_swapped(bus, "message::eos",
                         G_CALLBACK(EosMessageOccur), this);
        gst_object_unref(bus);

        g_object_set(volume, "volume", progdt.volume, NULL);
}
Exemplo n.º 8
0
GstElement *
purple_media_manager_get_pipeline(PurpleMediaManager *manager)
{
#ifdef USE_VV
	g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), NULL);

	if (manager->priv->pipeline == NULL) {
		FsElementAddedNotifier *notifier;
		gchar *filename;
		GError *err = NULL;
		GKeyFile *keyfile;
		GstBus *bus;
		manager->priv->pipeline = gst_pipeline_new(NULL);

		bus = gst_pipeline_get_bus(
				GST_PIPELINE(manager->priv->pipeline));
		gst_bus_add_signal_watch(GST_BUS(bus));
		g_signal_connect(G_OBJECT(bus), "message",
				G_CALLBACK(pipeline_bus_call), manager);
		gst_bus_set_sync_handler(bus,
				gst_bus_sync_signal_handler, NULL);
		gst_object_unref(bus);

		filename = g_build_filename(purple_user_dir(),
				"fs-element.conf", NULL);
		keyfile = g_key_file_new();
		if (!g_key_file_load_from_file(keyfile, filename,
				G_KEY_FILE_NONE, &err)) {
			if (err->code == 4)
				purple_debug_info("mediamanager",
						"Couldn't read "
						"fs-element.conf: %s\n",
						err->message);
			else
				purple_debug_error("mediamanager",
						"Error reading "
						"fs-element.conf: %s\n",
						err->message);
			g_error_free(err);
		}
		g_free(filename);

		/* Hack to make alsasrc stop messing up audio timestamps */
		if (!g_key_file_has_key(keyfile,
				"alsasrc", "slave-method", NULL)) {
			g_key_file_set_integer(keyfile,
					"alsasrc", "slave-method", 2);
		}

		notifier = fs_element_added_notifier_new();
		fs_element_added_notifier_add(notifier,
				GST_BIN(manager->priv->pipeline));
		fs_element_added_notifier_set_properties_from_keyfile(
				notifier, keyfile);

		gst_element_set_state(manager->priv->pipeline,
				GST_STATE_PLAYING);
	}

	return manager->priv->pipeline;
#else
	return NULL;
#endif
}