annotate libpurple/mediamanager.c @ 27884:f5580e1ca4b1

Fix unidirectional media sessions and add a colorspace before the video sink.
author maiku@pidgin.im
date Thu, 13 Aug 2009 04:55:29 +0000
parents d865064a3104
children f77978e6968e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
1 /**
23766
f0e32b734ef7 Cosmetics.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23762
diff changeset
2 * @file mediamanager.c Media Manager API
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
3 * @ingroup core
23865
b8a73b6dc0a4 * Added documentation to media.h and mediamanager.h
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23856
diff changeset
4 */
b8a73b6dc0a4 * Added documentation to media.h and mediamanager.h
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23856
diff changeset
5
b8a73b6dc0a4 * Added documentation to media.h and mediamanager.h
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23856
diff changeset
6 /* purple
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
7 *
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
8 * Purple is the legal property of its developers, whose names are too numerous
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
9 * to list here. Please refer to the COPYRIGHT file distributed with this
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
10 * source distribution.
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
11 *
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
12 * This program is free software; you can redistribute it and/or modify
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
13 * it under the terms of the GNU General Public License as published by
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
14 * the Free Software Foundation; either version 2 of the License, or
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
15 * (at your option) any later version.
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
16 *
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
17 * This program is distributed in the hope that it will be useful,
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
20 * GNU General Public License for more details.
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
21 *
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
22 * You should have received a copy of the GNU General Public License
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
23 * along with this program; if not, write to the Free Software
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
25 */
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
26
23766
f0e32b734ef7 Cosmetics.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23762
diff changeset
27 #include "internal.h"
f0e32b734ef7 Cosmetics.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23762
diff changeset
28
26524
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
29 #include "account.h"
24930
0baeafee93be Gracefully handle missing the fsrtpconference GStreamer plugin.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23876
diff changeset
30 #include "debug.h"
26349
1ae3af12095a Move GStreamer related media functions into its own header.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26307
diff changeset
31 #include "media.h"
26539
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
32 #include "mediamanager.h"
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
33
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
34 #ifdef USE_GSTREAMER
26563
75b473f216f2 Include the media API on win32 even though it isn't actually enabled.
Daniel Atallah <daniel.atallah@gmail.com>
parents: 26539
diff changeset
35 #include "marshallers.h"
26349
1ae3af12095a Move GStreamer related media functions into its own header.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26307
diff changeset
36 #include "media-gst.h"
26539
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
37 #endif
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
38
23804
cbe97caec684 Use USE_VV instead of USE_FARSIGHT.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23801
diff changeset
39 #ifdef USE_VV
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
40
23797
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23772
diff changeset
41 #include <gst/farsight/fs-conference-iface.h>
27833
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
42 #include <gst/farsight/fs-element-added-notifier.h>
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
43 #include <gst/interfaces/xoverlay.h>
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
44
26400
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
45 /** @copydoc _PurpleMediaManagerPrivate */
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
46 typedef struct _PurpleMediaManagerPrivate PurpleMediaManagerPrivate;
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
47 /** @copydoc _PurpleMediaOutputWindow */
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
48 typedef struct _PurpleMediaOutputWindow PurpleMediaOutputWindow;
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
49 /** @copydoc _PurpleMediaManagerPrivate */
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
50 typedef struct _PurpleMediaElementInfoPrivate PurpleMediaElementInfoPrivate;
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
51
26400
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
52 /** The media manager class. */
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
53 struct _PurpleMediaManagerClass
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
54 {
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
55 GObjectClass parent_class; /**< The parent class. */
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
56 };
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
57
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
58 /** The media manager's data. */
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
59 struct _PurpleMediaManager
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
60 {
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
61 GObject parent; /**< The parent of this manager. */
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
62 PurpleMediaManagerPrivate *priv; /**< Private data for the manager. */
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
63 };
84d09c6499f1 Hide the easy structs in mediamanager.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26392
diff changeset
64
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
65 struct _PurpleMediaOutputWindow
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
66 {
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
67 gulong id;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
68 PurpleMedia *media;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
69 gchar *session_id;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
70 gchar *participant;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
71 gulong window_id;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
72 GstElement *sink;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
73 };
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
74
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
75 struct _PurpleMediaManagerPrivate
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
76 {
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
77 GstElement *pipeline;
26390
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
78 PurpleMediaCaps ui_caps;
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
79 GList *medias;
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
80 GList *elements;
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
81 GList *output_windows;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
82 gulong next_output_window_id;
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
83
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
84 PurpleMediaElementInfo *video_src;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
85 PurpleMediaElementInfo *video_sink;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
86 PurpleMediaElementInfo *audio_src;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
87 PurpleMediaElementInfo *audio_sink;
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
88 };
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
89
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
90 #define PURPLE_MEDIA_MANAGER_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEDIA_MANAGER, PurpleMediaManagerPrivate))
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
91 #define PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PURPLE_TYPE_MEDIA_ELEMENT_INFO, PurpleMediaElementInfoPrivate))
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
92
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
93 static void purple_media_manager_class_init (PurpleMediaManagerClass *klass);
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
94 static void purple_media_manager_init (PurpleMediaManager *media);
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
95 static void purple_media_manager_finalize (GObject *object);
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
96
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
97 static GObjectClass *parent_class = NULL;
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
98
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
99
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
100
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
101 enum {
23762
70cdff43ec76 You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@gmail.com>
parents: 23761
diff changeset
102 INIT_MEDIA,
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
103 LAST_SIGNAL
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
104 };
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
105 static guint purple_media_manager_signals[LAST_SIGNAL] = {0};
26425
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
106 #endif
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
107
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
108 GType
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
109 purple_media_manager_get_type()
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
110 {
26425
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
111 #ifdef USE_VV
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
112 static GType type = 0;
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
113
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
114 if (type == 0) {
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
115 static const GTypeInfo info = {
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
116 sizeof(PurpleMediaManagerClass),
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
117 NULL,
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
118 NULL,
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
119 (GClassInitFunc) purple_media_manager_class_init,
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
120 NULL,
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
121 NULL,
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
122 sizeof(PurpleMediaManager),
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
123 0,
23772
750d700098c1 Fix the prplinfo structs and get rid of some compile warnings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23766
diff changeset
124 (GInstanceInitFunc) purple_media_manager_init,
750d700098c1 Fix the prplinfo structs and get rid of some compile warnings.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 23766
diff changeset
125 NULL
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
126 };
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
127 type = g_type_register_static(G_TYPE_OBJECT, "PurpleMediaManager", &info, 0);
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
128 }
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
129 return type;
26425
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
130 #else
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
131 return G_TYPE_NONE;
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
132 #endif
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
133 }
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
134
26425
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
135 #ifdef USE_VV
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
136 static void
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
137 purple_media_manager_class_init (PurpleMediaManagerClass *klass)
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
138 {
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
139 GObjectClass *gobject_class = (GObjectClass*)klass;
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
140 parent_class = g_type_class_peek_parent(klass);
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
141
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
142 gobject_class->finalize = purple_media_manager_finalize;
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
143
23762
70cdff43ec76 You can actually receive Google Talk voice calls with crappy UI now
Sean Egan <seanegan@gmail.com>
parents: 23761
diff changeset
144 purple_media_manager_signals[INIT_MEDIA] = g_signal_new ("init-media",
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
145 G_TYPE_FROM_CLASS (klass),
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
146 G_SIGNAL_RUN_LAST,
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
147 0, NULL, NULL,
24983
18b71033ea6e Remove connection attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24950
diff changeset
148 purple_smarshal_BOOLEAN__OBJECT_POINTER_STRING,
18b71033ea6e Remove connection attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24950
diff changeset
149 G_TYPE_BOOLEAN, 3, PURPLE_TYPE_MEDIA,
18b71033ea6e Remove connection attribute from PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24950
diff changeset
150 G_TYPE_POINTER, G_TYPE_STRING);
23761
2fda71133800 Some UI ;)
Sean Egan <seanegan@gmail.com>
parents: 23760
diff changeset
151 g_type_class_add_private(klass, sizeof(PurpleMediaManagerPrivate));
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
152 }
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
153
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
154 static void
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
155 purple_media_manager_init (PurpleMediaManager *media)
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
156 {
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
157 media->priv = PURPLE_MEDIA_MANAGER_GET_PRIVATE(media);
23761
2fda71133800 Some UI ;)
Sean Egan <seanegan@gmail.com>
parents: 23760
diff changeset
158 media->priv->medias = NULL;
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
159 media->priv->next_output_window_id = 1;
27849
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27834
diff changeset
160
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27834
diff changeset
161 purple_prefs_add_none("/purple/media");
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27834
diff changeset
162 purple_prefs_add_none("/purple/media/audio");
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27834
diff changeset
163 purple_prefs_add_none("/purple/media/audio/volume");
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27834
diff changeset
164 purple_prefs_add_int("/purple/media/audio/volume/input", 10);
c8ff0a9cf8cc Unlink the local audio volume and mute between sessions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27834
diff changeset
165 purple_prefs_add_int("/purple/media/audio/volume/output", 10);
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
166 }
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
167
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
168 static void
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
169 purple_media_manager_finalize (GObject *media)
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
170 {
23876
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
171 PurpleMediaManagerPrivate *priv = PURPLE_MEDIA_MANAGER_GET_PRIVATE(media);
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
172 for (; priv->medias; priv->medias =
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
173 g_list_delete_link(priv->medias, priv->medias)) {
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
174 g_object_unref(priv->medias->data);
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
175 }
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
176 for (; priv->elements; priv->elements =
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
177 g_list_delete_link(priv->elements, priv->elements)) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
178 g_object_unref(priv->elements->data);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
179 }
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
180 parent_class->finalize(media);
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
181 }
26425
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
182 #endif
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
183
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
184 PurpleMediaManager *
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
185 purple_media_manager_get()
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
186 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
187 #ifdef USE_VV
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
188 static PurpleMediaManager *manager = NULL;
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
189
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
190 if (manager == NULL)
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
191 manager = PURPLE_MEDIA_MANAGER(g_object_new(purple_media_manager_get_type(), NULL));
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
192 return manager;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
193 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
194 return NULL;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
195 #endif
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
196 }
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
197
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
198 #ifdef USE_VV
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
199 static gboolean
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
200 pipeline_bus_call(GstBus *bus, GstMessage *msg, PurpleMediaManager *manager)
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
201 {
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
202 switch(GST_MESSAGE_TYPE(msg)) {
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
203 case GST_MESSAGE_EOS:
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
204 purple_debug_info("mediamanager", "End of Stream\n");
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
205 break;
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
206 case GST_MESSAGE_ERROR: {
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
207 gchar *debug = NULL;
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
208 GError *err = NULL;
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
209
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
210 gst_message_parse_error(msg, &err, &debug);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
211
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
212 purple_debug_error("mediamanager",
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
213 "gst pipeline error: %s\n",
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
214 err->message);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
215 g_error_free(err);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
216
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
217 if (debug) {
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
218 purple_debug_error("mediamanager",
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
219 "Debug details: %s\n", debug);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
220 g_free (debug);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
221 }
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
222 break;
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
223 }
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
224 default:
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
225 break;
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
226 }
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
227 return TRUE;
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
228 }
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
229 #endif
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
230
26539
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
231 #ifdef USE_GSTREAMER
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
232 GstElement *
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
233 purple_media_manager_get_pipeline(PurpleMediaManager *manager)
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
234 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
235 #ifdef USE_VV
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
236 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), NULL);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
237
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
238 if (manager->priv->pipeline == NULL) {
27834
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
239 FsElementAddedNotifier *notifier;
27833
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
240 gchar *filename;
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
241 GError *err = NULL;
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
242 GKeyFile *keyfile;
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
243 GstBus *bus;
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
244 manager->priv->pipeline = gst_pipeline_new(NULL);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
245
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
246 bus = gst_pipeline_get_bus(
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
247 GST_PIPELINE(manager->priv->pipeline));
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
248 gst_bus_add_signal_watch(GST_BUS(bus));
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
249 g_signal_connect(G_OBJECT(bus), "message",
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
250 G_CALLBACK(pipeline_bus_call), manager);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
251 gst_bus_set_sync_handler(bus,
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
252 gst_bus_sync_signal_handler, NULL);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
253 gst_object_unref(bus);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
254
27833
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
255 filename = g_build_filename(purple_user_dir(),
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
256 "fs-element.conf", NULL);
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
257 keyfile = g_key_file_new();
27834
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
258 if (!g_key_file_load_from_file(keyfile, filename,
27833
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
259 G_KEY_FILE_NONE, &err)) {
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
260 if (err->code == 4)
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
261 purple_debug_info("mediamanager",
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
262 "Couldn't read "
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
263 "fs-element.conf: %s\n",
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
264 err->message);
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
265 else
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
266 purple_debug_error("mediamanager",
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
267 "Error reading "
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
268 "fs-element.conf: %s\n",
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
269 err->message);
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
270 g_error_free(err);
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
271 }
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
272 g_free(filename);
6ed9c1def7c8 Allow setting properties on GStreamer elements with fs-element.conf.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27662
diff changeset
273
27834
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
274 /* Hack to make alsasrc stop messing up audio timestamps */
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
275 if (!g_key_file_has_key(keyfile,
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
276 "alsasrc", "slave-method", NULL)) {
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
277 g_key_file_set_integer(keyfile,
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
278 "alsasrc", "slave-method", 2);
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
279 }
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
280
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
281 notifier = fs_element_added_notifier_new();
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
282 fs_element_added_notifier_add(notifier,
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
283 GST_BIN(manager->priv->pipeline));
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
284 fs_element_added_notifier_set_properties_from_keyfile(
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
285 notifier, keyfile);
fa2e83d7ba7f Set alsasrc's slave-method to 2. This stops the audio timestamps from
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27833
diff changeset
286
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
287 gst_element_set_state(manager->priv->pipeline,
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
288 GST_STATE_PLAYING);
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
289 }
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
290
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
291 return manager->priv->pipeline;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
292 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
293 return NULL;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
294 #endif
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
295 }
26539
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
296 #endif /* USE_GSTREAMER */
26114
730e760ca39f Move pipeline creation into the media manager.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26107
diff changeset
297
23797
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23772
diff changeset
298 PurpleMedia *
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23772
diff changeset
299 purple_media_manager_create_media(PurpleMediaManager *manager,
26524
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
300 PurpleAccount *account,
23797
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23772
diff changeset
301 const char *conference_type,
24987
c7d4b67b3332 Add initiator property to PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24985
diff changeset
302 const char *remote_user,
c7d4b67b3332 Add initiator property to PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24985
diff changeset
303 gboolean initiator)
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
304 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
305 #ifdef USE_VV
23801
43b3b9ff6028 Added better Farsight error handling. Fixes several crash bugs related
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23797
diff changeset
306 PurpleMedia *media;
23797
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23772
diff changeset
307 FsConference *conference = FS_CONFERENCE(gst_element_factory_make(conference_type, NULL));
23856
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
308 GstStateChangeReturn ret;
23872
1d9a2296d5d2 Stop additional media sessions within a single conversation for grouped contacts.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23865
diff changeset
309 gboolean signal_ret;
23801
43b3b9ff6028 Added better Farsight error handling. Fixes several crash bugs related
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23797
diff changeset
310
24930
0baeafee93be Gracefully handle missing the fsrtpconference GStreamer plugin.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23876
diff changeset
311 if (conference == NULL) {
26524
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
312 purple_conv_present_error(remote_user, account,
24930
0baeafee93be Gracefully handle missing the fsrtpconference GStreamer plugin.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23876
diff changeset
313 _("Error creating conference."));
0baeafee93be Gracefully handle missing the fsrtpconference GStreamer plugin.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23876
diff changeset
314 purple_debug_error("media", "Conference == NULL\n");
0baeafee93be Gracefully handle missing the fsrtpconference GStreamer plugin.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23876
diff changeset
315 return NULL;
0baeafee93be Gracefully handle missing the fsrtpconference GStreamer plugin.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23876
diff changeset
316 }
0baeafee93be Gracefully handle missing the fsrtpconference GStreamer plugin.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23876
diff changeset
317
23801
43b3b9ff6028 Added better Farsight error handling. Fixes several crash bugs related
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23797
diff changeset
318 media = PURPLE_MEDIA(g_object_new(purple_media_get_type(),
26107
76104100cb87 Use the media manager that created the media session in media.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26083
diff changeset
319 "manager", manager,
26524
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
320 "account", account,
24985
ee2a2a9dda01 Rename "fs-conference" to "conference".
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24984
diff changeset
321 "conference", conference,
24987
c7d4b67b3332 Add initiator property to PurpleMedia.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24985
diff changeset
322 "initiator", initiator,
23801
43b3b9ff6028 Added better Farsight error handling. Fixes several crash bugs related
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23797
diff changeset
323 NULL));
23856
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
324
26070
7be8c88d630c Have all media sessions use a single pipeline.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24987
diff changeset
325 ret = gst_element_set_state(GST_ELEMENT(conference), GST_STATE_PLAYING);
23856
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
326
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
327 if (ret == GST_STATE_CHANGE_FAILURE) {
26524
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
328 purple_conv_present_error(remote_user, account,
23856
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
329 _("Error creating conference."));
24930
0baeafee93be Gracefully handle missing the fsrtpconference GStreamer plugin.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23876
diff changeset
330 purple_debug_error("media", "Failed to start conference.\n");
23856
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
331 g_object_unref(media);
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
332 return NULL;
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
333 }
1c68f78414b7 Set the media pipeline to PLAYING immediately after initialization
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23804
diff changeset
334
23872
1d9a2296d5d2 Stop additional media sessions within a single conversation for grouped contacts.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23865
diff changeset
335 g_signal_emit(manager, purple_media_manager_signals[INIT_MEDIA], 0,
26524
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
336 media, account, remote_user, &signal_ret);
23872
1d9a2296d5d2 Stop additional media sessions within a single conversation for grouped contacts.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23865
diff changeset
337
1d9a2296d5d2 Stop additional media sessions within a single conversation for grouped contacts.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23865
diff changeset
338 if (signal_ret == FALSE) {
1d9a2296d5d2 Stop additional media sessions within a single conversation for grouped contacts.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23865
diff changeset
339 g_object_unref(media);
1d9a2296d5d2 Stop additional media sessions within a single conversation for grouped contacts.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23865
diff changeset
340 return NULL;
1d9a2296d5d2 Stop additional media sessions within a single conversation for grouped contacts.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23865
diff changeset
341 }
1d9a2296d5d2 Stop additional media sessions within a single conversation for grouped contacts.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23865
diff changeset
342
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
343 manager->priv->medias = g_list_append(manager->priv->medias, media);
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
344 return media;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
345 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
346 return NULL;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
347 #endif
23760
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
348 }
5150d8b576be Missed files
Sean Egan <seanegan@gmail.com>
parents:
diff changeset
349
23876
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
350 GList *
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
351 purple_media_manager_get_media(PurpleMediaManager *manager)
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
352 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
353 #ifdef USE_VV
23876
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
354 return manager->priv->medias;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
355 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
356 return NULL;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
357 #endif
23876
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
358 }
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
359
26123
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
360 GList *
26524
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
361 purple_media_manager_get_media_by_account(PurpleMediaManager *manager,
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
362 PurpleAccount *account)
26123
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
363 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
364 #ifdef USE_VV
26123
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
365 GList *media = NULL;
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
366 GList *iter;
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
367
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
368 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), NULL);
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
369
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
370 iter = manager->priv->medias;
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
371 for (; iter; iter = g_list_next(iter)) {
26524
df9042312063 Switch media to store accounts rather than connections.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26425
diff changeset
372 if (purple_media_get_account(iter->data) == account) {
26123
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
373 media = g_list_prepend(media, iter->data);
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
374 }
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
375 }
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
376
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
377 return media;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
378 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
379 return NULL;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
380 #endif
26123
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
381 }
75a02ffb0139 Added purple_media_manager_get_media_by_connection.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26121
diff changeset
382
23876
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
383 void
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
384 purple_media_manager_remove_media(PurpleMediaManager *manager,
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
385 PurpleMedia *media)
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
386 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
387 #ifdef USE_VV
23876
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
388 GList *list = g_list_find(manager->priv->medias, media);
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
389 if (list)
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
390 manager->priv->medias =
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
391 g_list_delete_link(manager->priv->medias, list);
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
392 #endif
23876
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
393 }
f10e0ac24595 * Added input/output volume preferences for voice conversations.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 23872
diff changeset
394
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
395 #ifdef USE_VV
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
396 static void
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
397 request_pad_unlinked_cb(GstPad *pad, GstPad *peer, gpointer user_data)
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
398 {
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
399 GstElement *parent = GST_ELEMENT_PARENT(pad);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
400 GstIterator *iter;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
401 GstPad *remaining_pad;
27856
1c58b9d2429b Unleak pad if more pads are linked.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27849
diff changeset
402 GstIteratorResult result;
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
403
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
404 gst_element_release_request_pad(GST_ELEMENT_PARENT(pad), pad);
27856
1c58b9d2429b Unleak pad if more pads are linked.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27849
diff changeset
405 iter = gst_element_iterate_src_pads(parent);
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
406
27856
1c58b9d2429b Unleak pad if more pads are linked.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27849
diff changeset
407 result = gst_iterator_next(iter, (gpointer)&remaining_pad);
1c58b9d2429b Unleak pad if more pads are linked.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27849
diff changeset
408
1c58b9d2429b Unleak pad if more pads are linked.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27849
diff changeset
409 if (result == GST_ITERATOR_DONE) {
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
410 gst_element_set_locked_state(parent, TRUE);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
411 gst_element_set_state(parent, GST_STATE_NULL);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
412 gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(parent)), parent);
27856
1c58b9d2429b Unleak pad if more pads are linked.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27849
diff changeset
413 } else if (result == GST_ITERATOR_OK) {
1c58b9d2429b Unleak pad if more pads are linked.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 27849
diff changeset
414 gst_object_unref(remaining_pad);
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
415 }
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
416
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
417 gst_iterator_free(iter);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
418 }
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
419 #endif
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
420
26539
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
421 #ifdef USE_GSTREAMER
24950
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
422 GstElement *
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
423 purple_media_manager_get_element(PurpleMediaManager *manager,
26392
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26390
diff changeset
424 PurpleMediaSessionType type, PurpleMedia *media,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26390
diff changeset
425 const gchar *session_id, const gchar *participant)
24950
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
426 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
427 #ifdef USE_VV
24950
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
428 GstElement *ret = NULL;
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
429 PurpleMediaElementInfo *info = NULL;
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
430 PurpleMediaElementType element_type;
24950
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
431
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
432 if (type & PURPLE_MEDIA_SEND_AUDIO)
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
433 info = manager->priv->audio_src;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
434 else if (type & PURPLE_MEDIA_RECV_AUDIO)
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
435 info = manager->priv->audio_sink;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
436 else if (type & PURPLE_MEDIA_SEND_VIDEO)
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
437 info = manager->priv->video_src;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
438 else if (type & PURPLE_MEDIA_RECV_VIDEO)
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
439 info = manager->priv->video_sink;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
440
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
441 if (info == NULL)
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
442 return NULL;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
443
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
444 element_type = purple_media_element_info_get_element_type(info);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
445
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
446 if (element_type & PURPLE_MEDIA_ELEMENT_UNIQUE &&
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
447 element_type & PURPLE_MEDIA_ELEMENT_SRC) {
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
448 GstElement *tee;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
449 GstPad *pad;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
450 GstPad *ghost;
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
451 gchar *id = purple_media_element_info_get_id(info);
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
452
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
453 ret = gst_bin_get_by_name(GST_BIN(
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
454 purple_media_manager_get_pipeline(
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
455 manager)), id);
24950
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
456
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
457 if (ret == NULL) {
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
458 GstElement *bin, *fakesink;
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
459 ret = purple_media_element_info_call_create(info,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
460 media, session_id, participant);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
461 bin = gst_bin_new(id);
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
462 tee = gst_element_factory_make("tee", "tee");
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
463 gst_bin_add_many(GST_BIN(bin), ret, tee, NULL);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
464 gst_element_link(ret, tee);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
465
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
466 /*
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
467 * This shouldn't be necessary, but it stops it from
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
468 * giving a not-linked error upon destruction
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
469 */
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
470 fakesink = gst_element_factory_make("fakesink", NULL);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
471 g_object_set(fakesink, "sync", FALSE, NULL);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
472 gst_bin_add(GST_BIN(bin), fakesink);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
473 gst_element_link(tee, fakesink);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
474
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
475 ret = bin;
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
476 gst_element_set_locked_state(ret, TRUE);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
477 gst_object_ref(ret);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
478 gst_bin_add(GST_BIN(purple_media_manager_get_pipeline(
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
479 manager)), ret);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
480 }
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
481 g_free(id);
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
482
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
483 tee = gst_bin_get_by_name(GST_BIN(ret), "tee");
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
484 pad = gst_element_get_request_pad(tee, "src%d");
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
485 gst_object_unref(tee);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
486 ghost = gst_ghost_pad_new(NULL, pad);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
487 gst_object_unref(pad);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
488 g_signal_connect(GST_PAD(ghost), "unlinked",
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
489 G_CALLBACK(request_pad_unlinked_cb), NULL);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
490 gst_pad_set_active(ghost, TRUE);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
491 gst_element_add_pad(ret, ghost);
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
492 } else {
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
493 ret = purple_media_element_info_call_create(info,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
494 media, session_id, participant);
26381
6bcf5ad967ea Make sharing sources between media sessions work.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26350
diff changeset
495 }
24950
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
496
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
497 if (ret == NULL)
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
498 purple_debug_error("media", "Error creating source or sink\n");
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
499
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
500 return ret;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
501 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
502 return NULL;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
503 #endif
24950
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
504 }
431c59a6959d Add purple_media_manager_get_element.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 24930
diff changeset
505
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
506 PurpleMediaElementInfo *
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
507 purple_media_manager_get_element_info(PurpleMediaManager *manager,
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
508 const gchar *id)
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
509 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
510 #ifdef USE_VV
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
511 GList *iter;
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
512
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
513 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), NULL);
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
514
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
515 iter = manager->priv->elements;
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
516
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
517 for (; iter; iter = g_list_next(iter)) {
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
518 gchar *element_id =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
519 purple_media_element_info_get_id(iter->data);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
520 if (!strcmp(element_id, id)) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
521 g_free(element_id);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
522 g_object_ref(iter->data);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
523 return iter->data;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
524 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
525 g_free(element_id);
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
526 }
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
527 #endif
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
528
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
529 return NULL;
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
530 }
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
531
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
532 gboolean
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
533 purple_media_manager_register_element(PurpleMediaManager *manager,
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
534 PurpleMediaElementInfo *info)
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
535 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
536 #ifdef USE_VV
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
537 PurpleMediaElementInfo *info2;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
538 gchar *id;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
539
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
540 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), FALSE);
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
541 g_return_val_if_fail(info != NULL, FALSE);
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
542
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
543 id = purple_media_element_info_get_id(info);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
544 info2 = purple_media_manager_get_element_info(manager, id);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
545 g_free(id);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
546
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
547 if (info2 != NULL) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
548 g_object_unref(info2);
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
549 return FALSE;
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
550 }
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
551
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
552 manager->priv->elements =
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
553 g_list_prepend(manager->priv->elements, info);
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
554 return TRUE;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
555 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
556 return FALSE;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
557 #endif
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
558 }
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
559
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
560 gboolean
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
561 purple_media_manager_unregister_element(PurpleMediaManager *manager,
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
562 const gchar *id)
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
563 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
564 #ifdef USE_VV
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
565 PurpleMediaElementInfo *info;
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
566
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
567 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), FALSE);
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
568
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
569 info = purple_media_manager_get_element_info(manager, id);
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
570
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
571 if (info == NULL) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
572 g_object_unref(info);
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
573 return FALSE;
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
574 }
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
575
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
576 if (manager->priv->audio_src == info)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
577 manager->priv->audio_src = NULL;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
578 if (manager->priv->audio_sink == info)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
579 manager->priv->audio_sink = NULL;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
580 if (manager->priv->video_src == info)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
581 manager->priv->video_src = NULL;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
582 if (manager->priv->video_sink == info)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
583 manager->priv->video_sink = NULL;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
584
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
585 manager->priv->elements = g_list_remove(
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
586 manager->priv->elements, info);
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
587 g_object_unref(info);
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
588 return TRUE;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
589 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
590 return FALSE;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
591 #endif
26081
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
592 }
521366dfd8db Implement functions to register and unregister media elements for use in
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26070
diff changeset
593
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
594 gboolean
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
595 purple_media_manager_set_active_element(PurpleMediaManager *manager,
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
596 PurpleMediaElementInfo *info)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
597 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
598 #ifdef USE_VV
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
599 PurpleMediaElementInfo *info2;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
600 PurpleMediaElementType type;
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
601 gboolean ret = FALSE;
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
602 gchar *id;
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
603
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
604 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), FALSE);
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
605 g_return_val_if_fail(info != NULL, FALSE);
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
606
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
607 id = purple_media_element_info_get_id(info);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
608 info2 = purple_media_manager_get_element_info(manager, id);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
609 g_free(id);
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
610
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
611 if (info2 == NULL)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
612 purple_media_manager_register_element(manager, info);
26526
082a97307b8d Fix some assertions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26524
diff changeset
613 else
082a97307b8d Fix some assertions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26524
diff changeset
614 g_object_unref(info2);
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
615
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
616 type = purple_media_element_info_get_element_type(info);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
617
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
618 if (type & PURPLE_MEDIA_ELEMENT_SRC) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
619 if (type & PURPLE_MEDIA_ELEMENT_AUDIO) {
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
620 manager->priv->audio_src = info;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
621 ret = TRUE;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
622 }
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
623 if (type & PURPLE_MEDIA_ELEMENT_VIDEO) {
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
624 manager->priv->video_src = info;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
625 ret = TRUE;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
626 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
627 }
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
628 if (type & PURPLE_MEDIA_ELEMENT_SINK) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
629 if (type & PURPLE_MEDIA_ELEMENT_AUDIO) {
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
630 manager->priv->audio_sink = info;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
631 ret = TRUE;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
632 }
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
633 if (type & PURPLE_MEDIA_ELEMENT_VIDEO) {
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
634 manager->priv->video_sink = info;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
635 ret = TRUE;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
636 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
637 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
638
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
639 return ret;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
640 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
641 return FALSE;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
642 #endif
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
643 }
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
644
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
645 PurpleMediaElementInfo *
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
646 purple_media_manager_get_active_element(PurpleMediaManager *manager,
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
647 PurpleMediaElementType type)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
648 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
649 #ifdef USE_VV
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
650 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), NULL);
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
651
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
652 if (type & PURPLE_MEDIA_ELEMENT_SRC) {
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
653 if (type & PURPLE_MEDIA_ELEMENT_AUDIO)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
654 return manager->priv->audio_src;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
655 else if (type & PURPLE_MEDIA_ELEMENT_VIDEO)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
656 return manager->priv->video_src;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
657 } else if (type & PURPLE_MEDIA_ELEMENT_SINK) {
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
658 if (type & PURPLE_MEDIA_ELEMENT_AUDIO)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
659 return manager->priv->audio_sink;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
660 else if (type & PURPLE_MEDIA_ELEMENT_VIDEO)
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
661 return manager->priv->video_sink;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
662 }
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
663 #endif
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
664
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
665 return NULL;
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
666 }
26539
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
667 #endif /* USE_GSTREAMER */
26083
0e8814c437b2 Add active elements to PurpleMediaManager. These are the elements that
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26081
diff changeset
668
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
669 #ifdef USE_VV
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
670 static void
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
671 window_id_cb(GstBus *bus, GstMessage *msg, PurpleMediaOutputWindow *ow)
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
672 {
26412
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
673 GstElement *sink;
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
674
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
675 if (GST_MESSAGE_TYPE(msg) != GST_MESSAGE_ELEMENT ||
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
676 !gst_structure_has_name(msg->structure,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
677 "prepare-xwindow-id"))
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
678 return;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
679
26412
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
680 sink = GST_ELEMENT(GST_MESSAGE_SRC(msg));
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
681 while (sink != ow->sink) {
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
682 if (sink == NULL)
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
683 return;
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
684 sink = GST_ELEMENT_PARENT(sink);
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
685 }
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
686
26412
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
687 g_signal_handlers_disconnect_matched(bus, G_SIGNAL_MATCH_FUNC
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
688 | G_SIGNAL_MATCH_DATA, 0, 0, NULL,
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
689 window_id_cb, ow);
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
690
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
691 gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(
86c5499f36e8 Fix embedding video when the sink is a gconfvideosrc pointing to an
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26402
diff changeset
692 GST_MESSAGE_SRC(msg)), ow->window_id);
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
693 }
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
694 #endif
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
695
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
696 gboolean
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
697 purple_media_manager_create_output_window(PurpleMediaManager *manager,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
698 PurpleMedia *media, const gchar *session_id,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
699 const gchar *participant)
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
700 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
701 #ifdef USE_VV
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
702 GList *iter;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
703
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
704 g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
705
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
706 iter = manager->priv->output_windows;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
707 for(; iter; iter = g_list_next(iter)) {
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
708 PurpleMediaOutputWindow *ow = iter->data;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
709
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
710 if (ow->sink == NULL && ow->media == media &&
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
711 ((participant != NULL &&
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
712 ow->participant != NULL &&
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
713 !strcmp(participant, ow->participant)) ||
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
714 (participant == ow->participant)) &&
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
715 !strcmp(session_id, ow->session_id)) {
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
716 GstBus *bus;
27884
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
717 GstElement *queue, *colorspace;
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
718 GstElement *tee = purple_media_get_tee(media,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
719 session_id, participant);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
720
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
721 if (tee == NULL)
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
722 continue;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
723
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
724 queue = gst_element_factory_make(
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
725 "queue", NULL);
27884
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
726 colorspace = gst_element_factory_make(
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
727 "ffmpegcolorspace", NULL);
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
728 ow->sink = purple_media_manager_get_element(
26392
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26390
diff changeset
729 manager, PURPLE_MEDIA_RECV_VIDEO,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26390
diff changeset
730 ow->media, ow->session_id,
9c671fc1b351 Give more information to element creation functions.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26390
diff changeset
731 ow->participant);
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
732
26307
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
733 if (participant == NULL) {
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
734 /* aka this is a preview sink */
26307
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
735 GObjectClass *klass =
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
736 G_OBJECT_GET_CLASS(ow->sink);
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
737 if (g_object_class_find_property(klass,
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
738 "sync"))
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
739 g_object_set(G_OBJECT(ow->sink),
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
740 "sync", "FALSE", NULL);
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
741 if (g_object_class_find_property(klass,
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
742 "async"))
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
743 g_object_set(G_OBJECT(ow->sink),
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
744 "async", FALSE, NULL);
5ee7e8f209bb Silence warning about videotestsrc not having two properties.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26123
diff changeset
745 }
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
746
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
747 gst_bin_add_many(GST_BIN(GST_ELEMENT_PARENT(tee)),
27884
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
748 queue, colorspace, ow->sink, NULL);
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
749
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
750 bus = gst_pipeline_get_bus(GST_PIPELINE(
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
751 manager->priv->pipeline));
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
752 g_signal_connect(bus, "sync-message::element",
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
753 G_CALLBACK(window_id_cb), ow);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
754 gst_object_unref(bus);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
755
27882
d865064a3104 Switch around some GStreamer linking and state setting.
maiku@pidgin.im
parents: 27856
diff changeset
756 gst_element_set_state(ow->sink, GST_STATE_PLAYING);
27884
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
757 gst_element_set_state(colorspace, GST_STATE_PLAYING);
27882
d865064a3104 Switch around some GStreamer linking and state setting.
maiku@pidgin.im
parents: 27856
diff changeset
758 gst_element_set_state(queue, GST_STATE_PLAYING);
27884
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
759 gst_element_link(colorspace, ow->sink);
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
760 gst_element_link(queue, colorspace);
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
761 gst_element_link(tee, queue);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
762 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
763 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
764 return TRUE;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
765 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
766 return FALSE;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
767 #endif
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
768 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
769
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
770 gulong
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
771 purple_media_manager_set_output_window(PurpleMediaManager *manager,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
772 PurpleMedia *media, const gchar *session_id,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
773 const gchar *participant, gulong window_id)
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
774 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
775 #ifdef USE_VV
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
776 PurpleMediaOutputWindow *output_window;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
777
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
778 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), FALSE);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
779 g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
780
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
781 output_window = g_new0(PurpleMediaOutputWindow, 1);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
782 output_window->id = manager->priv->next_output_window_id++;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
783 output_window->media = media;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
784 output_window->session_id = g_strdup(session_id);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
785 output_window->participant = g_strdup(participant);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
786 output_window->window_id = window_id;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
787
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
788 manager->priv->output_windows = g_list_prepend(
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
789 manager->priv->output_windows, output_window);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
790
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
791 if (purple_media_get_tee(media, session_id, participant) != NULL)
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
792 purple_media_manager_create_output_window(manager,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
793 media, session_id, participant);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
794
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
795 return output_window->id;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
796 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
797 return 0;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
798 #endif
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
799 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
800
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
801 gboolean
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
802 purple_media_manager_remove_output_window(PurpleMediaManager *manager,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
803 gulong output_window_id)
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
804 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
805 #ifdef USE_VV
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
806 PurpleMediaOutputWindow *output_window = NULL;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
807 GList *iter;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
808
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
809 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager), FALSE);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
810
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
811 iter = manager->priv->output_windows;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
812 for (; iter; iter = g_list_next(iter)) {
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
813 PurpleMediaOutputWindow *ow = iter->data;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
814 if (ow->id == output_window_id) {
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
815 manager->priv->output_windows = g_list_delete_link(
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
816 manager->priv->output_windows, iter);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
817 output_window = ow;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
818 break;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
819 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
820 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
821
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
822 if (output_window == NULL)
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
823 return FALSE;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
824
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
825 if (output_window->sink != NULL) {
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
826 GstPad *pad = gst_element_get_static_pad(
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
827 output_window->sink, "sink");
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
828 GstPad *peer = gst_pad_get_peer(pad);
27884
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
829 GstElement *colorspace = GST_ELEMENT_PARENT(peer), *queue;
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
830 gst_object_unref(pad);
27884
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
831 gst_object_unref(peer);
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
832 pad = gst_element_get_static_pad(colorspace, "sink");
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
833 peer = gst_pad_get_peer(pad);
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
834 queue = GST_ELEMENT_PARENT(peer);
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
835 gst_object_unref(pad);
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
836 gst_object_unref(peer);
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
837 pad = gst_element_get_static_pad(queue, "sink");
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
838 peer = gst_pad_get_peer(pad);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
839 gst_object_unref(pad);
27662
feb17f2b5b7a Don't crash when there isn't a webcam connected.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26563
diff changeset
840 if (peer != NULL)
feb17f2b5b7a Don't crash when there isn't a webcam connected.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26563
diff changeset
841 gst_element_release_request_pad(GST_ELEMENT_PARENT(peer), peer);
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
842 gst_element_set_locked_state(queue, TRUE);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
843 gst_element_set_state(queue, GST_STATE_NULL);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
844 gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(queue)), queue);
27884
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
845 gst_element_set_locked_state(colorspace, TRUE);
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
846 gst_element_set_state(colorspace, GST_STATE_NULL);
f5580e1ca4b1 Fix unidirectional media sessions and add a colorspace before the video sink.
maiku@pidgin.im
parents: 27882
diff changeset
847 gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(colorspace)), colorspace);
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
848 gst_element_set_locked_state(output_window->sink, TRUE);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
849 gst_element_set_state(output_window->sink, GST_STATE_NULL);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
850 gst_bin_remove(GST_BIN(GST_ELEMENT_PARENT(output_window->sink)),
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
851 output_window->sink);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
852 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
853
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
854 g_free(output_window->session_id);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
855 g_free(output_window->participant);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
856 g_free(output_window);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
857
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
858 return TRUE;
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
859 #else
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
860 return FALSE;
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
861 #endif
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
862 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
863
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
864 void
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
865 purple_media_manager_remove_output_windows(PurpleMediaManager *manager,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
866 PurpleMedia *media, const gchar *session_id,
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
867 const gchar *participant)
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
868 {
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
869 #ifdef USE_VV
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
870 GList *iter;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
871
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
872 g_return_if_fail(PURPLE_IS_MEDIA(media));
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
873
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
874 iter = manager->priv->output_windows;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
875
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
876 for (; iter;) {
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
877 PurpleMediaOutputWindow *ow = iter->data;
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
878 iter = g_list_next(iter);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
879
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
880 if (media == ow->media &&
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
881 ((session_id != NULL && ow->session_id != NULL &&
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
882 !strcmp(session_id, ow->session_id)) ||
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
883 (session_id == ow->session_id)) &&
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
884 ((participant != NULL && ow->participant != NULL &&
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
885 !strcmp(participant, ow->participant)) ||
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
886 (participant == ow->participant)))
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
887 purple_media_manager_remove_output_window(
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
888 manager, ow->id);
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
889 }
26350
064657db29c4 Properly wrap media functions so the API doesn't disappear when USE_VV
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26349
diff changeset
890 #endif
26117
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
891 }
6cf36f68033c Only create output windows once there's data to be output.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26114
diff changeset
892
26390
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
893 void
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
894 purple_media_manager_set_ui_caps(PurpleMediaManager *manager,
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
895 PurpleMediaCaps caps)
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
896 {
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
897 #ifdef USE_VV
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
898 g_return_if_fail(PURPLE_IS_MEDIA_MANAGER(manager));
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
899 manager->priv->ui_caps = caps;
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
900 #endif
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
901 }
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
902
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
903 PurpleMediaCaps
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
904 purple_media_manager_get_ui_caps(PurpleMediaManager *manager)
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
905 {
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
906 #ifdef USE_VV
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
907 g_return_val_if_fail(PURPLE_IS_MEDIA_MANAGER(manager),
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
908 PURPLE_MEDIA_CAPS_NONE);
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
909 return manager->priv->ui_caps;
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
910 #else
26425
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
911 return PURPLE_MEDIA_CAPS_NONE;
26390
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
912 #endif
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
913 }
507d2366d329 Add purple_media_manager_{get,set}_ui_caps.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26381
diff changeset
914
26539
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
915 #ifdef USE_GSTREAMER
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
916
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
917 /*
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
918 * PurpleMediaElementType
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
919 */
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
920
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
921 GType
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
922 purple_media_element_type_get_type()
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
923 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
924 static GType type = 0;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
925 if (type == 0) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
926 static const GFlagsValue values[] = {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
927 { PURPLE_MEDIA_ELEMENT_NONE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
928 "PURPLE_MEDIA_ELEMENT_NONE", "none" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
929 { PURPLE_MEDIA_ELEMENT_AUDIO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
930 "PURPLE_MEDIA_ELEMENT_AUDIO", "audio" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
931 { PURPLE_MEDIA_ELEMENT_VIDEO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
932 "PURPLE_MEDIA_ELEMENT_VIDEO", "video" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
933 { PURPLE_MEDIA_ELEMENT_AUDIO_VIDEO,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
934 "PURPLE_MEDIA_ELEMENT_AUDIO_VIDEO",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
935 "audio-video" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
936 { PURPLE_MEDIA_ELEMENT_NO_SRCS,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
937 "PURPLE_MEDIA_ELEMENT_NO_SRCS", "no-srcs" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
938 { PURPLE_MEDIA_ELEMENT_ONE_SRC,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
939 "PURPLE_MEDIA_ELEMENT_ONE_SRC", "one-src" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
940 { PURPLE_MEDIA_ELEMENT_MULTI_SRC,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
941 "PURPLE_MEDIA_ELEMENT_MULTI_SRC",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
942 "multi-src" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
943 { PURPLE_MEDIA_ELEMENT_REQUEST_SRC,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
944 "PURPLE_MEDIA_ELEMENT_REQUEST_SRC",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
945 "request-src" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
946 { PURPLE_MEDIA_ELEMENT_NO_SINKS,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
947 "PURPLE_MEDIA_ELEMENT_NO_SINKS", "no-sinks" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
948 { PURPLE_MEDIA_ELEMENT_ONE_SINK,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
949 "PURPLE_MEDIA_ELEMENT_ONE_SINK", "one-sink" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
950 { PURPLE_MEDIA_ELEMENT_MULTI_SINK,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
951 "PURPLE_MEDIA_ELEMENT_MULTI_SINK",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
952 "multi-sink" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
953 { PURPLE_MEDIA_ELEMENT_REQUEST_SINK,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
954 "PURPLE_MEDIA_ELEMENT_REQUEST_SINK",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
955 "request-sink" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
956 { PURPLE_MEDIA_ELEMENT_UNIQUE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
957 "PURPLE_MEDIA_ELEMENT_UNIQUE", "unique" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
958 { PURPLE_MEDIA_ELEMENT_SRC,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
959 "PURPLE_MEDIA_ELEMENT_SRC", "src" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
960 { PURPLE_MEDIA_ELEMENT_SINK,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
961 "PURPLE_MEDIA_ELEMENT_SINK", "sink" },
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
962 { 0, NULL, NULL }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
963 };
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
964 type = g_flags_register_static(
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
965 "PurpleMediaElementType", values);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
966 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
967 return type;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
968 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
969
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
970 /*
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
971 * PurpleMediaElementInfo
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
972 */
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
973
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
974 struct _PurpleMediaElementInfoClass
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
975 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
976 GObjectClass parent_class;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
977 };
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
978
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
979 struct _PurpleMediaElementInfo
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
980 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
981 GObject parent;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
982 };
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
983
26425
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
984 #ifdef USE_VV
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
985 struct _PurpleMediaElementInfoPrivate
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
986 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
987 gchar *id;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
988 gchar *name;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
989 PurpleMediaElementType type;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
990 PurpleMediaElementCreateCallback create;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
991 };
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
992
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
993 enum {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
994 PROP_0,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
995 PROP_ID,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
996 PROP_NAME,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
997 PROP_TYPE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
998 PROP_CREATE_CB,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
999 };
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1000
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1001 static void
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1002 purple_media_element_info_init(PurpleMediaElementInfo *info)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1003 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1004 PurpleMediaElementInfoPrivate *priv =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1005 PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(info);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1006 priv->id = NULL;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1007 priv->name = NULL;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1008 priv->type = PURPLE_MEDIA_ELEMENT_NONE;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1009 priv->create = NULL;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1010 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1011
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1012 static void
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1013 purple_media_element_info_finalize(GObject *info)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1014 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1015 PurpleMediaElementInfoPrivate *priv =
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1016 PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(info);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1017 g_free(priv->id);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1018 g_free(priv->name);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1019 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1020
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1021 static void
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1022 purple_media_element_info_set_property (GObject *object, guint prop_id,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1023 const GValue *value, GParamSpec *pspec)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1024 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1025 PurpleMediaElementInfoPrivate *priv;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1026 g_return_if_fail(PURPLE_IS_MEDIA_ELEMENT_INFO(object));
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1027
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1028 priv = PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(object);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1029
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1030 switch (prop_id) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1031 case PROP_ID:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1032 g_free(priv->id);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1033 priv->id = g_value_dup_string(value);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1034 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1035 case PROP_NAME:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1036 g_free(priv->name);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1037 priv->name = g_value_dup_string(value);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1038 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1039 case PROP_TYPE: {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1040 priv->type = g_value_get_flags(value);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1041 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1042 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1043 case PROP_CREATE_CB:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1044 priv->create = g_value_get_pointer(value);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1045 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1046 default:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1047 G_OBJECT_WARN_INVALID_PROPERTY_ID(
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1048 object, prop_id, pspec);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1049 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1050 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1051 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1052
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1053 static void
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1054 purple_media_element_info_get_property (GObject *object, guint prop_id,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1055 GValue *value, GParamSpec *pspec)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1056 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1057 PurpleMediaElementInfoPrivate *priv;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1058 g_return_if_fail(PURPLE_IS_MEDIA_ELEMENT_INFO(object));
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1059
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1060 priv = PURPLE_MEDIA_ELEMENT_INFO_GET_PRIVATE(object);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1061
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1062 switch (prop_id) {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1063 case PROP_ID:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1064 g_value_set_string(value, priv->id);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1065 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1066 case PROP_NAME:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1067 g_value_set_string(value, priv->name);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1068 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1069 case PROP_TYPE:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1070 g_value_set_flags(value, priv->type);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1071 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1072 case PROP_CREATE_CB:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1073 g_value_set_pointer(value, priv->create);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1074 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1075 default:
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1076 G_OBJECT_WARN_INVALID_PROPERTY_ID(
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1077 object, prop_id, pspec);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1078 break;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1079 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1080 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1081
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1082 static void
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1083 purple_media_element_info_class_init(PurpleMediaElementInfoClass *klass)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1084 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1085 GObjectClass *gobject_class = (GObjectClass*)klass;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1086
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1087 gobject_class->finalize = purple_media_element_info_finalize;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1088 gobject_class->set_property = purple_media_element_info_set_property;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1089 gobject_class->get_property = purple_media_element_info_get_property;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1090
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1091 g_object_class_install_property(gobject_class, PROP_ID,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1092 g_param_spec_string("id",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1093 "ID",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1094 "The unique identifier of the element.",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1095 NULL,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1096 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1097
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1098 g_object_class_install_property(gobject_class, PROP_NAME,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1099 g_param_spec_string("name",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1100 "Name",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1101 "The friendly/display name of this element.",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1102 NULL,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1103 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1104
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1105 g_object_class_install_property(gobject_class, PROP_TYPE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1106 g_param_spec_flags("type",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1107 "Element Type",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1108 "The type of element this is.",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1109 PURPLE_TYPE_MEDIA_ELEMENT_TYPE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1110 PURPLE_MEDIA_ELEMENT_NONE,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1111 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1112
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1113 g_object_class_install_property(gobject_class, PROP_CREATE_CB,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1114 g_param_spec_pointer("create-cb",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1115 "Create Callback",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1116 "The function called to create this element.",
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1117 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1118
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1119 g_type_class_add_private(klass, sizeof(PurpleMediaElementInfoPrivate));
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1120 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1121
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1122 G_DEFINE_TYPE(PurpleMediaElementInfo,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1123 purple_media_element_info, G_TYPE_OBJECT);
26425
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
1124 #else
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
1125 GType
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
1126 purple_media_element_info_get_type()
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
1127 {
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
1128 return G_TYPE_NONE;
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
1129 }
90c65a8575bf Make it compile with --disable-vv... again!
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26412
diff changeset
1130 #endif
26402
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1131
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1132 gchar *
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1133 purple_media_element_info_get_id(PurpleMediaElementInfo *info)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1134 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1135 #ifdef USE_VV
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1136 gchar *id;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1137 g_return_val_if_fail(PURPLE_IS_MEDIA_ELEMENT_INFO(info), NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1138 g_object_get(info, "id", &id, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1139 return id;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1140 #else
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1141 return NULL;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1142 #endif
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1143 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1144
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1145 gchar *
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1146 purple_media_element_info_get_name(PurpleMediaElementInfo *info)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1147 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1148 #ifdef USE_VV
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1149 gchar *name;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1150 g_return_val_if_fail(PURPLE_IS_MEDIA_ELEMENT_INFO(info), NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1151 g_object_get(info, "name", &name, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1152 return name;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1153 #else
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1154 return NULL;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1155 #endif
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1156 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1157
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1158 PurpleMediaElementType
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1159 purple_media_element_info_get_element_type(PurpleMediaElementInfo *info)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1160 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1161 #ifdef USE_VV
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1162 PurpleMediaElementType type;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1163 g_return_val_if_fail(PURPLE_IS_MEDIA_ELEMENT_INFO(info),
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1164 PURPLE_MEDIA_ELEMENT_NONE);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1165 g_object_get(info, "type", &type, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1166 return type;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1167 #else
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1168 return PURPLE_MEDIA_ELEMENT_NONE;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1169 #endif
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1170 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1171
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1172 GstElement *
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1173 purple_media_element_info_call_create(PurpleMediaElementInfo *info,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1174 PurpleMedia *media, const gchar *session_id,
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1175 const gchar *participant)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1176 {
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1177 #ifdef USE_VV
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1178 PurpleMediaElementCreateCallback create;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1179 g_return_val_if_fail(PURPLE_IS_MEDIA_ELEMENT_INFO(info), NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1180 g_object_get(info, "create-cb", &create, NULL);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1181 if (create)
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1182 return create(media, session_id, participant);
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1183 #endif
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1184 return NULL;
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1185 }
081a819bc710 Hide and gobjectify PurpleMediaElementInfo.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 26400
diff changeset
1186
26539
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
1187 #endif /* USE_GSTREAMER */
4f2f5659aa0d Fix build with --disable-gstreamer.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents: 26526
diff changeset
1188