libpurple/mediamanager.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 26792
17140fe8c2f6
child 27926
7ed64195754d
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

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

mercurial