diff options
author | Sjoerd Simons <sjoerd.simons@collabora.co.uk> | 2009-11-06 16:48:24 +0000 |
---|---|---|
committer | Sjoerd Simons <sjoerd.simons@collabora.co.uk> | 2009-12-07 18:58:05 +0000 |
commit | 976334fb14d807367a7d5cb99094772d794410a5 (patch) | |
tree | ca95a3bb99204f9021ea256ea16d9138bc9f47e2 /src/call-content.c | |
parent | c92ce4979f55a65be616dcf6a8731b2b110bf9a7 (diff) | |
download | telepathy-gabble-976334fb14d807367a7d5cb99094772d794410a5.tar.gz |
Allow the codecmap to generate both local and remote codecs
Diffstat (limited to 'src/call-content.c')
-rw-r--r-- | src/call-content.c | 73 |
1 files changed, 56 insertions, 17 deletions
diff --git a/src/call-content.c b/src/call-content.c index cc1bc1a6a..1d7b0a58f 100644 --- a/src/call-content.c +++ b/src/call-content.c @@ -45,6 +45,7 @@ static void call_content_iface_init (gpointer, gpointer); static void call_content_media_iface_init (gpointer, gpointer); static GPtrArray *call_content_codec_list_to_array (GList *codecs); +static GHashTable *call_content_generate_codec_map (GabbleCallContent *self); G_DEFINE_TYPE_WITH_CODE(GabbleCallContent, gabble_call_content, G_TYPE_OBJECT, @@ -60,12 +61,12 @@ G_DEFINE_TYPE_WITH_CODE(GabbleCallContent, gabble_call_content, enum { PROP_OBJECT_PATH = 1, - PROP_JINGLE_CONTENT, PROP_CONNECTION, + PROP_JINGLE_CONTENT, + PROP_TARGET_HANDLE, PROP_CONTACT_CODEC_MAP, PROP_STREAMS, - }; #if 0 @@ -86,6 +87,7 @@ struct _GabbleCallContentPrivate GabbleConnection *conn; gchar *object_path; + TpHandle target; GabbleJingleContent *content; GList *streams; @@ -121,6 +123,9 @@ gabble_call_content_get_property (GObject *object, case PROP_JINGLE_CONTENT: g_value_set_object (value, priv->content); break; + case PROP_TARGET_HANDLE: + g_value_set_uint (value, priv->target); + break; case PROP_CONNECTION: g_value_set_object (value, priv->conn); break; @@ -142,24 +147,10 @@ gabble_call_content_get_property (GObject *object, } case PROP_CONTACT_CODEC_MAP: { - GList *codecs; GHashTable *map; - GPtrArray *arr; - - codecs = gabble_jingle_media_rtp_get_local_codecs ( - GABBLE_JINGLE_MEDIA_RTP (priv->content)); - - arr = call_content_codec_list_to_array (codecs); - - map = g_hash_table_new_full (g_direct_hash, g_direct_equal, - NULL, (GDestroyNotify) g_ptr_array_unref); - - g_hash_table_insert (map, - GUINT_TO_POINTER (TP_BASE_CONNECTION (priv->conn)->self_handle), - arr); + map = call_content_generate_codec_map (content); g_value_set_boxed (value, map); - g_hash_table_unref (map); break; } @@ -187,6 +178,9 @@ gabble_call_content_set_property (GObject *object, case PROP_JINGLE_CONTENT: priv->content = g_value_dup_object (value); break; + case PROP_TARGET_HANDLE: + priv->target = g_value_get_uint (value); + break; case PROP_CONNECTION: priv->conn = g_value_get_object (value); break; @@ -288,6 +282,16 @@ gabble_call_content_class_init ( g_object_class_install_property (object_class, PROP_JINGLE_CONTENT, param_spec); + param_spec = g_param_spec_uint ("target-handle", "Target Handle", + "Target handle of the call channel", + 0, G_MAXUINT, 0, + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_READWRITE | + G_PARAM_STATIC_NAME | + G_PARAM_STATIC_BLURB); + g_object_class_install_property (object_class, PROP_TARGET_HANDLE, + param_spec); + param_spec = g_param_spec_object ("connection", "GabbleConnection object", "Gabble connection object that owns this media channel object.", GABBLE_TYPE_CONNECTION, @@ -428,3 +432,38 @@ call_content_codec_list_to_array (GList *codecs) return arr; } + +static GHashTable * +call_content_generate_codec_map (GabbleCallContent *self) +{ + GabbleCallContentPrivate *priv = self->priv; + GList *codecs; + GHashTable *map; + GPtrArray *arr; + + map = g_hash_table_new_full (g_direct_hash, g_direct_equal, + NULL, (GDestroyNotify) g_ptr_array_unref); + + /* Local codecs */ + codecs = gabble_jingle_media_rtp_get_local_codecs ( + GABBLE_JINGLE_MEDIA_RTP (priv->content)); + + if (codecs != NULL) + { + arr = call_content_codec_list_to_array (codecs); + g_hash_table_insert (map, + GUINT_TO_POINTER (TP_BASE_CONNECTION (priv->conn)->self_handle), + arr); + } + + codecs = gabble_jingle_media_rtp_get_remote_codecs ( + GABBLE_JINGLE_MEDIA_RTP (priv->content)); + + if (codecs != NULL) + { + arr = call_content_codec_list_to_array (codecs); + g_hash_table_insert (map, GUINT_TO_POINTER (priv->target), arr); + } + + return map; +} |