@@ -1561,21 +1561,25 @@ bool CDX11VideoProcessor::ToggleHDR(const DisplayConfig_t& displayConfig, const
15611561 DLogIf (ERROR_SUCCESS != ret, L" ToggleHDR() : DisplayConfigSetDeviceInfo(DISPLAYCONFIG_SET_ADVANCED_COLOR_STATE) with '{}' failed with error {}" , bEnableAdvancedColor, HR2Str (HRESULT_FROM_WIN32 (ret)));
15621562 }
15631563
1564- if (ret == ERROR_SUCCESS && beforeModeOpt.has_value ()) {
1565- auto afterModeOpt = GetCurrentDisplayMode (displayConfig.displayName );
1566- if (afterModeOpt.has_value ()) {
1567- auto & beforeMode = *beforeModeOpt;
1568- auto & afterMode = *afterModeOpt;
1569- if (beforeMode.dmPelsWidth != afterMode.dmPelsWidth || beforeMode.dmPelsHeight != afterMode.dmPelsHeight
1570- || beforeMode.dmBitsPerPel != afterMode.dmBitsPerPel || beforeMode.dmDisplayFrequency != afterMode.dmDisplayFrequency ) {
1571- DLog (L" ToggleHDR() : Display mode changed from {}x{}@{} to {}x{}@{}, restoring" ,
1572- beforeMode.dmPelsWidth , beforeMode.dmPelsHeight , beforeMode.dmDisplayFrequency ,
1573- afterMode.dmPelsWidth , afterMode.dmPelsHeight , afterMode.dmDisplayFrequency );
1574-
1575- auto ret = ChangeDisplaySettingsExW (displayConfig.displayName , &beforeMode, nullptr , CDS_FULLSCREEN, nullptr );
1576- DLogIf (DISP_CHANGE_SUCCESSFUL != ret, L" ToggleHDR() : ChangeDisplaySettingsExW() failed with error {}" , HR2Str (HRESULT_FROM_WIN32 (ret)));
1577-
1578- m_bDisplayModeChangeAfterHDRToggle = true ;
1564+ if (ret == ERROR_SUCCESS) {
1565+ m_bDisplayModeChangeAfterHDRToggle = true ;
1566+
1567+ if (beforeModeOpt.has_value ()) {
1568+ auto afterModeOpt = GetCurrentDisplayMode (displayConfig.displayName );
1569+ if (afterModeOpt.has_value ()) {
1570+ auto & beforeMode = *beforeModeOpt;
1571+ auto & afterMode = *afterModeOpt;
1572+ if (beforeMode.dmPelsWidth != afterMode.dmPelsWidth || beforeMode.dmPelsHeight != afterMode.dmPelsHeight
1573+ || beforeMode.dmBitsPerPel != afterMode.dmBitsPerPel || beforeMode.dmDisplayFrequency != afterMode.dmDisplayFrequency ) {
1574+ DLog (L" ToggleHDR() : Display mode changed from {}x{}@{} to {}x{}@{}, restoring" ,
1575+ beforeMode.dmPelsWidth , beforeMode.dmPelsHeight , beforeMode.dmDisplayFrequency ,
1576+ afterMode.dmPelsWidth , afterMode.dmPelsHeight , afterMode.dmDisplayFrequency );
1577+
1578+ auto ret = ChangeDisplaySettingsExW (displayConfig.displayName , &beforeMode, nullptr , CDS_FULLSCREEN, nullptr );
1579+ DLogIf (DISP_CHANGE_SUCCESSFUL != ret, L" ToggleHDR() : ChangeDisplaySettingsExW() failed with error {}" , HR2Str (HRESULT_FROM_WIN32 (ret)));
1580+
1581+ m_bDisplayModeChangeAfterHDRToggle = true ;
1582+ }
15791583 }
15801584 }
15811585 }
@@ -3107,7 +3111,10 @@ HRESULT CDX11VideoProcessor::Reset(bool bDisplayModeChange)
31073111 if (GetDisplayConfig (mi.szDevice , displayConfig)) {
31083112 const auto bHdrPassthroughSupport = displayConfig.HDRSupported () && displayConfig.HDREnabled ();
31093113 if ((bHdrPassthroughSupport && !m_bHdrPassthroughSupport) || (!displayConfig.HDREnabled () && m_bHdrPassthroughSupport)) {
3110- m_hdrModeSavedState.erase (mi.szDevice );
3114+ if (m_hdrModeSavedState.find (mi.szDevice ) != m_hdrModeSavedState.end ()) {
3115+ DLog (L" CDX11VideoProcessor::Reset() : Clear stored state for '{}'" , mi.szDevice );
3116+ m_hdrModeSavedState.erase (mi.szDevice );
3117+ }
31113118
31123119 if (m_pFilter->m_inputMT .IsValid ()) {
31133120 CAutoLock cRendererLock (&m_pFilter->m_RendererLock );
0 commit comments