comparison libpurple/media/media.c @ 29179:a39696686dd6

Move set_remote_codecs functionality to the Fs2 media backend.
author maiku@pidgin.im
date Mon, 26 Oct 2009 23:10:53 +0000
parents f0966e90ec44
children ec5ed142f551
comparison
equal deleted inserted replaced
29178:a7cad99144f0 29179:a39696686dd6
654 param->key, param->value); 654 param->key, param->value);
655 } 655 }
656 656
657 g_free(encoding_name); 657 g_free(encoding_name);
658 return new_codec; 658 return new_codec;
659 }
660
661 static PurpleMediaCodec *
662 purple_media_codec_from_fs(const FsCodec *codec)
663 {
664 PurpleMediaCodec *new_codec;
665 GList *iter;
666
667 if (codec == NULL)
668 return NULL;
669
670 new_codec = purple_media_codec_new(codec->id, codec->encoding_name,
671 purple_media_from_fs(codec->media_type,
672 FS_DIRECTION_BOTH), codec->clock_rate);
673 g_object_set(new_codec, "channels", codec->channels, NULL);
674
675 for (iter = codec->optional_params; iter; iter = g_list_next(iter)) {
676 FsCodecParameter *param = (FsCodecParameter*)iter->data;
677 purple_media_codec_add_optional_parameter(new_codec,
678 param->name, param->value);
679 }
680
681 return new_codec;
682 }
683
684 static GList *
685 purple_media_codec_list_from_fs(GList *codecs)
686 {
687 GList *new_list = NULL;
688
689 for (; codecs; codecs = g_list_next(codecs)) {
690 new_list = g_list_prepend(new_list,
691 purple_media_codec_from_fs(
692 codecs->data));
693 }
694
695 new_list = g_list_reverse(new_list);
696 return new_list;
697 }
698
699 static GList *
700 purple_media_codec_list_to_fs(GList *codecs)
701 {
702 GList *new_list = NULL;
703
704 for (; codecs; codecs = g_list_next(codecs)) {
705 new_list = g_list_prepend(new_list,
706 purple_media_codec_to_fs(
707 codecs->data));
708 }
709
710 new_list = g_list_reverse(new_list);
711 return new_list;
712 } 659 }
713 660
714 static PurpleMediaSession* 661 static PurpleMediaSession*
715 purple_media_get_session(PurpleMedia *media, const gchar *sess_id) 662 purple_media_get_session(PurpleMedia *media, const gchar *sess_id)
716 { 663 {
1583 gboolean 1530 gboolean
1584 purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id, 1531 purple_media_set_remote_codecs(PurpleMedia *media, const gchar *sess_id,
1585 const gchar *participant, GList *codecs) 1532 const gchar *participant, GList *codecs)
1586 { 1533 {
1587 #ifdef USE_VV 1534 #ifdef USE_VV
1588 PurpleMediaStream *stream;
1589 FsStream *fsstream;
1590 GList *fscodecs;
1591 GError *err = NULL;
1592
1593 g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE); 1535 g_return_val_if_fail(PURPLE_IS_MEDIA(media), FALSE);
1594 stream = purple_media_get_stream(media, sess_id, participant); 1536
1595 1537 return purple_media_backend_set_remote_codecs(media->priv->backend,
1596 if (stream == NULL) 1538 sess_id, participant, codecs);
1597 return FALSE;
1598
1599 fsstream = stream->stream;
1600 fscodecs = purple_media_codec_list_to_fs(codecs);
1601 fs_stream_set_remote_codecs(fsstream, fscodecs, &err);
1602 fs_codec_list_destroy(fscodecs);
1603
1604 if (err) {
1605 purple_debug_error("media", "Error setting remote codecs: %s\n",
1606 err->message);
1607 g_error_free(err);
1608 return FALSE;
1609 }
1610 return TRUE;
1611 #else 1539 #else
1612 return FALSE; 1540 return FALSE;
1613 #endif 1541 #endif
1614 } 1542 }
1615 1543