Exemplo n.º 1
0
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 );
  }
}
Exemplo n.º 2
0
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));
}
Exemplo n.º 3
0
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));
  }
}