From 005963d571f95fc536f60aa77098b9ecbb17128c Mon Sep 17 00:00:00 2001 From: Robert Schumacher Date: Wed, 21 Feb 2018 17:03:30 -0800 Subject: [PATCH 1/5] winrt-fixes --- CMakeLists.txt | 2 +- cmake/OpenCVCompilerOptions.cmake | 3 +++ cmake/OpenCVModule.cmake | 2 +- modules/core/src/utils/filesystem.cpp | 14 ++++++++++++-- modules/highgui/include/opencv2/highgui/highgui_winrt.hpp | 1 + modules/highgui/src/window_winrt_bridge.hpp | 1 + modules/videoio/src/cap_winrt/CaptureFrameGrabber.cpp | 4 ++-- 7 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4464441..6bfbecd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -296,7 +296,7 @@ OCV_OPTION(INSTALL_TESTS "Install accuracy and performance test binar # OpenCV build options # =================================================== OCV_OPTION(ENABLE_CCACHE "Use ccache" (UNIX AND NOT IOS AND (CMAKE_GENERATOR MATCHES "Makefile" OR CMAKE_GENERATOR MATCHES "Ninja")) ) -OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS AND NOT CMAKE_CROSSCOMPILING) ) +OCV_OPTION(ENABLE_PRECOMPILED_HEADERS "Use precompiled headers" ON IF (NOT IOS AND (MSVC OR NOT CMAKE_CROSSCOMPILING)) ) OCV_OPTION(ENABLE_SOLUTION_FOLDERS "Solution folder in Visual Studio or in other IDEs" (MSVC_IDE OR CMAKE_GENERATOR MATCHES Xcode) ) OCV_OPTION(ENABLE_PROFILING "Enable profiling in the GCC compiler (Add flags: -g -pg)" OFF IF CMAKE_COMPILER_IS_GNUCXX ) OCV_OPTION(ENABLE_COVERAGE "Enable coverage collection with GCov" OFF IF CMAKE_COMPILER_IS_GNUCXX ) diff --git a/cmake/OpenCVCompilerOptions.cmake b/cmake/OpenCVCompilerOptions.cmake index 353ee12..8f4aa3b 100644 --- a/cmake/OpenCVCompilerOptions.cmake +++ b/cmake/OpenCVCompilerOptions.cmake @@ -37,6 +37,9 @@ if(MSVC) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHa") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "Flags used by the compiler during all build types." FORCE) endif() + if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW") + endif() endif() set(OPENCV_EXTRA_FLAGS "") diff --git a/cmake/OpenCVModule.cmake b/cmake/OpenCVModule.cmake index a84bbff..8feb6df 100644 --- a/cmake/OpenCVModule.cmake +++ b/cmake/OpenCVModule.cmake @@ -785,7 +785,7 @@ macro(ocv_create_module) set(the_module_target ${the_module}) endif() - if(WINRT) + if(WINRT AND BUILD_TESTS) # removing APPCONTAINER from modules to run from console # in case of usual starting of WinRT test apps output is missing # so starting of console version w/o APPCONTAINER is required to get test results diff --git a/modules/core/src/utils/filesystem.cpp b/modules/core/src/utils/filesystem.cpp index 266a92f..1d5a302 100644 --- a/modules/core/src/utils/filesystem.cpp +++ b/modules/core/src/utils/filesystem.cpp @@ -186,7 +186,7 @@ bool createDirectory(const cv::String& path) wchar_t wpath[MAX_PATH]; size_t copied = mbstowcs(wpath, path.c_str(), MAX_PATH); CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); - int result = CreateDirectoryA(wpath, NULL) ? 0 : -1; + int result = CreateDirectoryW(wpath, NULL) ? 0 : -1; #else int result = _mkdir(path.c_str()); #endif @@ -248,8 +248,16 @@ struct FileLock::Impl int numRetries = 5; do { +#ifdef WINRT + wchar_t wpath[MAX_PATH]; + size_t copied = mbstowcs(wpath, fname, MAX_PATH); + CV_Assert((copied != MAX_PATH) && (copied != (size_t)-1)); + handle = ::CreateFile2(wpath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, + OPEN_EXISTING, NULL); +#else handle = ::CreateFileA(fname, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); +#endif if (INVALID_HANDLE_VALUE == handle) { if (ERROR_SHARING_VIOLATION == GetLastError()) @@ -399,7 +407,9 @@ cv::String getCacheDirectory(const char* sub_directory_name, const char* configu if (cache_path.empty()) { cv::String default_cache_path; -#ifdef _WIN32 +#if WINRT + // no defaults +#elif defined _WIN32 char tmp_path_buf[MAX_PATH+1] = {0}; DWORD res = GetTempPath(MAX_PATH, tmp_path_buf); if (res > 0 && res <= MAX_PATH) diff --git a/modules/highgui/include/opencv2/highgui/highgui_winrt.hpp b/modules/highgui/include/opencv2/highgui/highgui_winrt.hpp index f4147f3..b92efdd 100644 --- a/modules/highgui/include/opencv2/highgui/highgui_winrt.hpp +++ b/modules/highgui/include/opencv2/highgui/highgui_winrt.hpp @@ -24,6 +24,7 @@ // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE // POSSIBILITY OF SUCH DAMAGE. +#include "opencv2/core/cvdef.h" using namespace Windows::UI::Xaml::Controls; namespace cv diff --git a/modules/highgui/src/window_winrt_bridge.hpp b/modules/highgui/src/window_winrt_bridge.hpp index 25f4aef..5429f0b 100644 --- a/modules/highgui/src/window_winrt_bridge.hpp +++ b/modules/highgui/src/window_winrt_bridge.hpp @@ -28,6 +28,7 @@ #include #include +#include "opencv2/highgui/highgui_c.h" using namespace Windows::UI::Xaml::Controls; diff --git a/modules/videoio/src/cap_winrt/CaptureFrameGrabber.cpp b/modules/videoio/src/cap_winrt/CaptureFrameGrabber.cpp index 236e227..e2417dc 100644 --- a/modules/videoio/src/cap_winrt/CaptureFrameGrabber.cpp +++ b/modules/videoio/src/cap_winrt/CaptureFrameGrabber.cpp @@ -94,10 +94,10 @@ Media::CaptureFrameGrabber::~CaptureFrameGrabber() void Media::CaptureFrameGrabber::ShowCameraSettings() { -#if WINAPI_FAMILY!=WINAPI_FAMILY_PHONE_APP +#if (WINAPI_FAMILY!=WINAPI_FAMILY_PHONE_APP) && (WINAPI_FAMILY!=WINAPI_FAMILY_APP) if (_state == State::Started) { - CameraOptionsUI::Show(_capture.Get()); + CameraOptionsUI::Show(_capture.Get()); // TODO: Turn it on again in UWP mode by adding reference to UWP Desktop Extensions } #endif } -- 2.15.1.windows.2