From d58855ff8adaaf514f45673620b8ad3ff1abd6b2 Mon Sep 17 00:00:00 2001 From: hecomi Date: Thu, 5 Jan 2017 12:15:25 +0900 Subject: [PATCH] check ReleaseFrame result #10 --- .../Plugins/x86_64/uDesktopDuplication.dll | Bin 90112 -> 91648 bytes .../uDesktopDuplication/Common.h | 17 +++++++ .../ThreadedDesktopDuplicator.cpp | 47 ++++++++++-------- 3 files changed, 44 insertions(+), 20 deletions(-) diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index 2d43b31b047df2c73510f95556890533752315a9..5b10eb26474987dcb410d41b376b1c6ba6e002ad 100644 GIT binary patch delta 31980 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 I2FqXnFDT)l-T(jq delta 30734 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 JEK|Pw{{WrCTiXBt diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h index 090785e..2606a62 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Common.h @@ -5,6 +5,7 @@ #include + // Unity interface getter struct IUnityInterfaces; IUnityInterfaces* GetUnity(); @@ -21,6 +22,21 @@ const std::unique_ptr& GetMonitorManager(); LUID GetUnityAdapterLuid(); + +// Releaser +class ScopedReleaser +{ +public: + using ReleaseFuncType = std::function; + ScopedReleaser(ReleaseFuncType&& func) : func_(func) {} + ~ScopedReleaser() { func_(); } + +private: + ReleaseFuncType func_; +}; + + + // Message is pooled and fetch from Unity. enum class Message { @@ -32,6 +48,7 @@ enum class Message void SendMessageToUnity(Message message); + // Buffer template class Buffer diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/ThreadedDesktopDuplicator.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/ThreadedDesktopDuplicator.cpp index a9a9082..da51d2a 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/ThreadedDesktopDuplicator.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/ThreadedDesktopDuplicator.cpp @@ -78,25 +78,6 @@ public: }; -// RAII helper -class ReleaseGuard -{ - ComPtr m_dd; - - ReleaseGuard(const ReleaseGuard &)=delete; - ReleaseGuard& operator=(const ReleaseGuard &)=delete; -public: - ReleaseGuard(const ComPtr &dd) - : m_dd(dd) - {} - - ~ReleaseGuard() - { - m_dd->ReleaseFrame(); - } -}; - - struct QueueItem { ComPtr Texture; @@ -357,7 +338,33 @@ void Monitor::DuplicateAndCopyLoop() } else { - ReleaseGuard guard(deskDupl_); + ScopedReleaser releaser([this] + { + const auto hr = deskDupl_->ReleaseFrame(); + if (FAILED(hr)) + { + switch (hr) + { + case DXGI_ERROR_ACCESS_LOST: + { + Debug::Log("Monitor::Render() => DXGI_ERROR_ACCESS_LOST."); + state_ = State::AccessLost; + break; + } + case DXGI_ERROR_INVALID_CALL: + { + Debug::Error("Monitor::Render() => DXGI_ERROR_INVALID_CALL."); + break; + } + default: + { + state_ = State::Unknown; + Debug::Error("Monitor::Render() => Unknown Error."); + break; + } + } + } + }); ComPtr texture; if (FAILED(resource.As(&texture))) {