PurpleMedia * purple_media_manager_create_media(PurpleMediaManager *manager, PurpleAccount *account, const char *conference_type, const char *remote_user, gboolean initiator) { #ifdef USE_VV PurpleMedia *media; gboolean signal_ret; media = PURPLE_MEDIA(g_object_new(purple_media_get_type(), "manager", manager, "account", account, "conference-type", conference_type, "initiator", initiator, NULL)); g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0, media, account, remote_user, &signal_ret); if (signal_ret == FALSE) { g_object_unref(media); return NULL; } manager->priv->medias = g_list_append(manager->priv->medias, media); return media; #else return NULL; #endif }
static void purple_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { PurpleMedia *media; g_return_if_fail(PURPLE_IS_MEDIA(object)); media = PURPLE_MEDIA(object); switch (prop_id) { case PROP_MANAGER: g_value_set_object(value, media->priv->manager); break; case PROP_BACKEND: g_value_set_object(value, media->priv->backend); break; case PROP_ACCOUNT: g_value_set_pointer(value, media->priv->account); break; case PROP_CONFERENCE_TYPE: g_value_set_string(value, media->priv->conference_type); break; case PROP_INITIATOR: g_value_set_boolean(value, media->priv->initiator); break; case PROP_PRPL_DATA: g_value_set_pointer(value, media->priv->prpl_data); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void purple_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { PurpleMedia *media; g_return_if_fail(PURPLE_IS_MEDIA(object)); media = PURPLE_MEDIA(object); switch (prop_id) { case PROP_MANAGER: media->priv->manager = g_value_dup_object(value); break; case PROP_ACCOUNT: media->priv->account = g_value_get_pointer(value); break; case PROP_CONFERENCE_TYPE: media->priv->conference_type = g_value_dup_string(value); media->priv->backend = g_object_new( purple_media_manager_get_backend_type( purple_media_manager_get()), "conference-type", media->priv->conference_type, "media", media, NULL); g_signal_connect(media->priv->backend, "active-candidate-pair", G_CALLBACK( purple_media_candidate_pair_established_cb), media); g_signal_connect(media->priv->backend, "candidates-prepared", G_CALLBACK( purple_media_candidates_prepared_cb), media); g_signal_connect(media->priv->backend, "codecs-changed", G_CALLBACK( purple_media_codecs_changed_cb), media); g_signal_connect(media->priv->backend, "new-candidate", G_CALLBACK( purple_media_new_local_candidate_cb), media); break; case PROP_INITIATOR: media->priv->initiator = g_value_get_boolean(value); break; case PROP_PRPL_DATA: media->priv->prpl_data = g_value_get_pointer(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
PurpleMedia * purple_media_manager_create_media(PurpleMediaManager *manager, PurpleAccount *account, const char *conference_type, const char *remote_user, gboolean initiator) { #ifdef USE_VV PurpleMedia *media; FsConference *conference = FS_CONFERENCE(gst_element_factory_make(conference_type, NULL)); GstStateChangeReturn ret; gboolean signal_ret; if (conference == NULL) { purple_conv_present_error(remote_user, account, _("Error creating conference.")); purple_debug_error("media", "Conference == NULL\n"); return NULL; } media = PURPLE_MEDIA(g_object_new(purple_media_get_type(), "manager", manager, "account", account, "conference", conference, "initiator", initiator, NULL)); ret = gst_element_set_state(GST_ELEMENT(conference), GST_STATE_PLAYING); if (ret == GST_STATE_CHANGE_FAILURE) { purple_conv_present_error(remote_user, account, _("Error creating conference.")); purple_debug_error("media", "Failed to start conference.\n"); g_object_unref(media); return NULL; } g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0, media, account, remote_user, &signal_ret); if (signal_ret == FALSE) { g_object_unref(media); return NULL; } manager->priv->medias = g_list_append(manager->priv->medias, media); return media; #else return NULL; #endif }
static void purple_media_dispose(GObject *media) { PurpleMediaPrivate *priv = PURPLE_MEDIA_GET_PRIVATE(media); purple_debug_info("media","purple_media_dispose\n"); purple_media_manager_remove_media(priv->manager, PURPLE_MEDIA(media)); if (priv->backend) { g_object_unref(priv->backend); priv->backend = NULL; } if (priv->manager) { g_object_unref(priv->manager); priv->manager = NULL; } G_OBJECT_CLASS(parent_class)->dispose(media); }