X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECProcessor.cpp;h=861a9ac6ca5ef380effa53cef73a8378ae330833;hb=466925f5c43536e5fd96632615810da783b78096;hp=41780face9b69fb4731851c7485af1138603c2c1;hpb=d2d1660c9866f6d2ec66f1da0e64efb5e7c04996;p=deb_libcec.git diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 41780fa..861a9ac 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -1613,7 +1613,7 @@ bool CCECProcessor::SetConfiguration(const libcec_configuration *configuration) } bool bHdmiPortChanged(false); - if (!IsValidPhysicalAddress(m_configuration.iPhysicalAddress)) + if (!bPhysicalAutodetected && !IsValidPhysicalAddress(configuration->iPhysicalAddress)) { // base device bHdmiPortChanged = IsRunning() && m_configuration.baseDevice != configuration->baseDevice; @@ -1625,7 +1625,7 @@ bool CCECProcessor::SetConfiguration(const libcec_configuration *configuration) CLibCEC::AddLog(CEC_LOG_DEBUG, "%s - using HDMI port '%d'", __FUNCTION__, configuration->iHDMIPort); m_configuration.iHDMIPort = configuration->iHDMIPort; } - else if (IsValidPhysicalAddress(m_configuration.iPhysicalAddress)) + else { CLibCEC::AddLog(CEC_LOG_DEBUG, "%s - resetting HDMI port and base device to defaults", __FUNCTION__); m_configuration.baseDevice = CECDEVICE_UNKNOWN; @@ -1689,18 +1689,15 @@ bool CCECProcessor::SetConfiguration(const libcec_configuration *configuration) if (m_configuration.deviceTypes.IsEmpty()) m_configuration.deviceTypes.Add(CEC_DEVICE_TYPE_RECORDING_DEVICE); - // persist the configuration - if (IsRunning()) - m_communication->PersistConfiguration(&m_configuration); - + bool bReturn(true); if (bReinit || m_configuration.logicalAddresses.IsEmpty()) { if (bDeviceTypeChanged) - return ChangeDeviceType(oldPrimaryType, m_configuration.deviceTypes[0]); + bReturn = ChangeDeviceType(oldPrimaryType, m_configuration.deviceTypes[0]); else if (IsValidPhysicalAddress(m_configuration.iPhysicalAddress)) - return SetPhysicalAddress(m_configuration.iPhysicalAddress); + bReturn = SetPhysicalAddress(m_configuration.iPhysicalAddress); else if (m_configuration.baseDevice != CECDEVICE_UNKNOWN && m_configuration.iHDMIPort != CEC_HDMI_PORTNUMBER_NONE) - return SetHDMIPort(m_configuration.baseDevice, m_configuration.iHDMIPort); + bReturn = SetHDMIPort(m_configuration.baseDevice, m_configuration.iHDMIPort); } else if (m_configuration.bActivateSource == 1 && IsRunning() && !IsActiveSource(m_configuration.logicalAddresses.primary)) { @@ -1708,7 +1705,11 @@ bool CCECProcessor::SetConfiguration(const libcec_configuration *configuration) SetActiveSource(m_configuration.deviceTypes.types[0]); } - return true; + // persist the configuration + if (IsRunning()) + m_communication->PersistConfiguration(&m_configuration); + + return bReturn; } bool CCECProcessor::GetCurrentConfiguration(libcec_configuration *configuration)