Merge pull request #4467 from Memphiz/osxnosamplerate
authorTrent Nelson <trent.a.b.nelson@gmail.com>
Fri, 28 Mar 2014 17:03:57 +0000 (11:03 -0600)
committerTrent Nelson <trent.a.b.nelson@gmail.com>
Fri, 28 Mar 2014 17:06:03 +0000 (11:06 -0600)
[osxsink] - for devices which report samplerate 0hz - allow user overrid...

xbmc/cores/AudioEngine/Sinks/AESinkDARWINOSX.cpp

index 9d82b87..b539244 100644 (file)
@@ -199,6 +199,18 @@ static void EnumerateDevices(CADeviceList &list)
             }
 
             // add sample rate info
+            // quirk devices which don't report a valid samplerate
+            // add 44.1khz and 48khz in that case - user can use
+            // the "fixed" audio config to force one of them
+            if (desc.mSampleRate == 0)
+            {
+              CLog::Log(LOGWARNING, "%s no valid samplerate - adding 44.1khz and 48khz quirk", __FUNCTION__);
+              desc.mSampleRate = 44100;
+              if (!HasSampleRate(device.m_sampleRates, desc.mSampleRate))
+                device.m_sampleRates.push_back(desc.mSampleRate);
+              desc.mSampleRate = 48000;
+            }
+
             if (!HasSampleRate(device.m_sampleRates, desc.mSampleRate))
               device.m_sampleRates.push_back(desc.mSampleRate);
           }
@@ -463,7 +475,14 @@ bool CAESinkDARWINOSX::Initialize(AEAudioFormat &format, std::string &device)
     CCoreAudioStream::GetAvailablePhysicalFormats(*i, &formats);
     for (StreamFormatList::const_iterator j = formats.begin(); j != formats.end(); ++j)
     {
-      const AudioStreamBasicDescription &desc = j->mFormat;
+      AudioStreamBasicDescription desc = j->mFormat;
+
+      // quirk devices with invalid sample rate
+      // assume that the user uses a fixed config
+      // and knows what he is doing - so we use
+      // the requested samplerate here
+      if (desc.mSampleRate == 0)
+        desc.mSampleRate = format.m_sampleRate;
 
       float score = ScoreStream(desc, format);