static void screen_ask_cb()

in prpl/chat.c [693:764]


static void screen_ask_cb(gpointer _chat, int choice)
{
	struct chime_chat *chat = _chat;

	chat->screen_ask_ui = NULL;
	if (choice)
		return;

	const gchar *name = chat->screen_title;

	PurpleMediaManager *mgr = purple_media_manager_get();
	chat->screen_media = purple_media_manager_create_media(purple_media_manager_get(),
							chat->conv->account,
							"fsrawconference",
							name,
							TRUE);
	if (!chat->screen_media) {
		/* XX: Report error, but not with purple_media_error()! */
		return;
	}

	g_signal_connect(chat->screen_media, "state-changed", G_CALLBACK(screen_media_changed), chat);

	if (!purple_media_add_stream(chat->screen_media, "chime", name,
				     PURPLE_MEDIA_RECV_VIDEO, TRUE,
				     "app", 0, NULL)) {

		purple_media_error(chat->screen_media, _("Error adding media stream\n"));
		purple_media_end(chat->screen_media, NULL, NULL);
		chat->screen_media = NULL;
		return;
	}

	gchar *srcname = g_strdup_printf("chime_screen_src_%p", chat->call);
	gchar *srcpipe = g_strdup_printf("appsrc name=%s format=time do-timestamp=TRUE is-live=TRUE caps=video/x-vp8,width=1,height=1,framerate=30/1 ! vp8dec ! videoconvert", srcname);
	PurpleMediaCandidate *cand =
		purple_media_candidate_new(NULL, 1,
					   PURPLE_MEDIA_CANDIDATE_TYPE_HOST,
					   PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
					   NULL, 16000);
	g_object_set(cand, "username", srcpipe, NULL);
	g_free(srcpipe);

	GList *cands = g_list_append (NULL, cand);
	purple_media_add_remote_candidates(chat->screen_media, "chime", name, cands);
	purple_media_candidate_list_free(cands);

	GList *codecs = g_list_append(NULL,
				      purple_media_codec_new(97, "video/x-raw", PURPLE_MEDIA_VIDEO, 0));

	if (!purple_media_set_remote_codecs(chat->screen_media, "chime", name, codecs)) {
		purple_media_codec_list_free(codecs);
		purple_media_error(chat->screen_media, _("Error setting video codec\n"));
		purple_media_end(chat->screen_media, NULL, NULL);
		chat->screen_media = NULL;
		return;
	}
	purple_media_codec_list_free(codecs);

	GstElement *pipeline = purple_media_manager_get_pipeline(mgr);
	GstElement *appsrc = gst_bin_get_by_name(GST_BIN(pipeline), srcname);
	g_free(srcname);

	gst_app_src_set_size(GST_APP_SRC(appsrc), -1);
	//	gst_app_src_set_max_bytes(GST_APP_SRC(appsrc), 100);
	gst_app_src_set_stream_type(GST_APP_SRC(appsrc), GST_APP_STREAM_TYPE_STREAM);
	chime_call_view_screen(PURPLE_CHIME_CXN(chat->conv->account->gc), chat->call, GST_APP_SRC(appsrc));
	g_object_unref(appsrc);

	GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(purple_media_manager_get_pipeline(mgr)),
				  GST_DEBUG_GRAPH_SHOW_ALL, "chime screen graph");
}