@@ -465,32 +465,39 @@ void CMonitor::onDisconnect(bool destroy) {
465465 std::erase_if (g_pCompositor->m_monitors , [&](PHLMONITOR& el) { return el.get () == this ; });
466466}
467467
468- void CMonitor::applyCMType (eCMType cmType) {
468+ void CMonitor::applyCMType (eCMType cmType, int cmSrgbEotf ) {
469469 auto oldImageDescription = m_imageDescription;
470470 switch (cmType) {
471- case CM_SRGB: m_imageDescription = {}; break ; // assumes SImageDescirption defaults to sRGB
471+ case CM_SRGB:
472+ m_imageDescription = {.transferFunction = cmSrgbEotf == 0 ? NColorManagement::CM_TRANSFER_FUNCTION_SRGB : NColorManagement::CM_TRANSFER_FUNCTION_GAMMA22};
473+ break ; // assumes SImageDescription defaults to sRGB
472474 case CM_WIDE:
473- m_imageDescription = {.primariesNameSet = true ,
475+ m_imageDescription = {.transferFunction = cmSrgbEotf == 0 ? NColorManagement::CM_TRANSFER_FUNCTION_SRGB : NColorManagement::CM_TRANSFER_FUNCTION_GAMMA22,
476+ .primariesNameSet = true ,
474477 .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020,
475478 .primaries = NColorManagement::getPrimaries (NColorManagement::CM_PRIMARIES_BT2020)};
476479 break ;
477480 case CM_DCIP3:
478- m_imageDescription = {.primariesNameSet = true ,
481+ m_imageDescription = {.transferFunction = cmSrgbEotf == 0 ? NColorManagement::CM_TRANSFER_FUNCTION_SRGB : NColorManagement::CM_TRANSFER_FUNCTION_GAMMA22,
482+ .primariesNameSet = true ,
479483 .primariesNamed = NColorManagement::CM_PRIMARIES_DCI_P3,
480484 .primaries = NColorManagement::getPrimaries (NColorManagement::CM_PRIMARIES_DCI_P3)};
481485 break ;
482486 case CM_DP3:
483- m_imageDescription = {.primariesNameSet = true ,
487+ m_imageDescription = {.transferFunction = cmSrgbEotf == 0 ? NColorManagement::CM_TRANSFER_FUNCTION_SRGB : NColorManagement::CM_TRANSFER_FUNCTION_GAMMA22,
488+ .primariesNameSet = true ,
484489 .primariesNamed = NColorManagement::CM_PRIMARIES_DISPLAY_P3,
485490 .primaries = NColorManagement::getPrimaries (NColorManagement::CM_PRIMARIES_DISPLAY_P3)};
486491 break ;
487492 case CM_ADOBE:
488- m_imageDescription = {.primariesNameSet = true ,
493+ m_imageDescription = {.transferFunction = cmSrgbEotf == 0 ? NColorManagement::CM_TRANSFER_FUNCTION_SRGB : NColorManagement::CM_TRANSFER_FUNCTION_GAMMA22,
494+ .primariesNameSet = true ,
489495 .primariesNamed = NColorManagement::CM_PRIMARIES_ADOBE_RGB,
490496 .primaries = NColorManagement::getPrimaries (NColorManagement::CM_PRIMARIES_ADOBE_RGB)};
491497 break ;
492498 case CM_EDID:
493- m_imageDescription = {.primariesNameSet = false ,
499+ m_imageDescription = {.transferFunction = cmSrgbEotf == 0 ? NColorManagement::CM_TRANSFER_FUNCTION_SRGB : NColorManagement::CM_TRANSFER_FUNCTION_GAMMA22,
500+ .primariesNameSet = true ,
494501 .primariesNamed = NColorManagement::CM_PRIMARIES_BT2020,
495502 .primaries = {
496503 .red = {.x = m_output->parsedEDID .chromaticityCoords ->red .x , .y = m_output->parsedEDID .chromaticityCoords ->red .y },
@@ -868,14 +875,16 @@ bool CMonitor::applyMonitorRule(SMonitorRule* pMonitorRule, bool force) {
868875 default : break ;
869876 }
870877
878+ m_cmSrgbEotf = RULE->cmSrgbEotf ;
879+
871880 m_sdrMinLuminance = RULE->sdrMinLuminance ;
872881 m_sdrMaxLuminance = RULE->sdrMaxLuminance ;
873882
874883 m_minLuminance = RULE->minLuminance ;
875884 m_maxLuminance = RULE->maxLuminance ;
876885 m_maxAvgLuminance = RULE->maxAvgLuminance ;
877886
878- applyCMType (m_cmType);
887+ applyCMType (m_cmType, m_cmSrgbEotf );
879888
880889 m_sdrSaturation = RULE->sdrSaturation ;
881890 m_sdrBrightness = RULE->sdrBrightness ;
0 commit comments