pidgin/gtkmedia.c

Sun, 09 Nov 2008 20:55:10 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Sun, 09 Nov 2008 20:55:10 +0000
branch
maiku.vv
changeset 26159
24ffae1874f1
parent 26158
3c52c0332696
child 26177
35f25555116f
permissions
-rw-r--r--

Added menu items to buddy list context menu to start voice and video sessions
After discussing the matter with Maiku, we decided to have two choises.
"Audio call" which will show up if audio sessions is possible with a buddy and
the other item is either "Audio/Video" or "Video" depending on if the buddy
supports both at the same time or not

19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
1 /**
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
2 * @file media.c Account API
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
3 * @ingroup core
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
4 *
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
5 * Pidgin
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
6 *
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
7 * Pidgin is the legal property of its developers, whose names are too numerous
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
8 * to list here. Please refer to the COPYRIGHT file distributed with this
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
9 * source distribution.
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
10 *
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
11 * This program is free software; you can redistribute it and/or modify
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
12 * it under the terms of the GNU General Public License as published by
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
13 * the Free Software Foundation; either version 2 of the License, or
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
14 * (at your option) any later version.
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
15 *
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
16 * This program is distributed in the hope that it will be useful,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
19 * GNU General Public License for more details.
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
20 *
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
21 * You should have received a copy of the GNU General Public License
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
22 * along with this program; if not, write to the Free Software
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
23 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
24 */
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
25
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
26 #include <string.h>
23728
77a48a216424 Listen to the media pipeline and display errors.
Michael Ruprecht <maiku@pidgin.im>
parents: 23724
diff changeset
27 #include "debug.h"
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
28 #include "internal.h"
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
29 #include "connection.h"
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
30 #include "media.h"
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
31 #include "pidgin.h"
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
32
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
33 #include "gtkmedia.h"
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
34
23704
9b88c9b23aed Use USE_VV instead of USE_FARSIGHT.
Michael Ruprecht <maiku@pidgin.im>
parents: 23701
diff changeset
35 #ifdef USE_VV
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
36
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
37 #include <gst/interfaces/xoverlay.h>
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
38
22682
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
39 typedef enum
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
40 {
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
41 /* Waiting for response */
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
42 PIDGIN_MEDIA_WAITING = 1,
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
43 /* Got request */
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
44 PIDGIN_MEDIA_REQUESTED,
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
45 /* Accepted call */
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
46 PIDGIN_MEDIA_ACCEPTED,
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
47 /* Rejected call */
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
48 PIDGIN_MEDIA_REJECTED,
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
49 } PidginMediaState;
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
50
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
51 struct _PidginMediaPrivate
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
52 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
53 PurpleMedia *media;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
54 GstElement *send_level;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
55 GstElement *recv_level;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
56
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
57 GtkWidget *calling;
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
58 GtkWidget *accept;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
59 GtkWidget *reject;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
60 GtkWidget *hangup;
26103
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
61 GtkWidget *mute;
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
62
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
63 GtkWidget *send_progress;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
64 GtkWidget *recv_progress;
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
65
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
66 PidginMediaState state;
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
67
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
68 GtkWidget *display;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
69 GtkWidget *local_video;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
70 GtkWidget *remote_video;
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
71 };
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
72
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
73 #define PIDGIN_MEDIA_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), PIDGIN_TYPE_MEDIA, PidginMediaPrivate))
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
74
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
75 static void pidgin_media_class_init (PidginMediaClass *klass);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
76 static void pidgin_media_init (PidginMedia *media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
77 static void pidgin_media_finalize (GObject *object);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
78 static void pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
79 static void pidgin_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
22682
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
80 static void pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
81
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
82 static GtkHBoxClass *parent_class = NULL;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
83
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
84
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
85
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
86 enum {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
87 MESSAGE,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
88 LAST_SIGNAL
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
89 };
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
90 static guint pidgin_media_signals[LAST_SIGNAL] = {0};
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
91
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
92 enum {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
93 PROP_0,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
94 PROP_MEDIA,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
95 PROP_SEND_LEVEL,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
96 PROP_RECV_LEVEL
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
97 };
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
98
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
99 GType
22400
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
100 pidgin_media_get_type(void)
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
101 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
102 static GType type = 0;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
103
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
104 if (type == 0) {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
105 static const GTypeInfo info = {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
106 sizeof(PidginMediaClass),
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
107 NULL,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
108 NULL,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
109 (GClassInitFunc) pidgin_media_class_init,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
110 NULL,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
111 NULL,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
112 sizeof(PidginMedia),
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
113 0,
22072
4ad1e1e6d94e Remove a compile error, and a few warnings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19886
diff changeset
114 (GInstanceInitFunc) pidgin_media_init,
4ad1e1e6d94e Remove a compile error, and a few warnings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19886
diff changeset
115 NULL
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
116 };
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
117 type = g_type_register_static(GTK_TYPE_HBOX, "PidginMedia", &info, 0);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
118 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
119 return type;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
120 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
121
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
122
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
123 static void
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
124 pidgin_media_class_init (PidginMediaClass *klass)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
125 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
126 GObjectClass *gobject_class = (GObjectClass*)klass;
23729
f6e9367a9d50 Silence warning.
Michael Ruprecht <maiku@pidgin.im>
parents: 23728
diff changeset
127 /* GtkContainerClass *container_class = (GtkContainerClass*)klass; */
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
128 parent_class = g_type_class_peek_parent(klass);
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
129
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
130 gobject_class->finalize = pidgin_media_finalize;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
131 gobject_class->set_property = pidgin_media_set_property;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
132 gobject_class->get_property = pidgin_media_get_property;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
133
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
134 g_object_class_install_property(gobject_class, PROP_MEDIA,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
135 g_param_spec_object("media",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
136 "PurpleMedia",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
137 "The PurpleMedia associated with this media.",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
138 PURPLE_TYPE_MEDIA,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
139 G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE));
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
140 g_object_class_install_property(gobject_class, PROP_SEND_LEVEL,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
141 g_param_spec_object("send-level",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
142 "Send level",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
143 "The GstElement of this media's send 'level'",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
144 GST_TYPE_ELEMENT,
23721
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
145 G_PARAM_READWRITE));
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
146 g_object_class_install_property(gobject_class, PROP_RECV_LEVEL,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
147 g_param_spec_object("recv-level",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
148 "Receive level",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
149 "The GstElement of this media's recv 'level'",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
150 GST_TYPE_ELEMENT,
23721
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
151 G_PARAM_READWRITE));
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
152
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
153 pidgin_media_signals[MESSAGE] = g_signal_new("message", G_TYPE_FROM_CLASS(klass),
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
154 G_SIGNAL_RUN_LAST, 0, NULL, NULL,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
155 g_cclosure_marshal_VOID__STRING,
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
156 G_TYPE_NONE, 1, G_TYPE_STRING);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
157
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
158 g_type_class_add_private(klass, sizeof(PidginMediaPrivate));
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
159 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
160
26103
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
161 static void
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
162 pidgin_media_mute_toggled(GtkToggleButton *toggle, PidginMedia *media)
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
163 {
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
164 purple_media_mute(media->priv->media,
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
165 gtk_toggle_button_get_active(toggle));
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
166 }
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
167
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
168 static void
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
169 pidgin_media_init (PidginMedia *media)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
170 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
171 media->priv = PIDGIN_MEDIA_GET_PRIVATE(media);
26158
3c52c0332696 Add mnemonics to buttons in PidginMedia.
Michael Ruprecht <maiku@pidgin.im>
parents: 26151
diff changeset
172 media->priv->calling = gtk_label_new("Calling...");
3c52c0332696 Add mnemonics to buttons in PidginMedia.
Michael Ruprecht <maiku@pidgin.im>
parents: 26151
diff changeset
173 media->priv->hangup = gtk_button_new_with_mnemonic("_Hangup");
3c52c0332696 Add mnemonics to buttons in PidginMedia.
Michael Ruprecht <maiku@pidgin.im>
parents: 26151
diff changeset
174 media->priv->accept = gtk_button_new_with_mnemonic("_Accept");
3c52c0332696 Add mnemonics to buttons in PidginMedia.
Michael Ruprecht <maiku@pidgin.im>
parents: 26151
diff changeset
175 media->priv->reject = gtk_button_new_with_mnemonic("_Reject");
3c52c0332696 Add mnemonics to buttons in PidginMedia.
Michael Ruprecht <maiku@pidgin.im>
parents: 26151
diff changeset
176 media->priv->mute = gtk_toggle_button_new_with_mnemonic("_Mute");
26103
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
177
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
178 g_signal_connect(media->priv->mute, "toggled",
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
179 G_CALLBACK(pidgin_media_mute_toggled), media);
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
180
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
181 gtk_box_pack_start(GTK_BOX(media), media->priv->calling, FALSE, FALSE, 0);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
182 gtk_box_pack_start(GTK_BOX(media), media->priv->hangup, FALSE, FALSE, 0);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
183 gtk_box_pack_start(GTK_BOX(media), media->priv->accept, FALSE, FALSE, 0);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
184 gtk_box_pack_start(GTK_BOX(media), media->priv->reject, FALSE, FALSE, 0);
26103
1cdefa229226 Added a mute button for the local microphone.
Michael Ruprecht <maiku@pidgin.im>
parents: 26096
diff changeset
185 gtk_box_pack_end(GTK_BOX(media), media->priv->mute, FALSE, FALSE, 0);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
186
22682
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
187 gtk_widget_show_all(media->priv->accept);
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
188 gtk_widget_show_all(media->priv->reject);
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
189
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
190 media->priv->display = gtk_vbox_new(TRUE, PIDGIN_HIG_BOX_SPACE);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
191 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
192
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
193 static gboolean
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
194 level_message_cb(GstBus *bus, GstMessage *message, PidginMedia *gtkmedia)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
195 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
196 const GstStructure *s;
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
197 gchar *name;
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
198
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
199 gdouble rms_db;
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
200 gdouble percent;
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
201 const GValue *list;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
202 const GValue *value;
22400
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
203
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
204 GstElement *src = GST_ELEMENT(GST_MESSAGE_SRC(message));
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
205
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
206 if (message->type != GST_MESSAGE_ELEMENT)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
207 return TRUE;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
208
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
209 s = gst_message_get_structure(message);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
210
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
211 if (strcmp(gst_structure_get_name(s), "level"))
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
212 return TRUE;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
213
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
214 list = gst_structure_get_value(s, "rms");
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
215
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
216 /* Only bother with the first channel. */
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
217 value = gst_value_list_get_value(list, 0);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
218 rms_db = g_value_get_double(value);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
219
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
220 percent = pow(10, rms_db / 20) * 5;
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
221
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
222 if(percent > 1.0)
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
223 percent = 1.0;
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
224
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
225 name = gst_element_get_name(src);
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
226 if (!strcmp(name, "sendlevel"))
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
227 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gtkmedia->priv->send_progress), percent);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
228 else
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
229 gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(gtkmedia->priv->recv_progress), percent);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
230
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
231 g_free(name);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
232 return TRUE;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
233 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
234
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
235
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
236 static void
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
237 pidgin_media_disconnect_levels(PurpleMedia *media, PidginMedia *gtkmedia)
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
238 {
23721
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
239 GstElement *element = purple_media_get_pipeline(media);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
240 gulong handler_id = g_signal_handler_find(G_OBJECT(gst_pipeline_get_bus(GST_PIPELINE(element))),
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
241 G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_DATA, 0, 0,
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
242 NULL, G_CALLBACK(level_message_cb), gtkmedia);
23701
ecbd92b724df Added better Farsight error handling. Fixes several crash bugs related
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
243 if (handler_id)
ecbd92b724df Added better Farsight error handling. Fixes several crash bugs related
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
244 g_signal_handler_disconnect(G_OBJECT(gst_pipeline_get_bus(GST_PIPELINE(element))),
ecbd92b724df Added better Farsight error handling. Fixes several crash bugs related
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
245 handler_id);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
246 }
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
247
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
248 static void
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
249 pidgin_media_finalize (GObject *media)
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
250 {
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
251 PidginMedia *gtkmedia = PIDGIN_MEDIA(media);
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
252 purple_debug_info("gtkmedia", "pidgin_media_finalize\n");
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
253 if (gtkmedia->priv->media) {
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
254 pidgin_media_disconnect_levels(gtkmedia->priv->media, gtkmedia);
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
255 g_object_unref(gtkmedia->priv->media);
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
256 }
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
257 if (gtkmedia->priv->send_level)
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
258 gst_object_unref(gtkmedia->priv->send_level);
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
259 if (gtkmedia->priv->recv_level)
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
260 gst_object_unref(gtkmedia->priv->recv_level);
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
261 if (gtkmedia->priv->display)
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
262 gtk_widget_destroy(gtkmedia->priv->display);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
263 }
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
264
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
265 static void
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
266 pidgin_media_emit_message(PidginMedia *gtkmedia, const char *msg)
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
267 {
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
268 g_signal_emit(gtkmedia, pidgin_media_signals[MESSAGE], 0, msg);
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
269 }
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22682
diff changeset
270
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
271 GtkWidget *
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
272 pidgin_media_get_display_widget(GtkWidget *gtkmedia)
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
273 {
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
274 return PIDGIN_MEDIA_GET_PRIVATE(gtkmedia)->display;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
275 }
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
276
23728
77a48a216424 Listen to the media pipeline and display errors.
Michael Ruprecht <maiku@pidgin.im>
parents: 23724
diff changeset
277 static gboolean
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
278 create_window (GstBus *bus, GstMessage *message, PidginMedia *gtkmedia)
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
279 {
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
280 char *name;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
281
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
282 if (GST_MESSAGE_TYPE(message) != GST_MESSAGE_ELEMENT)
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
283 return TRUE;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
284
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
285 if (!gst_structure_has_name(message->structure, "prepare-xwindow-id"))
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
286 return TRUE;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
287
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
288 name = gst_object_get_name(GST_MESSAGE_SRC (message));
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
289 purple_debug_info("gtkmedia", "prepare-xwindow-id object name: %s\n", name);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
290
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
291 /* The XOverlay's name is the sink's name with a suffix */
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
292 if (!strncmp(name, "purplevideosink", strlen("purplevideosink")))
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
293 gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(GST_MESSAGE_SRC(message)),
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
294 GDK_WINDOW_XWINDOW(gtkmedia->priv->remote_video->window));
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
295 else if (!strncmp(name, "purplelocalvideosink", strlen("purplelocalvideosink")))
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
296 gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(GST_MESSAGE_SRC(message)),
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
297 GDK_WINDOW_XWINDOW(gtkmedia->priv->local_video->window));
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
298 g_free(name);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
299 return TRUE;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
300 }
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
301
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
302 static void
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
303 pidgin_media_ready_cb(PurpleMedia *media, PidginMedia *gtkmedia)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
304 {
26151
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
305 GstElement *pipeline = purple_media_get_pipeline(media);
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
306 GtkWidget *send_widget = NULL, *recv_widget = NULL;
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
307 GstElement *audiosendbin = NULL, *audiosendlevel = NULL;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
308 GstElement *videosendbin = NULL;
26151
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
309 gboolean audiorecvbool = FALSE;
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
310 gboolean videorecvbool = FALSE;
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
311 GstBus *bus;
23721
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
312
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
313 GList *sessions = purple_media_get_session_names(media);
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
314
23752
d573c980437e Fixed some memory leak issues involving GLists.
Michael Ruprecht <maiku@pidgin.im>
parents: 23744
diff changeset
315 for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
316 PurpleMediaSessionType type = purple_media_get_session_type(media, sessions->data);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
317 if (type & PURPLE_MEDIA_AUDIO) {
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
318 if (!audiosendbin && (type & PURPLE_MEDIA_SEND_AUDIO)) {
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
319 purple_media_audio_init_src(&audiosendbin, &audiosendlevel);
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
320 purple_media_set_src(media, sessions->data, audiosendbin);
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26119
diff changeset
321 gst_element_set_state(audiosendbin, GST_STATE_PLAYING);
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
322 }
26151
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
323 if (!audiorecvbool && (type & PURPLE_MEDIA_RECV_AUDIO)) {
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
324 audiorecvbool = TRUE;
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
325 }
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26119
diff changeset
326 } else if (type & PURPLE_MEDIA_VIDEO) {
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
327 if (!videosendbin && (type & PURPLE_MEDIA_SEND_VIDEO)) {
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
328 purple_media_video_init_src(&videosendbin);
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
329 purple_media_set_src(media, sessions->data, videosendbin);
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26119
diff changeset
330 gst_element_set_state(videosendbin, GST_STATE_PLAYING);
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
331 }
26151
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
332 if (!videorecvbool && (type & PURPLE_MEDIA_RECV_VIDEO)) {
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
333 videorecvbool = TRUE;
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
334 }
23721
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
335 }
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
336 }
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
337
26151
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
338 if (videorecvbool || audiorecvbool) {
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
339 recv_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
340 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
341 recv_widget, TRUE, TRUE, 0);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
342 gtk_widget_show(recv_widget);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
343 }
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
344 if (videosendbin || audiosendbin) {
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
345 send_widget = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
346 gtk_box_pack_start(GTK_BOX(gtkmedia->priv->display),
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
347 send_widget, TRUE, TRUE, 0);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
348 gtk_widget_show(send_widget);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
349 }
23738
2188a1d89a3a Move the audio progress bar widgets to be beside the video displays.
Michael Ruprecht <maiku@pidgin.im>
parents: 23737
diff changeset
350
26151
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
351 if (videorecvbool) {
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
352 GtkWidget *aspect;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
353 GtkWidget *remote_video;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
354
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
355 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
356 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
23743
bc49c5e2ab2b Fix the order of the send/recv audio/video display widgets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23742
diff changeset
357 gtk_box_pack_start(GTK_BOX(recv_widget), aspect, TRUE, TRUE, 0);
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
358
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
359 remote_video = gtk_drawing_area_new();
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
360 gtk_container_add(GTK_CONTAINER(aspect), remote_video);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
361 gtk_widget_set_size_request (GTK_WIDGET(remote_video), 100, -1);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
362 gtk_widget_show(remote_video);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
363 gtk_widget_show(aspect);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
364
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
365 gtkmedia->priv->remote_video = remote_video;
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
366 }
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
367 if (videosendbin) {
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
368 GtkWidget *aspect;
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
369 GtkWidget *local_video;
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
370
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
371 aspect = gtk_aspect_frame_new(NULL, 0.5, 0.5, 4.0/3.0, FALSE);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
372 gtk_frame_set_shadow_type(GTK_FRAME(aspect), GTK_SHADOW_IN);
23743
bc49c5e2ab2b Fix the order of the send/recv audio/video display widgets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23742
diff changeset
373 gtk_box_pack_start(GTK_BOX(send_widget), aspect, TRUE, TRUE, 0);
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
374
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
375 local_video = gtk_drawing_area_new();
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
376 gtk_container_add(GTK_CONTAINER(aspect), local_video);
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
377 gtk_widget_set_size_request (GTK_WIDGET(local_video), 100, -1);
23736
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
378 gtk_widget_show(local_video);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
379 gtk_widget_show(aspect);
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
380
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
381 gtkmedia->priv->local_video = local_video;
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
382 }
e77595cce169 Preliminary video embedded in the conversation window. It's still kind of buggy.
Michael Ruprecht <maiku@pidgin.im>
parents: 23729
diff changeset
383
26151
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
384 if (audiorecvbool) {
23738
2188a1d89a3a Move the audio progress bar widgets to be beside the video displays.
Michael Ruprecht <maiku@pidgin.im>
parents: 23737
diff changeset
385 gtkmedia->priv->recv_progress = gtk_progress_bar_new();
23739
157a74f47944 Widened the vertical audio levels.
Michael Ruprecht <maiku@pidgin.im>
parents: 23738
diff changeset
386 gtk_widget_set_size_request(gtkmedia->priv->recv_progress, 10, 70);
23738
2188a1d89a3a Move the audio progress bar widgets to be beside the video displays.
Michael Ruprecht <maiku@pidgin.im>
parents: 23737
diff changeset
387 gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(gtkmedia->priv->recv_progress),
2188a1d89a3a Move the audio progress bar widgets to be beside the video displays.
Michael Ruprecht <maiku@pidgin.im>
parents: 23737
diff changeset
388 GTK_PROGRESS_BOTTOM_TO_TOP);
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
389 gtk_box_pack_end(GTK_BOX(recv_widget),
23738
2188a1d89a3a Move the audio progress bar widgets to be beside the video displays.
Michael Ruprecht <maiku@pidgin.im>
parents: 23737
diff changeset
390 gtkmedia->priv->recv_progress, FALSE, FALSE, 0);
2188a1d89a3a Move the audio progress bar widgets to be beside the video displays.
Michael Ruprecht <maiku@pidgin.im>
parents: 23737
diff changeset
391 gtk_widget_show(gtkmedia->priv->recv_progress);
2188a1d89a3a Move the audio progress bar widgets to be beside the video displays.
Michael Ruprecht <maiku@pidgin.im>
parents: 23737
diff changeset
392 }
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
393 if (audiosendbin) {
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
394 gtkmedia->priv->send_progress = gtk_progress_bar_new();
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
395 gtk_widget_set_size_request(gtkmedia->priv->send_progress, 10, 70);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
396 gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(gtkmedia->priv->send_progress),
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
397 GTK_PROGRESS_BOTTOM_TO_TOP);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
398 gtk_box_pack_end(GTK_BOX(send_widget),
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
399 gtkmedia->priv->send_progress, FALSE, FALSE, 0);
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
400 gtk_widget_show(gtkmedia->priv->send_progress);
26114
9a48f9ebf100 Only show the mute button when sending an audio stream.
Michael Ruprecht <maiku@pidgin.im>
parents: 26113
diff changeset
401
9a48f9ebf100 Only show the mute button when sending an audio stream.
Michael Ruprecht <maiku@pidgin.im>
parents: 26113
diff changeset
402 gtk_widget_show(gtkmedia->priv->mute);
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
403 }
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
404
26151
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
405 bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
406
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
407 if (videorecvbool || videosendbin)
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
408 gst_bus_set_sync_handler(bus,
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
409 (GstBusSyncHandler)create_window, gtkmedia);
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
410
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
411 if (audiorecvbool || audiosendbin)
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
412 g_signal_connect(G_OBJECT(bus), "message::element",
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
413 G_CALLBACK(level_message_cb), gtkmedia);
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
414
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
415 gst_object_unref(bus);
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
416 }
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
417
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
418 static void
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
419 pidgin_media_wait_cb(PurpleMedia *media, PidginMedia *gtkmedia)
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
420 {
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
421 pidgin_media_set_state(gtkmedia, PIDGIN_MEDIA_WAITING);
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
422 }
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
423
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
424 /* maybe we should have different callbacks for when we received the accept
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
425 and we accepted ourselves */
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
426 static void
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
427 pidgin_media_accept_cb(PurpleMedia *media, PidginMedia *gtkmedia)
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
428 {
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
429 GstElement *audiosendbin = NULL;
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
430 GstElement *audiorecvbin = NULL;
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
431 GstElement *videosendbin = NULL;
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
432 GstElement *videorecvbin = NULL;
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
433
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
434 pidgin_media_emit_message(gtkmedia, _("Call in progress."));
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
435 pidgin_media_set_state(gtkmedia, PIDGIN_MEDIA_ACCEPTED);
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
436
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
437 purple_media_get_elements(media, &audiosendbin, &audiorecvbin,
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
438 &videosendbin, &videorecvbin);
218a4f61cf0d Prepare vv GUI earlier and create sinks when src-pad-added is triggered.
Michael Ruprecht <maiku@pidgin.im>
parents: 26143
diff changeset
439
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
440 if (audiorecvbin || audiosendbin || videorecvbin || videosendbin)
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26108
diff changeset
441 gtk_widget_show(gtkmedia->priv->display);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
442 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
443
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
444 static void
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
445 pidgin_media_hangup_cb(PurpleMedia *media, PidginMedia *gtkmedia)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
446 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
447 pidgin_media_emit_message(gtkmedia, _("You have ended the call."));
22072
4ad1e1e6d94e Remove a compile error, and a few warnings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19886
diff changeset
448 gtk_widget_destroy(GTK_WIDGET(gtkmedia));
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
449 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
450
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
451 static void
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
452 pidgin_media_got_request_cb(PurpleMedia *media, PidginMedia *gtkmedia)
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
453 {
26108
8d0fd2f195aa Changed PurpleMediaStreamType to PurpleMediaSessionType.
Michael Ruprecht <maiku@pidgin.im>
parents: 26103
diff changeset
454 PurpleMediaSessionType type = purple_media_get_overall_type(media);
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
455 gchar *message;
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
456 gchar *name = purple_media_get_screenname(media);
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
457
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
458 if (type & PURPLE_MEDIA_AUDIO && type & PURPLE_MEDIA_VIDEO) {
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
459 message = g_strdup_printf(_("%s wishes to start an audio/video session with you."),
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
460 name);
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
461 } else if (type & PURPLE_MEDIA_AUDIO) {
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
462 message = g_strdup_printf(_("%s wishes to start an audio session with you."),
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
463 name);
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
464 } else if (type & PURPLE_MEDIA_VIDEO) {
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
465 message = g_strdup_printf(_("%s wishes to start a video session with you."),
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
466 name);
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
467 } else {
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
468 g_free(name);
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
469 return;
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
470 }
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
471
26116
41f7d4545566 Fixed a ton of memory leaks.
Michael Ruprecht <maiku@pidgin.im>
parents: 26114
diff changeset
472 g_free(name);
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
473 pidgin_media_emit_message(gtkmedia, message);
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
474 g_free(message);
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
475 }
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
476
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
477 static void
22400
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
478 pidgin_media_got_hangup_cb(PurpleMedia *media, PidginMedia *gtkmedia)
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
479 {
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
480 pidgin_media_emit_message(gtkmedia, _("The call has been terminated."));
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
481 gtk_widget_destroy(GTK_WIDGET(gtkmedia));
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
482 }
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
483
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
484 static void
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
485 pidgin_media_reject_cb(PurpleMedia *media, PidginMedia *gtkmedia)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
486 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
487 pidgin_media_emit_message(gtkmedia, _("You have rejected the call."));
22072
4ad1e1e6d94e Remove a compile error, and a few warnings.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 19886
diff changeset
488 gtk_widget_destroy(GTK_WIDGET(gtkmedia));
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
489 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
490
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
491 static void
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
492 pidgin_media_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
493 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
494 PidginMedia *media;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
495 g_return_if_fail(PIDGIN_IS_MEDIA(object));
22400
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
496
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
497 media = PIDGIN_MEDIA(object);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
498 switch (prop_id) {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
499 case PROP_MEDIA:
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
500 if (media->priv->media)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
501 g_object_unref(media->priv->media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
502 media->priv->media = g_value_get_object(value);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
503 g_object_ref(media->priv->media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
504 g_signal_connect_swapped(G_OBJECT(media->priv->accept), "clicked",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
505 G_CALLBACK(purple_media_accept), media->priv->media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
506 g_signal_connect_swapped(G_OBJECT(media->priv->reject), "clicked",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
507 G_CALLBACK(purple_media_reject), media->priv->media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
508 g_signal_connect_swapped(G_OBJECT(media->priv->hangup), "clicked",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
509 G_CALLBACK(purple_media_hangup), media->priv->media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
510
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
511 g_signal_connect(G_OBJECT(media->priv->media), "accepted",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
512 G_CALLBACK(pidgin_media_accept_cb), media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
513 g_signal_connect(G_OBJECT(media->priv->media) ,"ready",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
514 G_CALLBACK(pidgin_media_ready_cb), media);
22682
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
515 g_signal_connect(G_OBJECT(media->priv->media) ,"wait",
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
516 G_CALLBACK(pidgin_media_wait_cb), media);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
517 g_signal_connect(G_OBJECT(media->priv->media), "hangup",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
518 G_CALLBACK(pidgin_media_hangup_cb), media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
519 g_signal_connect(G_OBJECT(media->priv->media), "reject",
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
520 G_CALLBACK(pidgin_media_reject_cb), media);
23737
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
521 g_signal_connect(G_OBJECT(media->priv->media), "got-request",
91165a8fcbd9 Notify the user which type of media session the remote user wants to initiate.
Michael Ruprecht <maiku@pidgin.im>
parents: 23736
diff changeset
522 G_CALLBACK(pidgin_media_got_request_cb), media);
22400
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
523 g_signal_connect(G_OBJECT(media->priv->media), "got-hangup",
3762d64b1f58 Show a message when the remote end terminates a session.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22072
diff changeset
524 G_CALLBACK(pidgin_media_got_hangup_cb), media);
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
525 g_signal_connect(G_OBJECT(media->priv->media), "got-accept",
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
526 G_CALLBACK(pidgin_media_accept_cb), media);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
527 break;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
528 case PROP_SEND_LEVEL:
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
529 if (media->priv->send_level)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
530 gst_object_unref(media->priv->send_level);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
531 media->priv->send_level = g_value_get_object(value);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
532 g_object_ref(media->priv->send_level);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
533 break;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
534 case PROP_RECV_LEVEL:
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
535 if (media->priv->recv_level)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
536 gst_object_unref(media->priv->recv_level);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
537 media->priv->recv_level = g_value_get_object(value);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
538 g_object_ref(media->priv->recv_level);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
539 break;
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
540 default:
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
541 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
542 break;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
543 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
544 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
545
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
546 static void
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
547 pidgin_media_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
548 {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
549 PidginMedia *media;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
550 g_return_if_fail(PIDGIN_IS_MEDIA(object));
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
551
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
552 media = PIDGIN_MEDIA(object);
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
553
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
554 switch (prop_id) {
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
555 case PROP_MEDIA:
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
556 g_value_set_object(value, media->priv->media);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
557 break;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
558 case PROP_SEND_LEVEL:
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
559 g_value_set_object(value, media->priv->send_level);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
560 break;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
561 case PROP_RECV_LEVEL:
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
562 g_value_set_object(value, media->priv->recv_level);
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
563 break;
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
564 default:
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
565 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
566 break;
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
567 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
568 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
569
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
570 GtkWidget *
23721
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
571 pidgin_media_new(PurpleMedia *media)
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
572 {
23721
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
573 PidginMedia *gtkmedia = g_object_new(pidgin_media_get_type(),
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
574 "media", media, NULL);
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
575 return GTK_WIDGET(gtkmedia);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
576 }
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
577
22682
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
578 static void
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
579 pidgin_media_set_state(PidginMedia *gtkmedia, PidginMediaState state)
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
580 {
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
581 gtkmedia->priv->state = state;
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
582 switch (state) {
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
583 case PIDGIN_MEDIA_WAITING:
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
584 gtk_widget_show(gtkmedia->priv->calling);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
585 gtk_widget_hide(gtkmedia->priv->accept);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
586 gtk_widget_hide(gtkmedia->priv->reject);
22682
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
587 gtk_widget_show(gtkmedia->priv->hangup);
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
588 break;
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
589 case PIDGIN_MEDIA_REQUESTED:
22682
8df904a56d77 Change a few things:
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22648
diff changeset
590 gtk_widget_hide(gtkmedia->priv->calling);
22648
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
591 gtk_widget_show(gtkmedia->priv->accept);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
592 gtk_widget_show(gtkmedia->priv->reject);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
593 gtk_widget_hide(gtkmedia->priv->hangup);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
594 break;
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
595 case PIDGIN_MEDIA_ACCEPTED:
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
596 gtk_widget_show(gtkmedia->priv->hangup);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
597 gtk_widget_hide(gtkmedia->priv->calling);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
598 gtk_widget_hide(gtkmedia->priv->accept);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
599 gtk_widget_hide(gtkmedia->priv->reject);
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
600 break;
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
601 default:
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
602 break;
e286d795c5f9 Patch from Marcus Lundblad ('mlundblad') to improve audio support in xmpp.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents: 22400
diff changeset
603 }
19886
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
604 }
84cef48efbc5 Missing files
Sean Egan <seanegan@pidgin.im>
parents:
diff changeset
605
23704
9b88c9b23aed Use USE_VV instead of USE_FARSIGHT.
Michael Ruprecht <maiku@pidgin.im>
parents: 23701
diff changeset
606 #endif /* USE_VV */

mercurial