cec: hold a lock in CCECProcessor::SetHDMIPort()
[deb_libcec.git] / src / lib / CECProcessor.cpp
index dd7b2fec7147ab86ce0a1240b43aa945140a7c31..6b401252f2bf289d958b4c69aecbcf4a13b3f7b9 100644 (file)
@@ -417,16 +417,7 @@ bool CCECProcessor::SetActiveSource(cec_device_type type /* = CEC_DEVICE_TYPE_RE
 
   m_busDevices[addr]->SetActiveSource();
   if (m_busDevices[addr]->GetPhysicalAddress(false) != 0xFFFF)
-  {
-    bReturn = m_busDevices[addr]->TransmitActiveSource();
-
-    if (bReturn && (m_busDevices[addr]->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE ||
-        m_busDevices[addr]->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE) &&
-        m_busDevices[addr]->GetHandler()->SendDeckStatusUpdateOnActiveSource())
-    {
-      bReturn = ((CCECPlaybackDevice *)m_busDevices[addr])->TransmitDeckStatus(CECDEVICE_TV);
-    }
-  }
+    bReturn = m_busDevices[addr]->GetHandler()->ActivateSource();
 
   return bReturn;
 }
@@ -597,7 +588,7 @@ bool CCECProcessor::SetMenuState(cec_menu_state state, bool bSendUpdate /* = tru
   return true;
 }
 
-bool CCECProcessor::SetPhysicalAddress(uint16_t iPhysicalAddress)
+bool CCECProcessor::SetPhysicalAddress(uint16_t iPhysicalAddress, bool bSendUpdate /* = true */)
 {
   bool bWasActiveSource(false);
   CLockObject lock(&m_mutex);
@@ -609,10 +600,11 @@ bool CCECProcessor::SetPhysicalAddress(uint16_t iPhysicalAddress)
         bWasActiveSource |= m_busDevices[iPtr]->IsActiveSource();
         m_busDevices[iPtr]->SetInactiveSource();
         m_busDevices[iPtr]->SetPhysicalAddress(iPhysicalAddress);
-        m_busDevices[iPtr]->TransmitPhysicalAddress();
+        if (bSendUpdate)
+          m_busDevices[iPtr]->TransmitPhysicalAddress();
       }
 
-    return bWasActiveSource ? SetActiveView() : true;
+    return bWasActiveSource && bSendUpdate ? SetActiveView() : true;
   }
   return false;
 }