ActiveAE: fix wrong device name after creating audio device
authorRainer Hochecker <fernetmenta@online.de>
Wed, 2 Oct 2013 18:15:20 +0000 (20:15 +0200)
committerRainer Hochecker <fernetmenta@online.de>
Wed, 2 Oct 2013 18:18:09 +0000 (20:18 +0200)
xbmc/cores/AudioEngine/Engines/ActiveAE/ActiveAESink.cpp

index 2959510..98b31f9 100644 (file)
@@ -594,10 +594,13 @@ void CActiveAESink::GetDeviceFriendlyName(std::string &device)
 
 void CActiveAESink::OpenSink()
 {
+  // we need a copy of m_device here because ParseDevice and CreateDevice write back
+  // into this variable
+  std::string device = m_device;
   std::string driver;
   bool passthrough = AE_IS_RAW(m_requestedFormat.m_dataFormat);
 
-  CAESinkFactory::ParseDevice(m_device, driver);
+  CAESinkFactory::ParseDevice(device, driver);
   if (driver.empty() && m_sink)
     driver = m_sink->GetName();
 
@@ -608,7 +611,7 @@ void CActiveAESink::OpenSink()
     std::transform(sinkName.begin(), sinkName.end(), sinkName.begin(), ::toupper);
   }
 
-  if (!m_sink || sinkName != driver || !m_sink->IsCompatible(m_requestedFormat, m_device))
+  if (!m_sink || sinkName != driver || !m_sink->IsCompatible(m_requestedFormat, device))
   {
     CLog::Log(LOGINFO, "CActiveAE::OpenSink - sink incompatible, re-starting");
 
@@ -621,16 +624,16 @@ void CActiveAESink::OpenSink()
     }
 
     // get the display name of the device
-    GetDeviceFriendlyName(m_device);
+    GetDeviceFriendlyName(device);
 
     // if we already have a driver, prepend it to the device string
     if (!driver.empty())
-      m_device = driver + ":" + m_device;
+      device = driver + ":" + device;
 
     // WARNING: this changes format and does not use passthrough
     m_sinkFormat = m_requestedFormat;
-    CLog::Log(LOGDEBUG, "CActiveAE::OpenSink - trying to open device %s", m_device.c_str());
-    m_sink = CAESinkFactory::Create(m_device, m_sinkFormat, passthrough);
+    CLog::Log(LOGDEBUG, "CActiveAE::OpenSink - trying to open device %s", device.c_str());
+    m_sink = CAESinkFactory::Create(device, m_sinkFormat, passthrough);
 
     if (!m_sink)
     {