cec: fixed handling of CEC_OPCODE_SET_STREAM_PATH
[deb_libcec.git] / src / lib / CECProcessor.cpp
index 53a1da3405e7e3a1c4b5a41a39444fda83c58d75..6259dae8ef0d6e116035e7f509479a09a3a50373 100644 (file)
@@ -298,15 +298,15 @@ bool CCECProcessor::SetActiveView(void)
     return bReturn;
 
   if (!m_logicalAddresses.empty() && m_busDevices[m_logicalAddresses.primary])
-  {
-    SetStreamPath(m_busDevices[m_logicalAddresses.primary]->GetPhysicalAddress());
-    bReturn = m_busDevices[m_logicalAddresses.primary]->TransmitActiveSource();
-  }
-  return false;
+    bReturn = SetStreamPath(m_busDevices[m_logicalAddresses.primary]->GetPhysicalAddress());
+
+  return bReturn;
 }
 
 bool CCECProcessor::SetStreamPath(uint16_t iStreamPath)
 {
+  bool bReturn(false);
+
   CCECBusDevice *device = GetDeviceByPhysicalAddress(iStreamPath);
   if (device)
   {
@@ -314,10 +314,14 @@ bool CCECProcessor::SetStreamPath(uint16_t iStreamPath)
       m_busDevices[iPtr]->m_bActiveSource = false;
 
     device->m_bActiveSource = true;
-    return true;
+
+    if (m_logicalAddresses.isset(device->m_iLogicalAddress))
+      bReturn = device->TransmitActiveSource();
+    else
+      bReturn = true;
   }
 
-  return false;
+  return bReturn;
 }
 
 bool CCECProcessor::SetInactiveView(void)