void CALSADirectSound::EnumerateAudioSinks(AudioSinkList& vAudioSinks, bool passthrough) { if (!passthrough) { vAudioSinks.push_back(AudioSink(g_localizeStrings.Get(409) + " (ALSA)", "alsa:default")); vAudioSinks.push_back(AudioSink("iec958 (ALSA)" , "alsa:plug:iec958")); vAudioSinks.push_back(AudioSink("hdmi (ALSA)" , "alsa:plug:hdmi")); } else { vAudioSinks.push_back(AudioSink("iec958 (ALSA)" , "alsa:iec958")); vAudioSinks.push_back(AudioSink("hdmi (ALSA)" , "alsa:hdmi")); } int n_cards = -1; int numberCards = 0; while ( snd_card_next( &n_cards ) == 0 && n_cards >= 0 ) numberCards++; if (numberCards <= 1) return; snd_ctl_t *handle; snd_ctl_card_info_t *info; snd_ctl_card_info_alloca( &info ); CStdString strHwName; n_cards = -1; while ( snd_card_next( &n_cards ) == 0 && n_cards >= 0 ) { strHwName.Format("hw:%d", n_cards); if ( snd_ctl_open( &handle, strHwName.c_str(), 0 ) == 0 ) { if ( snd_ctl_card_info( handle, info ) == 0 ) { CStdString strReadableCardName = snd_ctl_card_info_get_name( info ); CStdString strCardName = snd_ctl_card_info_get_id( info ); if (!passthrough) GenSoundLabel(vAudioSinks, g_localizeStrings.Get(409), strCardName, strReadableCardName); GenSoundLabel(vAudioSinks, "iec958", strCardName, strReadableCardName); GenSoundLabel(vAudioSinks, "hdmi", strCardName, strReadableCardName); } else CLog::Log(LOGERROR,"((ALSAENUM))control hardware info (%i): failed.\n", n_cards ); snd_ctl_close( handle ); } else CLog::Log(LOGERROR,"((ALSAENUM))control open (%i) failed.\n", n_cards ); } }
void CALSADirectSound::GenSoundLabel(AudioSinkList& vAudioSinks, CStdString sink, CStdString card, int dev, CStdString readableCard) { CStdString deviceString; deviceString.Format("%s:CARD=%s,DEV=%d", sink, card.c_str(), dev); CStdString finalSink; finalSink.Format("alsa:%s", deviceString.c_str()); CStdString label; label.Format("%s - %s - %d (ALSA)", readableCard.c_str(), sink.c_str(), dev); vAudioSinks.push_back(AudioSink(label, finalSink)); }
void CALSADirectSound::GenSoundLabel(AudioSinkList& vAudioSinks, CStdString sink, CStdString card, CStdString readableCard) { CStdString deviceString; deviceString.Format("%s:CARD=%s", sink, card.c_str()); if (sink.Equals(g_localizeStrings.Get(409)) || SoundDeviceExists(deviceString.c_str())) { CStdString finalSink; finalSink.Format("alsa:%s", deviceString.c_str()); CStdString label = readableCard + " " + sink + " (ALSA)"; vAudioSinks.push_back(AudioSink(label, finalSink)); } }