[Telepathy-commits] [telepathy-gabble/master] Add list to hold changed local codecs.
Will Thompson
will.thompson at collabora.co.uk
Fri Feb 27 05:04:11 PST 2009
---
src/jingle-media-rtp.c | 35 ++++++++++++++++++++++++++++++++---
1 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/src/jingle-media-rtp.c b/src/jingle-media-rtp.c
index 17f6d41..bc60d36 100644
--- a/src/jingle-media-rtp.c
+++ b/src/jingle-media-rtp.c
@@ -67,6 +67,13 @@ typedef enum {
struct _GabbleJingleMediaRtpPrivate
{
GList *local_codecs;
+ /* Holds (JingleCodec *)s borrowed from local_codecs, namely those which have
+ * changed from local_codecs' previous value. Since the contents are
+ * borrowed, this must be freed with g_list_free, not
+ * jingle_media_rtp_free_codecs().
+ */
+ GList *local_codec_updates;
+
GList *remote_codecs;
JingleMediaType media_type;
gboolean dispose_has_run;
@@ -139,6 +146,14 @@ gabble_jingle_media_rtp_dispose (GObject *object)
jingle_media_rtp_free_codecs (priv->local_codecs);
priv->local_codecs = NULL;
+ if (priv->local_codec_updates != NULL)
+ {
+ DEBUG ("We have an unsent codec parameter update! Weird.");
+
+ g_list_free (priv->local_codec_updates);
+ priv->local_codec_updates = NULL;
+ }
+
if (G_OBJECT_CLASS (gabble_jingle_media_rtp_parent_class)->dispose)
G_OBJECT_CLASS (gabble_jingle_media_rtp_parent_class)->dispose (object);
}
@@ -493,8 +508,7 @@ produce_payload_type (LmMessageNode *desc_node,
static void
produce_description (GabbleJingleContent *obj, LmMessageNode *content_node)
{
- GabbleJingleMediaRtp *desc =
- GABBLE_JINGLE_MEDIA_RTP (obj);
+ GabbleJingleMediaRtp *desc = GABBLE_JINGLE_MEDIA_RTP (obj);
GabbleJingleSession *sess;
GabbleJingleMediaRtpPrivate *priv = desc->priv;
LmMessageNode *desc_node;
@@ -538,8 +552,20 @@ produce_description (GabbleJingleContent *obj, LmMessageNode *content_node)
lm_message_node_set_attribute (desc_node, "xmlns", xmlns);
- for (li = priv->local_codecs; li; li = li->next)
+ /* If we're only updating our codec parameters, only generate payload-types
+ * for those.
+ */
+ if (priv->local_codec_updates != NULL)
+ li = priv->local_codec_updates;
+ else
+ li = priv->local_codecs;
+
+ for (; li != NULL; li = li->next)
produce_payload_type (desc_node, li->data, dialect);
+
+ /* If we were updating, then we're done with the diff. */
+ g_list_free (priv->local_codec_updates);
+ priv->local_codec_updates = NULL;
}
/* Takes in a list of slice-allocated JingleCodec structs */
@@ -550,6 +576,9 @@ jingle_media_rtp_set_local_codecs (GabbleJingleMediaRtp *self, GList *codecs)
DEBUG ("setting new local codecs");
+ /* TODO: if priv->local_codecs is non-empty, set priv->local_codec_updates to
+ * the changed codecs.
+ */
jingle_media_rtp_free_codecs (priv->local_codecs);
priv->local_codecs = codecs;
--
1.5.6.5
More information about the telepathy-commits
mailing list