diff --git a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll index 78f316e..ad25584 100644 Binary files a/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll and b/Assets/uDesktopDuplication/Plugins/x86/uDesktopDuplication.dll differ diff --git a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll index b335561..ff9c01a 100644 Binary files a/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll and b/Assets/uDesktopDuplication/Plugins/x86_64/uDesktopDuplication.dll differ diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp index e42a1df..bf2a3d2 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.cpp @@ -162,7 +162,12 @@ void Duplicator::Start() }); const auto timeout = static_cast(frameMilliSeconds); - if (!Duplicate(timeout)) break; + Duplicate(timeout); + + if (state_ != State::Running) + { + break; + } } if (state_ == State::Running) @@ -229,9 +234,9 @@ const Duplicator::Frame& Duplicator::GetLastFrame() const } -bool Duplicator::Duplicate(UINT timeout) +void Duplicator::Duplicate(UINT timeout) { - if (!dupl_ || !device_) return false; + if (!dupl_ || !device_) return; ComPtr resource; DXGI_OUTDUPL_FRAME_INFO frameInfo; @@ -247,31 +252,32 @@ bool Duplicator::Duplicate(UINT timeout) // it is necessary to re-initialize monitors. Debug::Log("Duplicator::Duplicate() => DXGI_ERROR_ACCESS_LOST."); state_ = State::AccessLost; - return false; + break; } case DXGI_ERROR_WAIT_TIMEOUT: { // This often occurs when timeout value is small and it is not problem. // Debug::Log("Duplicator::Duplicate() => DXGI_ERROR_WAIT_TIMEOUT."); - return true; + break; } case DXGI_ERROR_INVALID_CALL: { Debug::Error("Duplicator::Duplicate() => DXGI_ERROR_INVALID_CALL."); - return false; + break; } case E_INVALIDARG: { Debug::Error("Duplicator::Duplicate() => E_INVALIDARG."); - return false; + break; } default: { state_ = State::Unknown; Debug::Error("Duplicator::Duplicate() => Unknown Error."); - return false; + break; } } + return; } ScopedReleaser releaser([this] @@ -305,13 +311,15 @@ bool Duplicator::Duplicate(UINT timeout) ComPtr texture; if (FAILED(resource.As(&texture))) { - return false; + Debug::Error("Duplicator::Duplicate() => IDXGIResource could not be converted to ID3D11Texture2D."); + return; } auto sharedTexture = device_->GetCompatibleSharedTexture(texture, lastFrameId_ % 2); if (!sharedTexture) { - return false; + Debug::Error("Duplicator::Duplicate() => Shared Texture was null."); + return; } ComPtr context; @@ -331,8 +339,6 @@ bool Duplicator::Duplicate(UINT timeout) metaData_ }; } - - return true; } diff --git a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h index 839ada4..3f4523b 100644 --- a/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h +++ b/Plugins/uDesktopDuplication/uDesktopDuplication/Duplicator.h @@ -67,7 +67,7 @@ private: void InitializeDuplication(); void CheckUnityAdapter(); - bool Duplicate(UINT timeout); + void Duplicate(UINT timeout); void UpdateCursor( const Microsoft::WRL::ComPtr& texture,