summaryrefslogtreecommitdiff
path: root/src/mixer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mixer.cc')
-rw-r--r--src/mixer.cc27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/mixer.cc b/src/mixer.cc
index 5a6efb7..00cf156 100644
--- a/src/mixer.cc
+++ b/src/mixer.cc
@@ -161,6 +161,22 @@ bool Mixer::isEnum()
void Mixer::setEnumValue(std::string value)
{
if(!isEnum()) return;
+
+ int i, items;
+ unsigned int idx;
+ char itemname[40];
+
+ // TODO: Alaways MONO for enums?
+ snd_mixer_selem_channel_id_t channel_id = SND_MIXER_SCHN_MONO;
+
+ items = snd_mixer_selem_get_enum_items(elem);
+ for (i = 0; i < items; i++) {
+ snd_mixer_selem_get_enum_item_name(elem, i, sizeof(itemname) - 1, itemname);
+ if(value == itemname) {
+ snd_mixer_selem_set_enum_item(elem, channel_id, i);
+ return;
+ }
+ }
}
std::string Mixer::enumValue()
@@ -170,9 +186,11 @@ std::string Mixer::enumValue()
int i;
unsigned int idx;
char itemname[40];
- for(i = 0; !snd_mixer_selem_get_enum_item(elem,
- (snd_mixer_selem_channel_id_t)i,
- &idx); i++) {
+
+ // TODO: Alaways MONO for enums?
+ snd_mixer_selem_channel_id_t channel_id = SND_MIXER_SCHN_MONO;
+
+ if(!snd_mixer_selem_get_enum_item(elem, channel_id, &idx)) {
snd_mixer_selem_get_enum_item_name(elem, idx,
sizeof(itemname) - 1, itemname);
return itemname;
@@ -190,8 +208,7 @@ std::vector<std::string> Mixer::enumValues()
char itemname[40];
items = snd_mixer_selem_get_enum_items(elem);
for (i = 0; i < items; i++) {
- snd_mixer_selem_get_enum_item_name(elem, (snd_mixer_selem_channel_id_t)i,
- sizeof(itemname) - 1, itemname);
+ snd_mixer_selem_get_enum_item_name(elem, i, sizeof(itemname) - 1, itemname);
values.push_back(itemname);
}