Ticket #3220: null_audio.patch2

File null_audio.patch2, 2.7 KB (added by siarzhuk, 15 years ago)

Crashing MUX control declaration.

Line 
1Index: null_multi.c
2===================================================================
3--- null_multi.c (revision 28814)
4+++ null_multi.c (working copy)
5@@ -150,13 +150,48 @@
6 static status_t
7 list_mix_controls(device_t* device, multi_mix_control_info * data)
8 {
9- int32 parent;
10+ int32 parent, i;
11+ const char* srcs[] = {"1", "2", "3"};
12+
13 dprintf("null_audio: %s\n" , __func__ );
14
15 parent = create_group_control(data->controls +0, 0, 0, 0, "Record");
16 parent = create_group_control(data->controls +1, 1, 0, 0, "Playback");
17- data->control_count = 2;
18+
19+ data->controls[2].id = MULTI_AUDIO_BASE_ID + 100;
20+ data->controls[2].parent = parent;
21+ data->controls[2].flags = B_MULTI_MIX_GAIN;
22+ data->controls[2].master = MULTI_AUDIO_MASTER_ID;
23+ data->controls[2].string = S_GAIN;
24+ data->controls[2].u.gain.min_gain = 0.;
25+ data->controls[2].u.gain.max_gain = 100.;
26+ data->controls[2].u.gain.granularity = 1.;
27+
28+ data->controls[3].id = MULTI_AUDIO_BASE_ID + 200;
29+ data->controls[3].parent = parent;
30+ data->controls[3].flags = B_MULTI_MIX_GAIN;
31+ data->controls[3].master = data->controls[2].id;
32+ data->controls[3].string = S_GAIN;
33+ data->controls[3].u.gain.min_gain = 0.;
34+ data->controls[3].u.gain.max_gain = 100.;
35+ data->controls[3].u.gain.granularity = 1.;
36
37+ data->controls[4].id = MULTI_AUDIO_BASE_ID + 300;
38+ data->controls[4].parent = parent;
39+ data->controls[4].flags = B_MULTI_MIX_MUX;
40+ data->controls[4].string = S_GAIN;
41+
42+ for(i = 0; i < 3; i++) {
43+ data->controls[i + 5].id = data->controls[4].id + i + 10;
44+ data->controls[i + 5].flags = B_MULTI_MIX_MUX_VALUE;
45+ data->controls[i + 5].master = 0;
46+ data->controls[i + 5].string = S_null;
47+ data->controls[i + 5].parent = data->controls[4].id;
48+ strncpy(data->controls[i + 5].name, srcs[i], sizeof(data->controls[i + 5].name));
49+ }
50+
51+ data->control_count = 8;
52+
53 return B_OK;
54 }
55
56@@ -334,8 +369,16 @@
57 case B_MULTI_SET_GLOBAL_FORMAT: return set_global_format(cookie, arg);
58 case B_MULTI_GET_CHANNEL_FORMATS: return B_ERROR;
59 case B_MULTI_SET_CHANNEL_FORMATS: return B_ERROR;
60- case B_MULTI_GET_MIX: return B_ERROR;
61- case B_MULTI_SET_MIX: return B_ERROR;
62+ case B_MULTI_GET_MIX: return B_OK;
63+ case B_MULTI_SET_MIX:
64+ {
65+ multi_mix_value_info *info = (multi_mix_value_info *)arg;
66+ int i = 0;
67+ for(i=0; i < info->item_count; i++) {
68+ dprintf("SET_MIX:item #%d id:%d\n", i, info->values[i].id);
69+ }
70+ return B_OK;
71+ }
72 case B_MULTI_LIST_MIX_CHANNELS: return list_mix_channels(cookie, arg);
73 case B_MULTI_LIST_MIX_CONTROLS: return list_mix_controls(cookie, arg);
74 case B_MULTI_LIST_MIX_CONNECTIONS: return list_mix_connections(cookie, arg);