34
34
#include "gvc-speaker-test.h"
35
35
#include "gvc-mixer-stream.h"
36
#include "gvc-mixer-card.h"
38
37
#define GVC_SPEAKER_TEST_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GVC_TYPE_SPEAKER_TEST, GvcSpeakerTestPrivate))
89
88
GvcSpeakerTest *self = GVC_SPEAKER_TEST (object);
93
self->priv->card = g_value_dup_object (value);
92
self->priv->stream = g_value_dup_object (value);
94
93
if (self->priv->control != NULL)
95
94
update_channel_map (self);
98
97
self->priv->control = g_value_dup_object (value);
99
if (self->priv->card != NULL)
98
if (self->priv->stream != NULL)
100
99
update_channel_map (self);
114
113
GvcSpeakerTest *self = GVC_SPEAKER_TEST (object);
116
115
switch (prop_id) {
118
g_value_set_object (value, self->priv->card);
117
g_value_set_object (value, self->priv->stream);
120
119
case PROP_CONTROL:
121
120
g_value_set_object (value, self->priv->control);
136
135
object_class->get_property = gvc_speaker_test_get_property;
138
137
g_object_class_install_property (object_class,
140
g_param_spec_object ("card",
139
g_param_spec_object ("stream",
142
GVC_TYPE_MIXER_STREAM,
144
143
G_PARAM_READWRITE|G_PARAM_CONSTRUCT));
145
144
g_object_class_install_property (object_class,
331
330
gtk_box_pack_start (GTK_BOX (control), label, FALSE, FALSE, 0);
333
332
test_button = gtk_button_new_with_label (_("Test"));
335
334
g_signal_connect (G_OBJECT (test_button), "clicked",
336
335
G_CALLBACK (on_test_button_clicked), control);
337
336
g_object_set_data (G_OBJECT (control), "button", test_button);
369
static const GvcChannelMap *
370
get_channel_map_for_card (GvcMixerControl *control,
376
GvcMixerStream *stream;
377
const GvcChannelMap *map;
379
/* This gets the channel map for the only
380
* output for the card */
382
card_index = gvc_mixer_card_get_index (card);
383
if (card_index == PA_INVALID_INDEX)
385
sinks = gvc_mixer_control_get_sinks (control);
387
for (l = sinks; l != NULL; l = l->next) {
388
GvcMixerStream *s = l->data;
389
if (gvc_mixer_stream_get_card_index (s) == card_index) {
390
stream = g_object_ref (s);
394
g_slist_free (sinks);
399
g_debug ("Found stream '%s' for card '%s'",
400
gvc_mixer_stream_get_name (stream),
401
gvc_mixer_card_get_name (card));
403
*output_name = g_strdup (gvc_mixer_stream_get_name (stream));
404
map = gvc_mixer_stream_get_channel_map (stream);
406
g_debug ("Got channel map '%s' for port '%s'",
407
gvc_channel_map_get_mapping (map), *output_name);
413
369
update_channel_map (GvcSpeakerTest *speaker_test)
416
372
const GvcChannelMap *map;
419
374
g_return_if_fail (speaker_test->priv->control != NULL);
420
g_return_if_fail (speaker_test->priv->card != NULL);
375
g_return_if_fail (speaker_test->priv->stream != NULL);
422
377
g_debug ("XXX update_channel_map called XXX");
424
map = get_channel_map_for_card (speaker_test->priv->control,
425
speaker_test->priv->card,
379
map = gvc_mixer_stream_get_channel_map (speaker_test->priv->stream);
428
380
g_return_if_fail (map != NULL);
430
ca_context_change_device (speaker_test->priv->canberra, output_name);
431
g_free (output_name);
382
ca_context_change_device (speaker_test->priv->canberra,
383
gvc_mixer_stream_get_name (speaker_test->priv->stream));
433
385
for (i = 0; i < G_N_ELEMENTS (position_table); i += 3) {
434
386
gtk_widget_set_visible (speaker_test->priv->channel_controls[position_table[i]],
496
448
g_return_if_fail (speaker_test->priv != NULL);
498
g_object_unref (speaker_test->priv->card);
499
speaker_test->priv->card = NULL;
450
g_object_unref (speaker_test->priv->stream);
451
speaker_test->priv->stream = NULL;
501
453
g_object_unref (speaker_test->priv->control);
502
454
speaker_test->priv->control = NULL;
511
463
gvc_speaker_test_new (GvcMixerControl *control,
464
GvcMixerStream *stream)
514
466
GObject *speaker_test;
516
g_return_val_if_fail (card != NULL, NULL);
468
g_return_val_if_fail (stream != NULL, NULL);
517
469
g_return_val_if_fail (control != NULL, NULL);
519
471
speaker_test = g_object_new (GVC_TYPE_SPEAKER_TEST,
521
473
"control", control,