diff --git a/src/protocols/ColorManagement.cpp b/src/protocols/ColorManagement.cpp index b6aee17b3..91dc0eac9 100644 --- a/src/protocols/ColorManagement.cpp +++ b/src/protocols/ColorManagement.cpp @@ -331,11 +331,16 @@ const hdr_output_metadata& CColorManagementSurface::hdrMetadata() { } void CColorManagementSurface::setHDRMetadata(const hdr_output_metadata& metadata) { - m_hdrMetadata = metadata; - m_needsNewMetadata = false; + m_hdrMetadata = metadata; + m_lastImageDescription = m_imageDescription; + m_needsNewMetadata = false; } bool CColorManagementSurface::needsHdrMetadataUpdate() { + if (!m_needsNewMetadata) + return false; + if (m_imageDescription == m_lastImageDescription) + m_needsNewMetadata = false; return m_needsNewMetadata; } diff --git a/src/protocols/ColorManagement.hpp b/src/protocols/ColorManagement.hpp index 55219b8fa..5a94920d1 100644 --- a/src/protocols/ColorManagement.hpp +++ b/src/protocols/ColorManagement.hpp @@ -65,6 +65,7 @@ class CColorManagementSurface { SP m_resource; wl_client* pClient = nullptr; NColorManagement::SImageDescription m_imageDescription; + NColorManagement::SImageDescription m_lastImageDescription; bool m_hasImageDescription = false; bool m_needsNewMetadata = false; hdr_output_metadata m_hdrMetadata; diff --git a/src/protocols/XXColorManagement.cpp b/src/protocols/XXColorManagement.cpp index 056a2cefd..8231ec224 100644 --- a/src/protocols/XXColorManagement.cpp +++ b/src/protocols/XXColorManagement.cpp @@ -245,8 +245,8 @@ CXXColorManagementSurface::CXXColorManagementSurface(SPcolorManagement->setHasImageDescription(true); surface->colorManagement->m_imageDescription = imageDescription->get()->settings; + surface->colorManagement->setHasImageDescription(true); } else LOGM(ERR, "Set image description for invalid surface"); });