comparison libpurple/media.c @ 24971:1ce297c8923b

Added media functions to set input and output volume.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Sat, 13 Dec 2008 08:37:57 +0000
parents ca0c9cc50e35
children 93cc8982d4e5
comparison
equal deleted inserted replaced
24970:99055b8db16b 24971:1ce297c8923b
447 !strcmp(stream->participant, participant)) 447 !strcmp(stream->participant, participant))
448 return stream; 448 return stream;
449 } 449 }
450 450
451 return NULL; 451 return NULL;
452 }
453
454 static GList *
455 purple_media_get_streams(PurpleMedia *media, const gchar *session,
456 const gchar *participant)
457 {
458 GList *streams = media->priv->streams;
459 GList *ret = NULL;
460
461 for (; streams; streams = g_list_next(streams)) {
462 PurpleMediaStream *stream = streams->data;
463 if ((session == NULL ||
464 !strcmp(stream->session->id, session)) &&
465 (participant == NULL ||
466 !strcmp(stream->participant, participant)))
467 ret = g_list_append(ret, stream);
468 }
469
470 return ret;
452 } 471 }
453 472
454 static void 473 static void
455 purple_media_add_session(PurpleMedia *media, PurpleMediaSession *session) 474 purple_media_add_session(PurpleMedia *media, PurpleMediaSession *session)
456 { 475 {
1376 g_object_set(volume, "mute", active, NULL); 1395 g_object_set(volume, "mute", active, NULL);
1377 } 1396 }
1378 } 1397 }
1379 } 1398 }
1380 1399
1400 void purple_media_set_input_volume(PurpleMedia *media,
1401 const gchar *session_id, double level)
1402 {
1403 GList *sessions;
1404
1405 if (session_id == NULL)
1406 sessions = g_hash_table_get_values(media->priv->sessions);
1407 else
1408 sessions = g_list_append(NULL,
1409 purple_media_get_session(media, session_id));
1410
1411 for (; sessions; sessions = g_list_delete_link(sessions, sessions)) {
1412 PurpleMediaSession *session = sessions->data;
1413
1414 if (session->type & PURPLE_MEDIA_SEND_AUDIO) {
1415 GstElement *volume = gst_bin_get_by_name(
1416 GST_BIN(session->src),
1417 "purpleaudioinputvolume");
1418 g_object_set(volume, "volume", level, NULL);
1419 }
1420 }
1421 }
1422
1423 void purple_media_set_output_volume(PurpleMedia *media,
1424 const gchar *session_id, const gchar *participant,
1425 double level)
1426 {
1427 GList *streams = purple_media_get_streams(media,
1428 session_id, participant);
1429
1430 for (; streams; streams = g_list_delete_link(streams, streams)) {
1431 PurpleMediaStream *stream = streams->data;
1432
1433 if (stream->session->type & PURPLE_MEDIA_RECV_AUDIO) {
1434 GstElement *volume = gst_bin_get_by_name(
1435 GST_BIN(stream->session->sink),
1436 "purpleaudiooutputvolume");
1437 g_object_set(volume, "volume", level, NULL);
1438 }
1439 }
1440 }
1441
1381 #endif /* USE_VV */ 1442 #endif /* USE_VV */