Merge pull request #2093 from SpecLad:merge-2.4
This commit is contained in:
commit
967703c3ac
502
3rdparty/include/MultiMon.h
vendored
502
3rdparty/include/MultiMon.h
vendored
@ -1,502 +0,0 @@
|
|||||||
//=============================================================================
|
|
||||||
//
|
|
||||||
// multimon.h -- Stub module that fakes multiple monitor apis on Win32 OSes
|
|
||||||
// without them.
|
|
||||||
//
|
|
||||||
// By using this header your code will get back default values from
|
|
||||||
// GetSystemMetrics() for new metrics, and the new multimonitor APIs
|
|
||||||
// will act like only one display is present on a Win32 OS without
|
|
||||||
// multimonitor APIs.
|
|
||||||
//
|
|
||||||
// Exactly one source must include this with COMPILE_MULTIMON_STUBS defined.
|
|
||||||
//
|
|
||||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
||||||
//
|
|
||||||
//=============================================================================
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" { // Assume C declarations for C++
|
|
||||||
#endif // __cplusplus
|
|
||||||
|
|
||||||
//
|
|
||||||
// If we are building with Win95/NT4 headers, we need to declare
|
|
||||||
// the multimonitor-related metrics and APIs ourselves.
|
|
||||||
//
|
|
||||||
#ifndef SM_CMONITORS
|
|
||||||
|
|
||||||
#define SM_XVIRTUALSCREEN 76
|
|
||||||
#define SM_YVIRTUALSCREEN 77
|
|
||||||
#define SM_CXVIRTUALSCREEN 78
|
|
||||||
#define SM_CYVIRTUALSCREEN 79
|
|
||||||
#define SM_CMONITORS 80
|
|
||||||
#define SM_SAMEDISPLAYFORMAT 81
|
|
||||||
|
|
||||||
// HMONITOR is already declared if WINVER >= 0x0500 in windef.h
|
|
||||||
// This is for components built with an older version number.
|
|
||||||
//
|
|
||||||
#if !defined(HMONITOR_DECLARED) && (WINVER < 0x0500)
|
|
||||||
DECLARE_HANDLE(HMONITOR);
|
|
||||||
#define HMONITOR_DECLARED
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MONITOR_DEFAULTTONULL 0x00000000
|
|
||||||
#define MONITOR_DEFAULTTOPRIMARY 0x00000001
|
|
||||||
#define MONITOR_DEFAULTTONEAREST 0x00000002
|
|
||||||
|
|
||||||
#define MONITORINFOF_PRIMARY 0x00000001
|
|
||||||
|
|
||||||
typedef struct tagMONITORINFO
|
|
||||||
{
|
|
||||||
DWORD cbSize;
|
|
||||||
RECT rcMonitor;
|
|
||||||
RECT rcWork;
|
|
||||||
DWORD dwFlags;
|
|
||||||
} MONITORINFO, *LPMONITORINFO;
|
|
||||||
|
|
||||||
#ifndef CCHDEVICENAME
|
|
||||||
#define CCHDEVICENAME 32
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
typedef struct tagMONITORINFOEXA : public tagMONITORINFO
|
|
||||||
{
|
|
||||||
CHAR szDevice[CCHDEVICENAME];
|
|
||||||
} MONITORINFOEXA, *LPMONITORINFOEXA;
|
|
||||||
typedef struct tagMONITORINFOEXW : public tagMONITORINFO
|
|
||||||
{
|
|
||||||
WCHAR szDevice[CCHDEVICENAME];
|
|
||||||
} MONITORINFOEXW, *LPMONITORINFOEXW;
|
|
||||||
#ifdef UNICODE
|
|
||||||
typedef MONITORINFOEXW MONITORINFOEX;
|
|
||||||
typedef LPMONITORINFOEXW LPMONITORINFOEX;
|
|
||||||
#else
|
|
||||||
typedef MONITORINFOEXA MONITORINFOEX;
|
|
||||||
typedef LPMONITORINFOEXA LPMONITORINFOEX;
|
|
||||||
#endif // UNICODE
|
|
||||||
#else // ndef __cplusplus
|
|
||||||
typedef struct tagMONITORINFOEXA
|
|
||||||
{
|
|
||||||
MONITORINFO;
|
|
||||||
CHAR szDevice[CCHDEVICENAME];
|
|
||||||
} MONITORINFOEXA, *LPMONITORINFOEXA;
|
|
||||||
typedef struct tagMONITORINFOEXW
|
|
||||||
{
|
|
||||||
MONITORINFO;
|
|
||||||
WCHAR szDevice[CCHDEVICENAME];
|
|
||||||
} MONITORINFOEXW, *LPMONITORINFOEXW;
|
|
||||||
#ifdef UNICODE
|
|
||||||
typedef MONITORINFOEXW MONITORINFOEX;
|
|
||||||
typedef LPMONITORINFOEXW LPMONITORINFOEX;
|
|
||||||
#else
|
|
||||||
typedef MONITORINFOEXA MONITORINFOEX;
|
|
||||||
typedef LPMONITORINFOEXA LPMONITORINFOEX;
|
|
||||||
#endif // UNICODE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef BOOL (CALLBACK* MONITORENUMPROC)(HMONITOR, HDC, LPRECT, LPARAM);
|
|
||||||
|
|
||||||
#ifndef DISPLAY_DEVICE_ATTACHED_TO_DESKTOP
|
|
||||||
typedef struct _DISPLAY_DEVICEA {
|
|
||||||
DWORD cb;
|
|
||||||
CHAR DeviceName[32];
|
|
||||||
CHAR DeviceString[128];
|
|
||||||
DWORD StateFlags;
|
|
||||||
CHAR DeviceID[128];
|
|
||||||
CHAR DeviceKey[128];
|
|
||||||
} DISPLAY_DEVICEA, *PDISPLAY_DEVICEA, *LPDISPLAY_DEVICEA;
|
|
||||||
typedef struct _DISPLAY_DEVICEW {
|
|
||||||
DWORD cb;
|
|
||||||
WCHAR DeviceName[32];
|
|
||||||
WCHAR DeviceString[128];
|
|
||||||
DWORD StateFlags;
|
|
||||||
WCHAR DeviceID[128];
|
|
||||||
WCHAR DeviceKey[128];
|
|
||||||
} DISPLAY_DEVICEW, *PDISPLAY_DEVICEW, *LPDISPLAY_DEVICEW;
|
|
||||||
#ifdef UNICODE
|
|
||||||
typedef DISPLAY_DEVICEW DISPLAY_DEVICE;
|
|
||||||
typedef PDISPLAY_DEVICEW PDISPLAY_DEVICE;
|
|
||||||
typedef LPDISPLAY_DEVICEW LPDISPLAY_DEVICE;
|
|
||||||
#else
|
|
||||||
typedef DISPLAY_DEVICEA DISPLAY_DEVICE;
|
|
||||||
typedef PDISPLAY_DEVICEA PDISPLAY_DEVICE;
|
|
||||||
typedef LPDISPLAY_DEVICEA LPDISPLAY_DEVICE;
|
|
||||||
#endif // UNICODE
|
|
||||||
|
|
||||||
#define DISPLAY_DEVICE_ATTACHED_TO_DESKTOP 0x00000001
|
|
||||||
#define DISPLAY_DEVICE_MULTI_DRIVER 0x00000002
|
|
||||||
#define DISPLAY_DEVICE_PRIMARY_DEVICE 0x00000004
|
|
||||||
#define DISPLAY_DEVICE_MIRRORING_DRIVER 0x00000008
|
|
||||||
#define DISPLAY_DEVICE_VGA_COMPATIBLE 0x00000010
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // SM_CMONITORS
|
|
||||||
|
|
||||||
#undef GetMonitorInfo
|
|
||||||
#undef GetSystemMetrics
|
|
||||||
#undef MonitorFromWindow
|
|
||||||
#undef MonitorFromRect
|
|
||||||
#undef MonitorFromPoint
|
|
||||||
#undef EnumDisplayMonitors
|
|
||||||
#undef EnumDisplayDevices
|
|
||||||
|
|
||||||
//
|
|
||||||
// Define COMPILE_MULTIMON_STUBS to compile the stubs;
|
|
||||||
// otherwise, you get the declarations.
|
|
||||||
//
|
|
||||||
#ifdef COMPILE_MULTIMON_STUBS
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// Implement the API stubs.
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#ifndef _MULTIMON_USE_SECURE_CRT
|
|
||||||
#if defined(__GOT_SECURE_LIB__) && __GOT_SECURE_LIB__ >= 200402L
|
|
||||||
#define _MULTIMON_USE_SECURE_CRT 1
|
|
||||||
#else
|
|
||||||
#define _MULTIMON_USE_SECURE_CRT 0
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef MULTIMON_FNS_DEFINED
|
|
||||||
|
|
||||||
int (WINAPI* g_pfnGetSystemMetrics)(int) = NULL;
|
|
||||||
HMONITOR (WINAPI* g_pfnMonitorFromWindow)(HWND, DWORD) = NULL;
|
|
||||||
HMONITOR (WINAPI* g_pfnMonitorFromRect)(LPCRECT, DWORD) = NULL;
|
|
||||||
HMONITOR (WINAPI* g_pfnMonitorFromPoint)(POINT, DWORD) = NULL;
|
|
||||||
BOOL (WINAPI* g_pfnGetMonitorInfo)(HMONITOR, LPMONITORINFO) = NULL;
|
|
||||||
BOOL (WINAPI* g_pfnEnumDisplayMonitors)(HDC, LPCRECT, MONITORENUMPROC, LPARAM) = NULL;
|
|
||||||
BOOL (WINAPI* g_pfnEnumDisplayDevices)(PVOID, DWORD, PDISPLAY_DEVICE,DWORD) = NULL;
|
|
||||||
BOOL g_fMultiMonInitDone = FALSE;
|
|
||||||
BOOL g_fMultimonPlatformNT = FALSE;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
BOOL IsPlatformNT()
|
|
||||||
{
|
|
||||||
OSVERSIONINFOA osvi = {0};
|
|
||||||
osvi.dwOSVersionInfoSize = sizeof(osvi);
|
|
||||||
GetVersionExA((OSVERSIONINFOA*)&osvi);
|
|
||||||
return (VER_PLATFORM_WIN32_NT == osvi.dwPlatformId);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL InitMultipleMonitorStubs(void)
|
|
||||||
{
|
|
||||||
HMODULE hUser32;
|
|
||||||
if (g_fMultiMonInitDone)
|
|
||||||
{
|
|
||||||
return g_pfnGetMonitorInfo != NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_fMultimonPlatformNT = IsPlatformNT();
|
|
||||||
hUser32 = GetModuleHandle(TEXT("USER32"));
|
|
||||||
if (hUser32 &&
|
|
||||||
(*(FARPROC*)&g_pfnGetSystemMetrics = GetProcAddress(hUser32,"GetSystemMetrics")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnMonitorFromWindow = GetProcAddress(hUser32,"MonitorFromWindow")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnMonitorFromRect = GetProcAddress(hUser32,"MonitorFromRect")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnMonitorFromPoint = GetProcAddress(hUser32,"MonitorFromPoint")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnEnumDisplayMonitors = GetProcAddress(hUser32,"EnumDisplayMonitors")) != NULL &&
|
|
||||||
#ifdef UNICODE
|
|
||||||
(*(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress(hUser32,"EnumDisplayDevicesW")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnGetMonitorInfo = g_fMultimonPlatformNT ? GetProcAddress(hUser32,"GetMonitorInfoW") :
|
|
||||||
GetProcAddress(hUser32,"GetMonitorInfoA")) != NULL
|
|
||||||
#else
|
|
||||||
(*(FARPROC*)&g_pfnGetMonitorInfo = GetProcAddress(hUser32,"GetMonitorInfoA")) != NULL &&
|
|
||||||
(*(FARPROC*)&g_pfnEnumDisplayDevices = GetProcAddress(hUser32,"EnumDisplayDevicesA")) != NULL
|
|
||||||
#endif
|
|
||||||
) {
|
|
||||||
g_fMultiMonInitDone = TRUE;
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
g_pfnGetSystemMetrics = NULL;
|
|
||||||
g_pfnMonitorFromWindow = NULL;
|
|
||||||
g_pfnMonitorFromRect = NULL;
|
|
||||||
g_pfnMonitorFromPoint = NULL;
|
|
||||||
g_pfnGetMonitorInfo = NULL;
|
|
||||||
g_pfnEnumDisplayMonitors = NULL;
|
|
||||||
g_pfnEnumDisplayDevices = NULL;
|
|
||||||
|
|
||||||
g_fMultiMonInitDone = TRUE;
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
//
|
|
||||||
// fake implementations of Monitor APIs that work with the primary display
|
|
||||||
// no special parameter validation is made since these run in client code
|
|
||||||
//
|
|
||||||
//-----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
int WINAPI
|
|
||||||
xGetSystemMetrics(int nIndex)
|
|
||||||
{
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnGetSystemMetrics(nIndex);
|
|
||||||
|
|
||||||
switch (nIndex)
|
|
||||||
{
|
|
||||||
case SM_CMONITORS:
|
|
||||||
case SM_SAMEDISPLAYFORMAT:
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
case SM_XVIRTUALSCREEN:
|
|
||||||
case SM_YVIRTUALSCREEN:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case SM_CXVIRTUALSCREEN:
|
|
||||||
nIndex = SM_CXSCREEN;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SM_CYVIRTUALSCREEN:
|
|
||||||
nIndex = SM_CYSCREEN;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return GetSystemMetrics(nIndex);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define xPRIMARY_MONITOR ((HMONITOR)0x12340042)
|
|
||||||
|
|
||||||
HMONITOR WINAPI
|
|
||||||
xMonitorFromPoint(POINT ptScreenCoords, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnMonitorFromPoint(ptScreenCoords, dwFlags);
|
|
||||||
|
|
||||||
if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) ||
|
|
||||||
((ptScreenCoords.x >= 0) &&
|
|
||||||
(ptScreenCoords.x < GetSystemMetrics(SM_CXSCREEN)) &&
|
|
||||||
(ptScreenCoords.y >= 0) &&
|
|
||||||
(ptScreenCoords.y < GetSystemMetrics(SM_CYSCREEN))))
|
|
||||||
{
|
|
||||||
return xPRIMARY_MONITOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
HMONITOR WINAPI
|
|
||||||
xMonitorFromRect(LPCRECT lprcScreenCoords, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnMonitorFromRect(lprcScreenCoords, dwFlags);
|
|
||||||
|
|
||||||
if ((dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST)) ||
|
|
||||||
((lprcScreenCoords->right > 0) &&
|
|
||||||
(lprcScreenCoords->bottom > 0) &&
|
|
||||||
(lprcScreenCoords->left < GetSystemMetrics(SM_CXSCREEN)) &&
|
|
||||||
(lprcScreenCoords->top < GetSystemMetrics(SM_CYSCREEN))))
|
|
||||||
{
|
|
||||||
return xPRIMARY_MONITOR;
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
HMONITOR WINAPI
|
|
||||||
xMonitorFromWindow(HWND hWnd, DWORD dwFlags)
|
|
||||||
{
|
|
||||||
WINDOWPLACEMENT wp;
|
|
||||||
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnMonitorFromWindow(hWnd, dwFlags);
|
|
||||||
|
|
||||||
if (dwFlags & (MONITOR_DEFAULTTOPRIMARY | MONITOR_DEFAULTTONEAREST))
|
|
||||||
return xPRIMARY_MONITOR;
|
|
||||||
|
|
||||||
if (IsIconic(hWnd) ?
|
|
||||||
GetWindowPlacement(hWnd, &wp) :
|
|
||||||
GetWindowRect(hWnd, &wp.rcNormalPosition)) {
|
|
||||||
|
|
||||||
return xMonitorFromRect(&wp.rcNormalPosition, dwFlags);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL WINAPI
|
|
||||||
xGetMonitorInfo(HMONITOR hMonitor, __inout LPMONITORINFO lpMonitorInfo)
|
|
||||||
{
|
|
||||||
RECT rcWork;
|
|
||||||
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
{
|
|
||||||
BOOL f = g_pfnGetMonitorInfo(hMonitor, lpMonitorInfo);
|
|
||||||
#ifdef UNICODE
|
|
||||||
if (f && !g_fMultimonPlatformNT && (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEX)))
|
|
||||||
{
|
|
||||||
MultiByteToWideChar(CP_ACP, 0,
|
|
||||||
(LPSTR)((MONITORINFOEX*)lpMonitorInfo)->szDevice, -1,
|
|
||||||
((MONITORINFOEX*)lpMonitorInfo)->szDevice, (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)));
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
return f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((hMonitor == xPRIMARY_MONITOR) &&
|
|
||||||
lpMonitorInfo &&
|
|
||||||
(lpMonitorInfo->cbSize >= sizeof(MONITORINFO)) &&
|
|
||||||
SystemParametersInfoA(SPI_GETWORKAREA, 0, &rcWork, 0))
|
|
||||||
{
|
|
||||||
lpMonitorInfo->rcMonitor.left = 0;
|
|
||||||
lpMonitorInfo->rcMonitor.top = 0;
|
|
||||||
lpMonitorInfo->rcMonitor.right = GetSystemMetrics(SM_CXSCREEN);
|
|
||||||
lpMonitorInfo->rcMonitor.bottom = GetSystemMetrics(SM_CYSCREEN);
|
|
||||||
lpMonitorInfo->rcWork = rcWork;
|
|
||||||
lpMonitorInfo->dwFlags = MONITORINFOF_PRIMARY;
|
|
||||||
|
|
||||||
if (lpMonitorInfo->cbSize >= sizeof(MONITORINFOEX))
|
|
||||||
{
|
|
||||||
#ifdef UNICODE
|
|
||||||
MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, ((MONITORINFOEX*)lpMonitorInfo)->szDevice, (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)));
|
|
||||||
#else // UNICODE
|
|
||||||
#if _MULTIMON_USE_SECURE_CRT
|
|
||||||
strncpy_s(((MONITORINFOEX*)lpMonitorInfo)->szDevice, (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)), TEXT("DISPLAY"), (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)) - 1);
|
|
||||||
#else
|
|
||||||
lstrcpyn(((MONITORINFOEX*)lpMonitorInfo)->szDevice, TEXT("DISPLAY"), (sizeof(((MONITORINFOEX*)lpMonitorInfo)->szDevice)/sizeof(TCHAR)));
|
|
||||||
#endif // _MULTIMON_USE_SECURE_CRT
|
|
||||||
#endif // UNICODE
|
|
||||||
}
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL WINAPI
|
|
||||||
xEnumDisplayMonitors(
|
|
||||||
HDC hdcOptionalForPainting,
|
|
||||||
LPCRECT lprcEnumMonitorsThatIntersect,
|
|
||||||
MONITORENUMPROC lpfnEnumProc,
|
|
||||||
LPARAM dwData)
|
|
||||||
{
|
|
||||||
RECT rcLimit;
|
|
||||||
|
|
||||||
if (InitMultipleMonitorStubs()) {
|
|
||||||
return g_pfnEnumDisplayMonitors(
|
|
||||||
hdcOptionalForPainting,
|
|
||||||
lprcEnumMonitorsThatIntersect,
|
|
||||||
lpfnEnumProc,
|
|
||||||
dwData);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!lpfnEnumProc)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
rcLimit.left = 0;
|
|
||||||
rcLimit.top = 0;
|
|
||||||
rcLimit.right = GetSystemMetrics(SM_CXSCREEN);
|
|
||||||
rcLimit.bottom = GetSystemMetrics(SM_CYSCREEN);
|
|
||||||
|
|
||||||
if (hdcOptionalForPainting)
|
|
||||||
{
|
|
||||||
RECT rcClip;
|
|
||||||
POINT ptOrg;
|
|
||||||
|
|
||||||
switch (GetClipBox(hdcOptionalForPainting, &rcClip))
|
|
||||||
{
|
|
||||||
default:
|
|
||||||
if (!GetDCOrgEx(hdcOptionalForPainting, &ptOrg))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
OffsetRect(&rcLimit, -ptOrg.x, -ptOrg.y);
|
|
||||||
if (IntersectRect(&rcLimit, &rcLimit, &rcClip) &&
|
|
||||||
(!lprcEnumMonitorsThatIntersect ||
|
|
||||||
IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect))) {
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
//fall thru
|
|
||||||
case NULLREGION:
|
|
||||||
return TRUE;
|
|
||||||
case ERROR:
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if ( lprcEnumMonitorsThatIntersect &&
|
|
||||||
!IntersectRect(&rcLimit, &rcLimit, lprcEnumMonitorsThatIntersect)) {
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return lpfnEnumProc(
|
|
||||||
xPRIMARY_MONITOR,
|
|
||||||
hdcOptionalForPainting,
|
|
||||||
&rcLimit,
|
|
||||||
dwData);
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL WINAPI
|
|
||||||
xEnumDisplayDevices(
|
|
||||||
PVOID Unused,
|
|
||||||
DWORD iDevNum,
|
|
||||||
__inout PDISPLAY_DEVICE lpDisplayDevice,
|
|
||||||
DWORD dwFlags)
|
|
||||||
{
|
|
||||||
if (InitMultipleMonitorStubs())
|
|
||||||
return g_pfnEnumDisplayDevices(Unused, iDevNum, lpDisplayDevice, dwFlags);
|
|
||||||
|
|
||||||
if (Unused != NULL)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (iDevNum != 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
if (lpDisplayDevice == NULL || lpDisplayDevice->cb < sizeof(DISPLAY_DEVICE))
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
#ifdef UNICODE
|
|
||||||
MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, lpDisplayDevice->DeviceName, (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)));
|
|
||||||
MultiByteToWideChar(CP_ACP, 0, "DISPLAY", -1, lpDisplayDevice->DeviceString, (sizeof(lpDisplayDevice->DeviceString)/sizeof(TCHAR)));
|
|
||||||
#else // UNICODE
|
|
||||||
#if _MULTIMON_USE_SECURE_CRT
|
|
||||||
strncpy_s((LPTSTR)lpDisplayDevice->DeviceName, (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)), TEXT("DISPLAY"), (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)) - 1);
|
|
||||||
strncpy_s((LPTSTR)lpDisplayDevice->DeviceString, (sizeof(lpDisplayDevice->DeviceString)/sizeof(TCHAR)), TEXT("DISPLAY"), (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)) - 1);
|
|
||||||
#else
|
|
||||||
lstrcpyn((LPTSTR)lpDisplayDevice->DeviceName, TEXT("DISPLAY"), (sizeof(lpDisplayDevice->DeviceName)/sizeof(TCHAR)));
|
|
||||||
lstrcpyn((LPTSTR)lpDisplayDevice->DeviceString, TEXT("DISPLAY"), (sizeof(lpDisplayDevice->DeviceString)/sizeof(TCHAR)));
|
|
||||||
#endif // _MULTIMON_USE_SECURE_CRT
|
|
||||||
#endif // UNICODE
|
|
||||||
|
|
||||||
lpDisplayDevice->StateFlags = DISPLAY_DEVICE_ATTACHED_TO_DESKTOP | DISPLAY_DEVICE_PRIMARY_DEVICE;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef xPRIMARY_MONITOR
|
|
||||||
#undef COMPILE_MULTIMON_STUBS
|
|
||||||
|
|
||||||
#else // COMPILE_MULTIMON_STUBS
|
|
||||||
|
|
||||||
extern int WINAPI xGetSystemMetrics(int);
|
|
||||||
extern HMONITOR WINAPI xMonitorFromWindow(HWND, DWORD);
|
|
||||||
extern HMONITOR WINAPI xMonitorFromRect(LPCRECT, DWORD);
|
|
||||||
extern HMONITOR WINAPI xMonitorFromPoint(POINT, DWORD);
|
|
||||||
extern BOOL WINAPI xGetMonitorInfo(HMONITOR, LPMONITORINFO);
|
|
||||||
extern BOOL WINAPI xEnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM);
|
|
||||||
extern BOOL WINAPI xEnumDisplayDevices(PVOID, DWORD, PDISPLAY_DEVICE, DWORD);
|
|
||||||
|
|
||||||
#endif // COMPILE_MULTIMON_STUBS
|
|
||||||
|
|
||||||
//
|
|
||||||
// build defines that replace the regular APIs with our versions
|
|
||||||
//
|
|
||||||
#define GetSystemMetrics xGetSystemMetrics
|
|
||||||
#define MonitorFromWindow xMonitorFromWindow
|
|
||||||
#define MonitorFromRect xMonitorFromRect
|
|
||||||
#define MonitorFromPoint xMonitorFromPoint
|
|
||||||
#define GetMonitorInfo xGetMonitorInfo
|
|
||||||
#define EnumDisplayMonitors xEnumDisplayMonitors
|
|
||||||
#define EnumDisplayDevices xEnumDisplayDevices
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif // __cplusplus
|
|
||||||
|
|
||||||
|
|
@ -213,6 +213,7 @@ OCV_OPTION(ENABLE_VFPV3 "Enable VFPv3-D32 instructions"
|
|||||||
OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too noisy" OFF )
|
OCV_OPTION(ENABLE_NOISY_WARNINGS "Show all warnings even if they are too noisy" OFF )
|
||||||
OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF )
|
OCV_OPTION(OPENCV_WARNINGS_ARE_ERRORS "Treat warnings as errors" OFF )
|
||||||
OCV_OPTION(ENABLE_WINRT_MODE "Build with Windows Runtime support" OFF IF WIN32 )
|
OCV_OPTION(ENABLE_WINRT_MODE "Build with Windows Runtime support" OFF IF WIN32 )
|
||||||
|
OCV_OPTION(ENABLE_WINRT_MODE_NATIVE "Build with Windows Runtime native C++ support" OFF IF WIN32 )
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------------------------------
|
# ----------------------------------------------------------------------------
|
||||||
@ -643,7 +644,7 @@ endif()
|
|||||||
if(WIN32)
|
if(WIN32)
|
||||||
status("")
|
status("")
|
||||||
status(" Windows RT support:" HAVE_WINRT THEN YES ELSE NO)
|
status(" Windows RT support:" HAVE_WINRT THEN YES ELSE NO)
|
||||||
if (ENABLE_WINRT_MODE)
|
if (ENABLE_WINRT_MODE OR ENABLE_WINRT_MODE_NATIVE)
|
||||||
status(" Windows SDK v8.0:" ${WINDOWS_SDK_PATH})
|
status(" Windows SDK v8.0:" ${WINDOWS_SDK_PATH})
|
||||||
status(" Visual Studio 2012:" ${VISUAL_STUDIO_PATH})
|
status(" Visual Studio 2012:" ${VISUAL_STUDIO_PATH})
|
||||||
endif()
|
endif()
|
||||||
|
@ -9,7 +9,7 @@ set(HAVE_WINRT FALSE)
|
|||||||
# search Windows Platform SDK
|
# search Windows Platform SDK
|
||||||
message(STATUS "Checking for Windows Platform SDK")
|
message(STATUS "Checking for Windows Platform SDK")
|
||||||
GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]" ABSOLUTE CACHE)
|
GET_FILENAME_COMPONENT(WINDOWS_SDK_PATH "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.0;InstallationFolder]" ABSOLUTE CACHE)
|
||||||
if (WINDOWS_SDK_PATH STREQUAL "")
|
if(WINDOWS_SDK_PATH STREQUAL "")
|
||||||
set(HAVE_MSPDK FALSE)
|
set(HAVE_MSPDK FALSE)
|
||||||
message(STATUS "Windows Platform SDK 8.0 was not found")
|
message(STATUS "Windows Platform SDK 8.0 was not found")
|
||||||
else()
|
else()
|
||||||
@ -19,7 +19,7 @@ endif()
|
|||||||
#search for Visual Studio 11.0 install directory
|
#search for Visual Studio 11.0 install directory
|
||||||
message(STATUS "Checking for Visual Studio 2012")
|
message(STATUS "Checking for Visual Studio 2012")
|
||||||
GET_FILENAME_COMPONENT(VISUAL_STUDIO_PATH [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir] REALPATH CACHE)
|
GET_FILENAME_COMPONENT(VISUAL_STUDIO_PATH [HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\11.0\\Setup\\VS;ProductDir] REALPATH CACHE)
|
||||||
if (VISUAL_STUDIO_PATH STREQUAL "")
|
if(VISUAL_STUDIO_PATH STREQUAL "")
|
||||||
set(HAVE_MSVC2012 FALSE)
|
set(HAVE_MSVC2012 FALSE)
|
||||||
message(STATUS "Visual Studio 2012 was not found")
|
message(STATUS "Visual Studio 2012 was not found")
|
||||||
else()
|
else()
|
||||||
@ -30,11 +30,15 @@ try_compile(HAVE_WINRT_SDK
|
|||||||
"${OpenCV_BINARY_DIR}"
|
"${OpenCV_BINARY_DIR}"
|
||||||
"${OpenCV_SOURCE_DIR}/cmake/checks/winrttest.cpp")
|
"${OpenCV_SOURCE_DIR}/cmake/checks/winrttest.cpp")
|
||||||
|
|
||||||
if (ENABLE_WINRT_MODE AND HAVE_WINRT_SDK AND HAVE_MSVC2012 AND HAVE_MSPDK)
|
if(ENABLE_WINRT_MODE AND HAVE_WINRT_SDK AND HAVE_MSVC2012 AND HAVE_MSPDK)
|
||||||
set(HAVE_WINRT TRUE)
|
set(HAVE_WINRT TRUE)
|
||||||
|
set(HAVE_WINRT_CX TRUE)
|
||||||
|
elseif(ENABLE_WINRT_MODE_NATIVE AND HAVE_WINRT_SDK AND HAVE_MSVC2012 AND HAVE_MSPDK)
|
||||||
|
set(HAVE_WINRT TRUE)
|
||||||
|
set(HAVE_WINRT_CX FALSE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (HAVE_WINRT)
|
if(HAVE_WINRT)
|
||||||
add_definitions(/DWINVER=0x0602 /DNTDDI_VERSION=NTDDI_WIN8 /D_WIN32_WINNT=0x0602)
|
add_definitions(/DWINVER=0x0602 /DNTDDI_VERSION=NTDDI_WIN8 /D_WIN32_WINNT=0x0602)
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /appcontainer")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /appcontainer")
|
||||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /appcontainer")
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} /appcontainer")
|
||||||
|
@ -48,10 +48,10 @@ The structure of package contents looks as follows:
|
|||||||
|
|
||||||
::
|
::
|
||||||
|
|
||||||
OpenCV-2.4.7-android-sdk
|
OpenCV-2.4.8-android-sdk
|
||||||
|_ apk
|
|_ apk
|
||||||
| |_ OpenCV_2.4.7_binary_pack_armv7a.apk
|
| |_ OpenCV_2.4.8_binary_pack_armv7a.apk
|
||||||
| |_ OpenCV_2.4.7_Manager_2.14_XXX.apk
|
| |_ OpenCV_2.4.8_Manager_2.16_XXX.apk
|
||||||
|
|
|
|
||||||
|_ doc
|
|_ doc
|
||||||
|_ samples
|
|_ samples
|
||||||
@ -157,10 +157,10 @@ Get the OpenCV4Android SDK
|
|||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
unzip ~/Downloads/OpenCV-2.4.7-android-sdk.zip
|
unzip ~/Downloads/OpenCV-2.4.8-android-sdk.zip
|
||||||
|
|
||||||
.. |opencv_android_bin_pack| replace:: :file:`OpenCV-2.4.7-android-sdk.zip`
|
.. |opencv_android_bin_pack| replace:: :file:`OpenCV-2.4.8-android-sdk.zip`
|
||||||
.. _opencv_android_bin_pack_url: http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.7/OpenCV-2.4.7-android-sdk.zip/download
|
.. _opencv_android_bin_pack_url: http://sourceforge.net/projects/opencvlibrary/files/opencv-android/2.4.8/OpenCV-2.4.8-android-sdk.zip/download
|
||||||
.. |opencv_android_bin_pack_url| replace:: |opencv_android_bin_pack|
|
.. |opencv_android_bin_pack_url| replace:: |opencv_android_bin_pack|
|
||||||
.. |seven_zip| replace:: 7-Zip
|
.. |seven_zip| replace:: 7-Zip
|
||||||
.. _seven_zip: http://www.7-zip.org/
|
.. _seven_zip: http://www.7-zip.org/
|
||||||
@ -295,7 +295,7 @@ Well, running samples from Eclipse is very simple:
|
|||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
:linenos:
|
:linenos:
|
||||||
|
|
||||||
<Android SDK path>/platform-tools/adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.7_Manager_2.14_armv7a-neon.apk
|
<Android SDK path>/platform-tools/adb install <OpenCV4Android SDK path>/apk/OpenCV_2.4.8_Manager_2.16_armv7a-neon.apk
|
||||||
|
|
||||||
.. note:: ``armeabi``, ``armv7a-neon``, ``arm7a-neon-android8``, ``mips`` and ``x86`` stand for
|
.. note:: ``armeabi``, ``armv7a-neon``, ``arm7a-neon-android8``, ``mips`` and ``x86`` stand for
|
||||||
platform targets:
|
platform targets:
|
||||||
|
@ -55,14 +55,14 @@ Manager to access OpenCV libraries externally installed in the target system.
|
|||||||
:guilabel:`File -> Import -> Existing project in your workspace`.
|
:guilabel:`File -> Import -> Existing project in your workspace`.
|
||||||
|
|
||||||
Press :guilabel:`Browse` button and locate OpenCV4Android SDK
|
Press :guilabel:`Browse` button and locate OpenCV4Android SDK
|
||||||
(:file:`OpenCV-2.4.7-android-sdk/sdk`).
|
(:file:`OpenCV-2.4.8-android-sdk/sdk`).
|
||||||
|
|
||||||
.. image:: images/eclipse_opencv_dependency0.png
|
.. image:: images/eclipse_opencv_dependency0.png
|
||||||
:alt: Add dependency from OpenCV library
|
:alt: Add dependency from OpenCV library
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
#. In application project add a reference to the OpenCV Java SDK in
|
#. In application project add a reference to the OpenCV Java SDK in
|
||||||
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.7``.
|
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.8``.
|
||||||
|
|
||||||
.. image:: images/eclipse_opencv_dependency1.png
|
.. image:: images/eclipse_opencv_dependency1.png
|
||||||
:alt: Add dependency from OpenCV library
|
:alt: Add dependency from OpenCV library
|
||||||
@ -128,27 +128,27 @@ described above.
|
|||||||
#. Add the OpenCV library project to your workspace the same way as for the async initialization
|
#. Add the OpenCV library project to your workspace the same way as for the async initialization
|
||||||
above. Use menu :guilabel:`File -> Import -> Existing project in your workspace`,
|
above. Use menu :guilabel:`File -> Import -> Existing project in your workspace`,
|
||||||
press :guilabel:`Browse` button and select OpenCV SDK path
|
press :guilabel:`Browse` button and select OpenCV SDK path
|
||||||
(:file:`OpenCV-2.4.7-android-sdk/sdk`).
|
(:file:`OpenCV-2.4.8-android-sdk/sdk`).
|
||||||
|
|
||||||
.. image:: images/eclipse_opencv_dependency0.png
|
.. image:: images/eclipse_opencv_dependency0.png
|
||||||
:alt: Add dependency from OpenCV library
|
:alt: Add dependency from OpenCV library
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
#. In the application project add a reference to the OpenCV4Android SDK in
|
#. In the application project add a reference to the OpenCV4Android SDK in
|
||||||
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.7``;
|
:guilabel:`Project -> Properties -> Android -> Library -> Add` select ``OpenCV Library - 2.4.8``;
|
||||||
|
|
||||||
.. image:: images/eclipse_opencv_dependency1.png
|
.. image:: images/eclipse_opencv_dependency1.png
|
||||||
:alt: Add dependency from OpenCV library
|
:alt: Add dependency from OpenCV library
|
||||||
:align: center
|
:align: center
|
||||||
|
|
||||||
#. If your application project **doesn't have a JNI part**, just copy the corresponding OpenCV
|
#. If your application project **doesn't have a JNI part**, just copy the corresponding OpenCV
|
||||||
native libs from :file:`<OpenCV-2.4.7-android-sdk>/sdk/native/libs/<target_arch>` to your
|
native libs from :file:`<OpenCV-2.4.8-android-sdk>/sdk/native/libs/<target_arch>` to your
|
||||||
project directory to folder :file:`libs/<target_arch>`.
|
project directory to folder :file:`libs/<target_arch>`.
|
||||||
|
|
||||||
In case of the application project **with a JNI part**, instead of manual libraries copying you
|
In case of the application project **with a JNI part**, instead of manual libraries copying you
|
||||||
need to modify your ``Android.mk`` file:
|
need to modify your ``Android.mk`` file:
|
||||||
add the following two code lines after the ``"include $(CLEAR_VARS)"`` and before
|
add the following two code lines after the ``"include $(CLEAR_VARS)"`` and before
|
||||||
``"include path_to_OpenCV-2.4.7-android-sdk/sdk/native/jni/OpenCV.mk"``
|
``"include path_to_OpenCV-2.4.8-android-sdk/sdk/native/jni/OpenCV.mk"``
|
||||||
|
|
||||||
.. code-block:: make
|
.. code-block:: make
|
||||||
:linenos:
|
:linenos:
|
||||||
@ -221,7 +221,7 @@ taken:
|
|||||||
|
|
||||||
.. code-block:: make
|
.. code-block:: make
|
||||||
|
|
||||||
include C:\Work\OpenCV4Android\OpenCV-2.4.7-android-sdk\sdk\native\jni\OpenCV.mk
|
include C:\Work\OpenCV4Android\OpenCV-2.4.8-android-sdk\sdk\native\jni\OpenCV.mk
|
||||||
|
|
||||||
Should be inserted into the :file:`jni/Android.mk` file **after** this line:
|
Should be inserted into the :file:`jni/Android.mk` file **after** this line:
|
||||||
|
|
||||||
|
@ -2,8 +2,11 @@ set(the_description "The Core Functionality")
|
|||||||
ocv_add_module(core PRIVATE_REQUIRED ${ZLIB_LIBRARIES} "${OPENCL_LIBRARIES}" OPTIONAL opencv_cudev)
|
ocv_add_module(core PRIVATE_REQUIRED ${ZLIB_LIBRARIES} "${OPENCL_LIBRARIES}" OPTIONAL opencv_cudev)
|
||||||
ocv_module_include_directories(${ZLIB_INCLUDE_DIRS})
|
ocv_module_include_directories(${ZLIB_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
if(HAVE_WINRT_CX)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW")
|
||||||
|
endif()
|
||||||
if(HAVE_WINRT)
|
if(HAVE_WINRT)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /ZW /GS /Gm- /AI\"${WINDOWS_SDK_PATH}/References/CommonConfiguration/Neutral\" /AI\"${VISUAL_STUDIO_PATH}/vcpackages\"")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /GS /Gm- /AI\"${WINDOWS_SDK_PATH}/References/CommonConfiguration/Neutral\" /AI\"${VISUAL_STUDIO_PATH}/vcpackages\"")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(HAVE_CUDA)
|
if(HAVE_CUDA)
|
||||||
|
@ -107,7 +107,7 @@ std::wstring GetTempPathWinRT()
|
|||||||
if (FAILED(WindowsCreateStringReference(RuntimeClass_Windows_Storage_ApplicationData,
|
if (FAILED(WindowsCreateStringReference(RuntimeClass_Windows_Storage_ApplicationData,
|
||||||
(UINT32)wcslen(RuntimeClass_Windows_Storage_ApplicationData), &hstrHead, &str)))
|
(UINT32)wcslen(RuntimeClass_Windows_Storage_ApplicationData), &hstrHead, &str)))
|
||||||
return wstr;
|
return wstr;
|
||||||
if (FAILED(Windows::Foundation::GetActivationFactory(str, appdataFactory.ReleaseAndGetAddressOf())))
|
if (FAILED(RoGetActivationFactory(str, IID_PPV_ARGS(appdataFactory.ReleaseAndGetAddressOf()))))
|
||||||
return wstr;
|
return wstr;
|
||||||
if (FAILED(appdataFactory->get_Current(appdataRef.ReleaseAndGetAddressOf())))
|
if (FAILED(appdataFactory->get_Current(appdataRef.ReleaseAndGetAddressOf())))
|
||||||
return wstr;
|
return wstr;
|
||||||
|
@ -281,7 +281,7 @@ CUDA_TEST_P(ConvertTo, WithOutScaling)
|
|||||||
cv::Mat dst_gold;
|
cv::Mat dst_gold;
|
||||||
src.convertTo(dst_gold, depth2);
|
src.convertTo(dst_gold, depth2);
|
||||||
|
|
||||||
EXPECT_MAT_NEAR(dst_gold, dst, 0.0);
|
EXPECT_MAT_NEAR(dst_gold, dst, 1.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ struct HOG : testing::TestWithParam<cv::cuda::DeviceInfo>, cv::cuda::HOGDescript
|
|||||||
};
|
};
|
||||||
|
|
||||||
// desabled while resize does not fixed
|
// desabled while resize does not fixed
|
||||||
CUDA_TEST_P(HOG, Detect)
|
CUDA_TEST_P(HOG, DISABLED_Detect)
|
||||||
{
|
{
|
||||||
cv::Mat img_rgb = readImage("hog/road.png");
|
cv::Mat img_rgb = readImage("hog/road.png");
|
||||||
ASSERT_FALSE(img_rgb.empty());
|
ASSERT_FALSE(img_rgb.empty());
|
||||||
|
@ -49,6 +49,8 @@ using namespace perf;
|
|||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// GEMM
|
// GEMM
|
||||||
|
|
||||||
|
#ifdef HAVE_CUBLAS
|
||||||
|
|
||||||
CV_FLAGS(GemmFlags, 0, cv::GEMM_1_T, cv::GEMM_2_T, cv::GEMM_3_T)
|
CV_FLAGS(GemmFlags, 0, cv::GEMM_1_T, cv::GEMM_2_T, cv::GEMM_3_T)
|
||||||
#define ALL_GEMM_FLAGS Values(GemmFlags(0), GemmFlags(cv::GEMM_1_T), GemmFlags(cv::GEMM_2_T), GemmFlags(cv::GEMM_3_T), \
|
#define ALL_GEMM_FLAGS Values(GemmFlags(0), GemmFlags(cv::GEMM_1_T), GemmFlags(cv::GEMM_2_T), GemmFlags(cv::GEMM_3_T), \
|
||||||
GemmFlags(cv::GEMM_1_T | cv::GEMM_2_T), GemmFlags(cv::GEMM_1_T | cv::GEMM_3_T), GemmFlags(cv::GEMM_1_T | cv::GEMM_2_T | cv::GEMM_3_T))
|
GemmFlags(cv::GEMM_1_T | cv::GEMM_2_T), GemmFlags(cv::GEMM_1_T | cv::GEMM_3_T), GemmFlags(cv::GEMM_1_T | cv::GEMM_2_T | cv::GEMM_3_T))
|
||||||
@ -98,6 +100,8 @@ PERF_TEST_P(Sz_Type_Flags, GEMM,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////
|
||||||
// MulSpectrums
|
// MulSpectrums
|
||||||
|
|
||||||
|
@ -2514,7 +2514,7 @@ CUDA_TEST_P(AddWeighted, Accuracy)
|
|||||||
cv::Mat dst_gold;
|
cv::Mat dst_gold;
|
||||||
cv::addWeighted(src1, alpha, src2, beta, gamma, dst_gold, dst_depth);
|
cv::addWeighted(src1, alpha, src2, beta, gamma, dst_gold, dst_depth);
|
||||||
|
|
||||||
EXPECT_MAT_NEAR(dst_gold, dst, dst_depth < CV_32F ? 1.0 : 1e-3);
|
EXPECT_MAT_NEAR(dst_gold, dst, dst_depth < CV_32F ? 2.0 : 1e-3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -734,7 +734,7 @@ CUDA_TEST_P(Normalize, WithOutMask)
|
|||||||
cv::Mat dst_gold;
|
cv::Mat dst_gold;
|
||||||
cv::normalize(src, dst_gold, alpha, beta, norm_type, type);
|
cv::normalize(src, dst_gold, alpha, beta, norm_type, type);
|
||||||
|
|
||||||
EXPECT_MAT_NEAR(dst_gold, dst, 1e-6);
|
EXPECT_MAT_NEAR(dst_gold, dst, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
CUDA_TEST_P(Normalize, WithMask)
|
CUDA_TEST_P(Normalize, WithMask)
|
||||||
|
@ -715,7 +715,7 @@ CUDA_TEST_P(CvtColor, BGR2YCrCb)
|
|||||||
cv::Mat dst_gold;
|
cv::Mat dst_gold;
|
||||||
cv::cvtColor(src, dst_gold, cv::COLOR_BGR2YCrCb);
|
cv::cvtColor(src, dst_gold, cv::COLOR_BGR2YCrCb);
|
||||||
|
|
||||||
EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
|
EXPECT_MAT_NEAR(dst_gold, dst, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
CUDA_TEST_P(CvtColor, RGB2YCrCb)
|
CUDA_TEST_P(CvtColor, RGB2YCrCb)
|
||||||
@ -728,7 +728,7 @@ CUDA_TEST_P(CvtColor, RGB2YCrCb)
|
|||||||
cv::Mat dst_gold;
|
cv::Mat dst_gold;
|
||||||
cv::cvtColor(src, dst_gold, cv::COLOR_RGB2YCrCb);
|
cv::cvtColor(src, dst_gold, cv::COLOR_RGB2YCrCb);
|
||||||
|
|
||||||
EXPECT_MAT_NEAR(dst_gold, dst, 1e-5);
|
EXPECT_MAT_NEAR(dst_gold, dst, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
CUDA_TEST_P(CvtColor, BGR2YCrCb4)
|
CUDA_TEST_P(CvtColor, BGR2YCrCb4)
|
||||||
@ -749,7 +749,7 @@ CUDA_TEST_P(CvtColor, BGR2YCrCb4)
|
|||||||
cv::split(h_dst, channels);
|
cv::split(h_dst, channels);
|
||||||
cv::merge(channels, 3, h_dst);
|
cv::merge(channels, 3, h_dst);
|
||||||
|
|
||||||
EXPECT_MAT_NEAR(dst_gold, h_dst, 1e-5);
|
EXPECT_MAT_NEAR(dst_gold, h_dst, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
CUDA_TEST_P(CvtColor, RGBA2YCrCb4)
|
CUDA_TEST_P(CvtColor, RGBA2YCrCb4)
|
||||||
@ -771,7 +771,7 @@ CUDA_TEST_P(CvtColor, RGBA2YCrCb4)
|
|||||||
cv::split(h_dst, channels);
|
cv::split(h_dst, channels);
|
||||||
cv::merge(channels, 3, h_dst);
|
cv::merge(channels, 3, h_dst);
|
||||||
|
|
||||||
EXPECT_MAT_NEAR(dst_gold, h_dst, 1e-5);
|
EXPECT_MAT_NEAR(dst_gold, h_dst, 1.0);
|
||||||
}
|
}
|
||||||
|
|
||||||
CUDA_TEST_P(CvtColor, YCrCb2BGR)
|
CUDA_TEST_P(CvtColor, YCrCb2BGR)
|
||||||
|
@ -444,7 +444,7 @@ PERF_TEST_P(ImagePair, OpticalFlowBM,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PERF_TEST_P(ImagePair, FastOpticalFlowBM,
|
PERF_TEST_P(ImagePair, DISABLED_FastOpticalFlowBM,
|
||||||
Values<pair_string>(make_pair("gpu/opticalflow/frame0.png", "gpu/opticalflow/frame1.png")))
|
Values<pair_string>(make_pair("gpu/opticalflow/frame0.png", "gpu/opticalflow/frame1.png")))
|
||||||
{
|
{
|
||||||
declare.time(400);
|
declare.time(400);
|
||||||
|
@ -297,6 +297,11 @@ public:
|
|||||||
trees_ = get_param(params,"trees",4);
|
trees_ = get_param(params,"trees",4);
|
||||||
root = new NodePtr[trees_];
|
root = new NodePtr[trees_];
|
||||||
indices = new int*[trees_];
|
indices = new int*[trees_];
|
||||||
|
|
||||||
|
for (int i=0; i<trees_; ++i) {
|
||||||
|
root[i] = NULL;
|
||||||
|
indices[i] = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HierarchicalClusteringIndex(const HierarchicalClusteringIndex&);
|
HierarchicalClusteringIndex(const HierarchicalClusteringIndex&);
|
||||||
@ -309,11 +314,34 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual ~HierarchicalClusteringIndex()
|
virtual ~HierarchicalClusteringIndex()
|
||||||
{
|
{
|
||||||
|
free_elements();
|
||||||
|
|
||||||
|
if (root!=NULL) {
|
||||||
|
delete[] root;
|
||||||
|
}
|
||||||
|
|
||||||
if (indices!=NULL) {
|
if (indices!=NULL) {
|
||||||
delete[] indices;
|
delete[] indices;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Release the inner elements of indices[]
|
||||||
|
*/
|
||||||
|
void free_elements()
|
||||||
|
{
|
||||||
|
if (indices!=NULL) {
|
||||||
|
for(int i=0; i<trees_; ++i) {
|
||||||
|
if (indices[i]!=NULL) {
|
||||||
|
delete[] indices[i];
|
||||||
|
indices[i] = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns size of index.
|
* Returns size of index.
|
||||||
*/
|
*/
|
||||||
@ -348,6 +376,9 @@ public:
|
|||||||
if (branching_<2) {
|
if (branching_<2) {
|
||||||
throw FLANNException("Branching factor must be at least 2");
|
throw FLANNException("Branching factor must be at least 2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free_elements();
|
||||||
|
|
||||||
for (int i=0; i<trees_; ++i) {
|
for (int i=0; i<trees_; ++i) {
|
||||||
indices[i] = new int[size_];
|
indices[i] = new int[size_];
|
||||||
for (size_t j=0; j<size_; ++j) {
|
for (size_t j=0; j<size_; ++j) {
|
||||||
@ -387,6 +418,17 @@ public:
|
|||||||
load_value(stream, centers_init_);
|
load_value(stream, centers_init_);
|
||||||
load_value(stream, leaf_size_);
|
load_value(stream, leaf_size_);
|
||||||
load_value(stream, memoryCounter);
|
load_value(stream, memoryCounter);
|
||||||
|
|
||||||
|
free_elements();
|
||||||
|
|
||||||
|
if (root!=NULL) {
|
||||||
|
delete[] root;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (indices!=NULL) {
|
||||||
|
delete[] indices;
|
||||||
|
}
|
||||||
|
|
||||||
indices = new int*[trees_];
|
indices = new int*[trees_];
|
||||||
root = new NodePtr[trees_];
|
root = new NodePtr[trees_];
|
||||||
for (int i=0; i<trees_; ++i) {
|
for (int i=0; i<trees_; ++i) {
|
||||||
|
@ -61,7 +61,6 @@
|
|||||||
#ifdef __GNUC__
|
#ifdef __GNUC__
|
||||||
# pragma GCC diagnostic ignored "-Wmissing-declarations"
|
# pragma GCC diagnostic ignored "-Wmissing-declarations"
|
||||||
#endif
|
#endif
|
||||||
#include <MultiMon.h>
|
|
||||||
|
|
||||||
#include <commctrl.h>
|
#include <commctrl.h>
|
||||||
#include <winuser.h>
|
#include <winuser.h>
|
||||||
|
@ -34,7 +34,7 @@ http://en.wikipedia.org/wiki/Canny_edge_detector
|
|||||||
|
|
||||||
* An example on using the canny edge detector can be found at opencv_source_code/samples/cpp/edge.cpp
|
* An example on using the canny edge detector can be found at opencv_source_code/samples/cpp/edge.cpp
|
||||||
|
|
||||||
* (Python) An example on using the canny edge detector can be found at opencv_source_code/samples/cpp/edge.py
|
* (Python) An example on using the canny edge detector can be found at opencv_source_code/samples/python/edge.py
|
||||||
|
|
||||||
cornerEigenValsAndVecs
|
cornerEigenValsAndVecs
|
||||||
----------------------
|
----------------------
|
||||||
|
@ -364,7 +364,7 @@ CV_INLINE double cvContourPerimeter( const void* contour )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Calculates contour boundning rectangle (update=1) or
|
/* Calculates contour bounding rectangle (update=1) or
|
||||||
just retrieves pre-calculated rectangle (update=0) */
|
just retrieves pre-calculated rectangle (update=0) */
|
||||||
CVAPI(CvRect) cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );
|
CVAPI(CvRect) cvBoundingRect( CvArr* points, int update CV_DEFAULT(0) );
|
||||||
|
|
||||||
|
@ -41,12 +41,13 @@
|
|||||||
|
|
||||||
#include "precomp.hpp"
|
#include "precomp.hpp"
|
||||||
|
|
||||||
|
/*
|
||||||
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
||||||
#define USE_IPP_CANNY 1
|
#define USE_IPP_CANNY 1
|
||||||
#else
|
#else
|
||||||
#undef USE_IPP_CANNY
|
#undef USE_IPP_CANNY
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
#ifdef USE_IPP_CANNY
|
#ifdef USE_IPP_CANNY
|
||||||
namespace cv
|
namespace cv
|
||||||
{
|
{
|
||||||
|
@ -3151,7 +3151,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
|
|||||||
CV_Assert( scn == 3 || scn == 4 );
|
CV_Assert( scn == 3 || scn == 4 );
|
||||||
_dst.create(sz, CV_MAKETYPE(depth, 1));
|
_dst.create(sz, CV_MAKETYPE(depth, 1));
|
||||||
dst = _dst.getMat();
|
dst = _dst.getMat();
|
||||||
|
/*
|
||||||
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
||||||
if( code == CV_BGR2GRAY )
|
if( code == CV_BGR2GRAY )
|
||||||
{
|
{
|
||||||
@ -3174,7 +3174,7 @@ void cv::cvtColor( InputArray _src, OutputArray _dst, int code, int dcn )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
bidx = code == CV_BGR2GRAY || code == CV_BGRA2GRAY ? 0 : 2;
|
bidx = code == CV_BGR2GRAY || code == CV_BGRA2GRAY ? 0 : 2;
|
||||||
|
|
||||||
if( depth == CV_8U )
|
if( depth == CV_8U )
|
||||||
|
@ -2212,7 +2212,7 @@ void cv::resize( InputArray _src, OutputArray _dst, Size dsize,
|
|||||||
int depth = src.depth(), cn = src.channels();
|
int depth = src.depth(), cn = src.channels();
|
||||||
double scale_x = 1./inv_scale_x, scale_y = 1./inv_scale_y;
|
double scale_x = 1./inv_scale_x, scale_y = 1./inv_scale_y;
|
||||||
int k, sx, sy, dx, dy;
|
int k, sx, sy, dx, dy;
|
||||||
|
/*
|
||||||
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
||||||
int mode = interpolation == INTER_LINEAR ? IPPI_INTER_LINEAR : 0;
|
int mode = interpolation == INTER_LINEAR ? IPPI_INTER_LINEAR : 0;
|
||||||
int type = src.type();
|
int type = src.type();
|
||||||
@ -2240,7 +2240,7 @@ void cv::resize( InputArray _src, OutputArray _dst, Size dsize,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
if( interpolation == INTER_NEAREST )
|
if( interpolation == INTER_NEAREST )
|
||||||
{
|
{
|
||||||
resizeNN( src, dst, inv_scale_x, inv_scale_y );
|
resizeNN( src, dst, inv_scale_x, inv_scale_y );
|
||||||
@ -4003,7 +4003,7 @@ void cv::warpAffine( InputArray _src, OutputArray _dst,
|
|||||||
int* adelta = &_abdelta[0], *bdelta = adelta + dst.cols;
|
int* adelta = &_abdelta[0], *bdelta = adelta + dst.cols;
|
||||||
const int AB_BITS = MAX(10, (int)INTER_BITS);
|
const int AB_BITS = MAX(10, (int)INTER_BITS);
|
||||||
const int AB_SCALE = 1 << AB_BITS;
|
const int AB_SCALE = 1 << AB_BITS;
|
||||||
|
/*
|
||||||
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
||||||
int depth = src.depth();
|
int depth = src.depth();
|
||||||
int channels = src.channels();
|
int channels = src.channels();
|
||||||
@ -4047,7 +4047,7 @@ void cv::warpAffine( InputArray _src, OutputArray _dst,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
for( x = 0; x < dst.cols; x++ )
|
for( x = 0; x < dst.cols; x++ )
|
||||||
{
|
{
|
||||||
adelta[x] = saturate_cast<int>(M[0]*x*AB_SCALE);
|
adelta[x] = saturate_cast<int>(M[0]*x*AB_SCALE);
|
||||||
@ -4234,7 +4234,7 @@ void cv::warpPerspective( InputArray _src, OutputArray _dst, InputArray _M0,
|
|||||||
|
|
||||||
if( !(flags & WARP_INVERSE_MAP) )
|
if( !(flags & WARP_INVERSE_MAP) )
|
||||||
invert(matM, matM);
|
invert(matM, matM);
|
||||||
|
/*
|
||||||
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
#if defined (HAVE_IPP) && (IPP_VERSION_MAJOR >= 7)
|
||||||
int depth = src.depth();
|
int depth = src.depth();
|
||||||
int channels = src.channels();
|
int channels = src.channels();
|
||||||
@ -4278,7 +4278,7 @@ void cv::warpPerspective( InputArray _src, OutputArray _dst, InputArray _M0,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
Range range(0, dst.rows);
|
Range range(0, dst.rows);
|
||||||
warpPerspectiveInvoker invoker(src, dst, M, interpolation, borderType, borderValue);
|
warpPerspectiveInvoker invoker(src, dst, M, interpolation, borderType, borderValue);
|
||||||
parallel_for_(range, invoker, dst.total()/(double)(1<<16));
|
parallel_for_(range, invoker, dst.total()/(double)(1<<16));
|
||||||
|
@ -37,6 +37,10 @@ public class OpenCVLoader
|
|||||||
*/
|
*/
|
||||||
public static final String OPENCV_VERSION_2_4_7 = "2.4.7";
|
public static final String OPENCV_VERSION_2_4_7 = "2.4.7";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* OpenCV Library version 2.4.8.
|
||||||
|
*/
|
||||||
|
public static final String OPENCV_VERSION_2_4_8 = "2.4.8";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads and initializes OpenCV library from current application package. Roughly, it's an analog of system.loadLibrary("opencv_java").
|
* Loads and initializes OpenCV library from current application package. Roughly, it's an analog of system.loadLibrary("opencv_java").
|
||||||
|
@ -336,7 +336,7 @@ icvCreateHidHaarClassifierCascade( CvHaarClassifierCascade* cascade )
|
|||||||
out->isStumpBased &= node_count == 1;
|
out->isStumpBased &= node_count == 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
#ifdef HAVE_IPP
|
#ifdef HAVE_IPP
|
||||||
int can_use_ipp = !out->has_tilted_features && !out->is_tree && out->isStumpBased;
|
int can_use_ipp = !out->has_tilted_features && !out->is_tree && out->isStumpBased;
|
||||||
|
|
||||||
@ -392,7 +392,7 @@ icvCreateHidHaarClassifierCascade( CvHaarClassifierCascade* cascade )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
cascade->hid_cascade = out;
|
cascade->hid_cascade = out;
|
||||||
assert( (char*)haar_node_ptr - (char*)out <= datasize );
|
assert( (char*)haar_node_ptr - (char*)out <= datasize );
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ void cv::ocl::GoodFeaturesToTrackDetector_OCL::operator ()(const oclMat& image,
|
|||||||
if(!use_cpu_sorter)
|
if(!use_cpu_sorter)
|
||||||
{ // round to 2^n
|
{ // round to 2^n
|
||||||
unsigned int n=1;
|
unsigned int n=1;
|
||||||
for(n=1;n<(unsigned int)corner_array_size;n<<=1);
|
for(n=1;n<(unsigned int)corner_array_size;n<<=1) ;
|
||||||
corner_array_size = (int)n;
|
corner_array_size = (int)n;
|
||||||
|
|
||||||
ensureSizeIsEnough(1, corner_array_size , CV_32FC2, tmpCorners_);
|
ensureSizeIsEnough(1, corner_array_size , CV_32FC2, tmpCorners_);
|
||||||
|
@ -63,7 +63,7 @@ inline float sum(float val)
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float clamp1(float var, float learningRate, float diff, float minVar)
|
inline float clamp1(float var, float learningRate, float diff, float minVar)
|
||||||
{
|
{
|
||||||
return fmax(var + learningRate * (diff * diff - var), minVar);
|
return fmax(var + learningRate * (diff * diff - var), minVar);
|
||||||
}
|
}
|
||||||
@ -96,7 +96,7 @@ inline float sum(const float4 val)
|
|||||||
return (val.x + val.y + val.z);
|
return (val.x + val.y + val.z);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void swap4(__global float4* ptr, int x, int y, int k, int rows, int ptr_step)
|
inline void swap4(__global float4* ptr, int x, int y, int k, int rows, int ptr_step)
|
||||||
{
|
{
|
||||||
float4 val = ptr[(k * rows + y) * ptr_step + x];
|
float4 val = ptr[(k * rows + y) * ptr_step + x];
|
||||||
ptr[(k * rows + y) * ptr_step + x] = ptr[((k + 1) * rows + y) * ptr_step + x];
|
ptr[(k * rows + y) * ptr_step + x] = ptr[((k + 1) * rows + y) * ptr_step + x];
|
||||||
@ -104,7 +104,7 @@ static void swap4(__global float4* ptr, int x, int y, int k, int rows, int ptr_s
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static float4 clamp1(const float4 var, float learningRate, const float4 diff, float minVar)
|
inline float4 clamp1(const float4 var, float learningRate, const float4 diff, float minVar)
|
||||||
{
|
{
|
||||||
float4 result;
|
float4 result;
|
||||||
result.x = fmax(var.x + learningRate * (diff.x * diff.x - var.x), minVar);
|
result.x = fmax(var.x + learningRate * (diff.x * diff.x - var.x), minVar);
|
||||||
@ -128,7 +128,7 @@ typedef struct
|
|||||||
uchar c_shadowVal;
|
uchar c_shadowVal;
|
||||||
} con_srtuct_t;
|
} con_srtuct_t;
|
||||||
|
|
||||||
static void swap(__global float* ptr, int x, int y, int k, int rows, int ptr_step)
|
inline void swap(__global float* ptr, int x, int y, int k, int rows, int ptr_step)
|
||||||
{
|
{
|
||||||
float val = ptr[(k * rows + y) * ptr_step + x];
|
float val = ptr[(k * rows + y) * ptr_step + x];
|
||||||
ptr[(k * rows + y) * ptr_step + x] = ptr[((k + 1) * rows + y) * ptr_step + x];
|
ptr[(k * rows + y) * ptr_step + x] = ptr[((k + 1) * rows + y) * ptr_step + x];
|
||||||
|
@ -381,8 +381,8 @@ struct PtrStepSz {
|
|||||||
int step;
|
int step;
|
||||||
int rows, cols;
|
int rows, cols;
|
||||||
};
|
};
|
||||||
inline int get(struct PtrStepSz data, int y, int x) { return *((__global int *)((__global char*)data.ptr + data.step * y + sizeof(int) * x)); }
|
inline int get(struct PtrStepSz data, int y, int x) { return *((__global int *)((__global char*)data.ptr + data.step * (y + 1) + sizeof(int) * (x + 1))); }
|
||||||
inline void set(struct PtrStepSz data, int y, int x, int value) { *((__global int *)((__global char*)data.ptr + data.step * y + sizeof(int) * x)) = value; }
|
inline void set(struct PtrStepSz data, int y, int x, int value) { *((__global int *)((__global char*)data.ptr + data.step * (y + 1) + sizeof(int) * (x + 1))) = value; }
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// do Hysteresis for pixel whose edge type is 1
|
// do Hysteresis for pixel whose edge type is 1
|
||||||
@ -494,7 +494,7 @@ edgesHysteresisLocal
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
struct PtrStepSz map = {((__global int *)((__global char*)map_ptr + map_offset)), map_step, rows, cols};
|
struct PtrStepSz map = {((__global int *)((__global char*)map_ptr + map_offset)), map_step, rows + 1, cols + 1};
|
||||||
|
|
||||||
__local int smem[18][18];
|
__local int smem[18][18];
|
||||||
|
|
||||||
@ -507,13 +507,13 @@ edgesHysteresisLocal
|
|||||||
|
|
||||||
smem[threadIdx.y + 1][threadIdx.x + 1] = x < map.cols && y < map.rows ? get(map, y, x) : 0;
|
smem[threadIdx.y + 1][threadIdx.x + 1] = x < map.cols && y < map.rows ? get(map, y, x) : 0;
|
||||||
if (threadIdx.y == 0)
|
if (threadIdx.y == 0)
|
||||||
smem[0][threadIdx.x + 1] = y > 0 ? get(map, y - 1, x) : 0;
|
smem[0][threadIdx.x + 1] = x < map.cols ? get(map, y - 1, x) : 0;
|
||||||
if (threadIdx.y == blockDim.y - 1)
|
if (threadIdx.y == blockDim.y - 1)
|
||||||
smem[blockDim.y + 1][threadIdx.x + 1] = y + 1 < map.rows ? get(map, y + 1, x) : 0;
|
smem[blockDim.y + 1][threadIdx.x + 1] = y + 1 < map.rows ? get(map, y + 1, x) : 0;
|
||||||
if (threadIdx.x == 0)
|
if (threadIdx.x == 0)
|
||||||
smem[threadIdx.y + 1][0] = x > 0 ? get(map, y, x - 1) : 0;
|
smem[threadIdx.y + 1][0] = y < map.rows ? get(map, y, x - 1) : 0;
|
||||||
if (threadIdx.x == blockDim.x - 1)
|
if (threadIdx.x == blockDim.x - 1)
|
||||||
smem[threadIdx.y + 1][blockDim.x + 1] = x + 1 < map.cols ? get(map, y, x + 1) : 0;
|
smem[threadIdx.y + 1][blockDim.x + 1] = x + 1 < map.cols && y < map.rows ? get(map, y, x + 1) : 0;
|
||||||
if (threadIdx.x == 0 && threadIdx.y == 0)
|
if (threadIdx.x == 0 && threadIdx.y == 0)
|
||||||
smem[0][0] = y > 0 && x > 0 ? get(map, y - 1, x - 1) : 0;
|
smem[0][0] = y > 0 && x > 0 ? get(map, y - 1, x - 1) : 0;
|
||||||
if (threadIdx.x == blockDim.x - 1 && threadIdx.y == 0)
|
if (threadIdx.x == blockDim.x - 1 && threadIdx.y == 0)
|
||||||
@ -525,7 +525,7 @@ edgesHysteresisLocal
|
|||||||
|
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
|
|
||||||
if (x >= map.cols || y >= map.rows)
|
if (x >= cols || y >= rows)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int n;
|
int n;
|
||||||
@ -576,7 +576,7 @@ edgesHysteresisLocal
|
|||||||
if (n > 0)
|
if (n > 0)
|
||||||
{
|
{
|
||||||
const int ind = atomic_inc(counter);
|
const int ind = atomic_inc(counter);
|
||||||
st[ind] = (ushort2)(x, y);
|
st[ind] = (ushort2)(x + 1, y + 1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
//
|
//
|
||||||
//M*/
|
//M*/
|
||||||
|
|
||||||
static float distance_(__global const float * center, __global const float * src, int feature_length)
|
inline float distance_(__global const float * center, __global const float * src, int feature_length)
|
||||||
{
|
{
|
||||||
float res = 0;
|
float res = 0;
|
||||||
float4 v0, v1, v2;
|
float4 v0, v1, v2;
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
//
|
//
|
||||||
//M*/
|
//M*/
|
||||||
|
|
||||||
static short2 do_mean_shift(int x0, int y0, __global uchar4* out,int out_step,
|
inline short2 do_mean_shift(int x0, int y0, __global uchar4* out,int out_step,
|
||||||
__global uchar4* in, int in_step, int dst_off, int src_off,
|
__global uchar4* in, int in_step, int dst_off, int src_off,
|
||||||
int cols, int rows, int sp, int sr, int maxIter, float eps)
|
int cols, int rows, int sp, int sr, int maxIter, float eps)
|
||||||
{
|
{
|
||||||
|
@ -208,7 +208,7 @@ __kernel void normalize_hists_36_kernel(__global float* block_hists,
|
|||||||
//-------------------------------------------------------------
|
//-------------------------------------------------------------
|
||||||
// Normalization of histograms via L2Hys_norm
|
// Normalization of histograms via L2Hys_norm
|
||||||
//
|
//
|
||||||
static float reduce_smem(volatile __local float* smem, int size)
|
inline float reduce_smem(volatile __local float* smem, int size)
|
||||||
{
|
{
|
||||||
unsigned int tid = get_local_id(0);
|
unsigned int tid = get_local_id(0);
|
||||||
float sum = smem[tid];
|
float sum = smem[tid];
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#ifdef CPU
|
#ifdef CPU
|
||||||
|
|
||||||
static void reduce3(float val1, float val2, float val3, __local float* smem1, __local float* smem2, __local float* smem3, int tid)
|
inline void reduce3(float val1, float val2, float val3, __local float* smem1, __local float* smem2, __local float* smem3, int tid)
|
||||||
{
|
{
|
||||||
smem1[tid] = val1;
|
smem1[tid] = val1;
|
||||||
smem2[tid] = val2;
|
smem2[tid] = val2;
|
||||||
@ -71,7 +71,7 @@ static void reduce3(float val1, float val2, float val3, __local float* smem1,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reduce2(float val1, float val2, volatile __local float* smem1, volatile __local float* smem2, int tid)
|
inline void reduce2(float val1, float val2, volatile __local float* smem1, volatile __local float* smem2, int tid)
|
||||||
{
|
{
|
||||||
smem1[tid] = val1;
|
smem1[tid] = val1;
|
||||||
smem2[tid] = val2;
|
smem2[tid] = val2;
|
||||||
@ -88,7 +88,7 @@ static void reduce2(float val1, float val2, volatile __local float* smem1, volat
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reduce1(float val1, volatile __local float* smem1, int tid)
|
inline void reduce1(float val1, volatile __local float* smem1, int tid)
|
||||||
{
|
{
|
||||||
smem1[tid] = val1;
|
smem1[tid] = val1;
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
@ -103,7 +103,7 @@ static void reduce1(float val1, volatile __local float* smem1, int tid)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static void reduce3(float val1, float val2, float val3,
|
inline void reduce3(float val1, float val2, float val3,
|
||||||
__local volatile float* smem1, __local volatile float* smem2, __local volatile float* smem3, int tid)
|
__local volatile float* smem1, __local volatile float* smem2, __local volatile float* smem3, int tid)
|
||||||
{
|
{
|
||||||
smem1[tid] = val1;
|
smem1[tid] = val1;
|
||||||
@ -150,7 +150,7 @@ static void reduce3(float val1, float val2, float val3,
|
|||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reduce2(float val1, float val2, __local volatile float* smem1, __local volatile float* smem2, int tid)
|
inline void reduce2(float val1, float val2, __local volatile float* smem1, __local volatile float* smem2, int tid)
|
||||||
{
|
{
|
||||||
smem1[tid] = val1;
|
smem1[tid] = val1;
|
||||||
smem2[tid] = val2;
|
smem2[tid] = val2;
|
||||||
@ -189,7 +189,7 @@ static void reduce2(float val1, float val2, __local volatile float* smem1, __loc
|
|||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void reduce1(float val1, __local volatile float* smem1, int tid)
|
inline void reduce1(float val1, __local volatile float* smem1, int tid)
|
||||||
{
|
{
|
||||||
smem1[tid] = val1;
|
smem1[tid] = val1;
|
||||||
barrier(CLK_LOCAL_MEM_FENCE);
|
barrier(CLK_LOCAL_MEM_FENCE);
|
||||||
@ -225,7 +225,7 @@ static void reduce1(float val1, __local volatile float* smem1, int tid)
|
|||||||
// Image read mode
|
// Image read mode
|
||||||
__constant sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_LINEAR;
|
__constant sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_CLAMP_TO_EDGE | CLK_FILTER_LINEAR;
|
||||||
|
|
||||||
static void SetPatch(image2d_t I, float x, float y,
|
inline void SetPatch(image2d_t I, float x, float y,
|
||||||
float* Pch, float* Dx, float* Dy,
|
float* Pch, float* Dx, float* Dy,
|
||||||
float* A11, float* A12, float* A22)
|
float* A11, float* A12, float* A22)
|
||||||
{
|
{
|
||||||
@ -262,7 +262,7 @@ inline void GetError(image2d_t J, const float x, const float y, const float* Pch
|
|||||||
*errval += fabs(diff);
|
*errval += fabs(diff);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetPatch4(image2d_t I, const float x, const float y,
|
inline void SetPatch4(image2d_t I, const float x, const float y,
|
||||||
float4* Pch, float4* Dx, float4* Dy,
|
float4* Pch, float4* Dx, float4* Dy,
|
||||||
float* A11, float* A12, float* A22)
|
float* A11, float* A12, float* A22)
|
||||||
{
|
{
|
||||||
@ -285,7 +285,7 @@ static void SetPatch4(image2d_t I, const float x, const float y,
|
|||||||
*A22 += sqIdx.x + sqIdx.y + sqIdx.z;
|
*A22 += sqIdx.x + sqIdx.y + sqIdx.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GetPatch4(image2d_t J, const float x, const float y,
|
inline void GetPatch4(image2d_t J, const float x, const float y,
|
||||||
const float4* Pch, const float4* Dx, const float4* Dy,
|
const float4* Pch, const float4* Dx, const float4* Dy,
|
||||||
float* b1, float* b2)
|
float* b1, float* b2)
|
||||||
{
|
{
|
||||||
@ -297,7 +297,7 @@ static void GetPatch4(image2d_t J, const float x, const float y,
|
|||||||
*b2 += xdiff.x + xdiff.y + xdiff.z;
|
*b2 += xdiff.x + xdiff.y + xdiff.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void GetError4(image2d_t J, const float x, const float y, const float4* Pch, float* errval)
|
inline void GetError4(image2d_t J, const float x, const float y, const float4* Pch, float* errval)
|
||||||
{
|
{
|
||||||
float4 diff = read_imagef(J, sampler, (float2)(x,y))-*Pch;
|
float4 diff = read_imagef(J, sampler, (float2)(x,y))-*Pch;
|
||||||
*errval += fabs(diff.x) + fabs(diff.y) + fabs(diff.z);
|
*errval += fabs(diff.x) + fabs(diff.y) + fabs(diff.z);
|
||||||
|
@ -97,7 +97,7 @@ inline float pix_diff_1(const uchar4 l, __global const uchar *rs)
|
|||||||
return abs((int)(l.x) - *rs);
|
return abs((int)(l.x) - *rs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static float pix_diff_4(const uchar4 l, __global const uchar *rs)
|
inline float pix_diff_4(const uchar4 l, __global const uchar *rs)
|
||||||
{
|
{
|
||||||
uchar4 r;
|
uchar4 r;
|
||||||
r = *((__global uchar4 *)rs);
|
r = *((__global uchar4 *)rs);
|
||||||
@ -233,7 +233,7 @@ __kernel void level_up_message(__global T *src, int src_rows, int src_step,
|
|||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
//////////////////// calc all iterations /////////////////////
|
//////////////////// calc all iterations /////////////////////
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
static void message(__global T *us_, __global T *ds_, __global T *ls_, __global T *rs_,
|
inline void message(__global T *us_, __global T *ds_, __global T *ls_, __global T *rs_,
|
||||||
const __global T *dt,
|
const __global T *dt,
|
||||||
int u_step, int msg_disp_step, int data_disp_step,
|
int u_step, int msg_disp_step, int data_disp_step,
|
||||||
float4 cmax_disc_term, float4 cdisc_single_jump)
|
float4 cmax_disc_term, float4 cdisc_single_jump)
|
||||||
|
@ -62,7 +62,7 @@ __kernel void centeredGradientKernel(__global const float* src, int src_col, int
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static float bicubicCoeff(float x_)
|
inline float bicubicCoeff(float x_)
|
||||||
{
|
{
|
||||||
|
|
||||||
float x = fabs(x_);
|
float x = fabs(x_);
|
||||||
@ -156,7 +156,7 @@ __kernel void warpBackwardKernel(__global const float* I0, int I0_step, int I0_c
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static float readImage(__global float *image, int x, int y, int rows, int cols, int elemCntPerRow)
|
inline float readImage(__global float *image, int x, int y, int rows, int cols, int elemCntPerRow)
|
||||||
{
|
{
|
||||||
int i0 = clamp(x, 0, cols - 1);
|
int i0 = clamp(x, 0, cols - 1);
|
||||||
int j0 = clamp(y, 0, rows - 1);
|
int j0 = clamp(y, 0, rows - 1);
|
||||||
@ -284,7 +284,7 @@ __kernel void estimateDualVariablesKernel(__global const float* u1, int u1_col,
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static float divergence(__global const float* v1, __global const float* v2, int y, int x, int v1_step, int v2_step)
|
inline float divergence(__global const float* v1, __global const float* v2, int y, int x, int v1_step, int v2_step)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (x > 0 && y > 0)
|
if (x > 0 && y > 0)
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
#if defined(_MSC_VER) && (_MSC_VER >= 1800)
|
||||||
|
// eliminating duplicated round() declaration
|
||||||
|
#define HAVE_ROUND
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <Python.h>
|
#include <Python.h>
|
||||||
|
|
||||||
#define MODULESTR "cv2"
|
#define MODULESTR "cv2"
|
||||||
|
@ -7,10 +7,6 @@ endif()
|
|||||||
set(OPENCV_MODULE_TYPE STATIC)
|
set(OPENCV_MODULE_TYPE STATIC)
|
||||||
set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
|
set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE)
|
||||||
|
|
||||||
if(HAVE_CUDA)
|
|
||||||
ocv_include_directories(${CUDA_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
|
|
||||||
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef)
|
ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef)
|
||||||
|
|
||||||
ocv_add_module(ts opencv_core opencv_imgproc opencv_highgui)
|
ocv_add_module(ts opencv_core opencv_imgproc opencv_highgui)
|
||||||
|
@ -44,10 +44,6 @@
|
|||||||
#include "opencv2/ts/cuda_perf.hpp"
|
#include "opencv2/ts/cuda_perf.hpp"
|
||||||
#include "opencv2/core/cuda.hpp"
|
#include "opencv2/core/cuda.hpp"
|
||||||
|
|
||||||
#ifdef HAVE_CUDA
|
|
||||||
#include <cuda_runtime.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
using namespace cv;
|
using namespace cv;
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@ -260,44 +256,8 @@ namespace perf
|
|||||||
void printCudaInfo()
|
void printCudaInfo()
|
||||||
{
|
{
|
||||||
printOsInfo();
|
printOsInfo();
|
||||||
#ifndef HAVE_CUDA
|
for (int i = 0; i < cv::cuda::getCudaEnabledDeviceCount(); i++)
|
||||||
printf("[----------]\n[ GPU INFO ] \tOpenCV was built without CUDA support.\n[----------]\n"), fflush(stdout);
|
cv::cuda::printCudaDeviceInfo(i);
|
||||||
#else
|
|
||||||
int driver;
|
|
||||||
cudaDriverGetVersion(&driver);
|
|
||||||
|
|
||||||
printf("[----------]\n"), fflush(stdout);
|
|
||||||
printf("[ GPU INFO ] \tCUDA Driver version: %d.\n", driver), fflush(stdout);
|
|
||||||
printf("[ GPU INFO ] \tCUDA Runtime version: %d.\n", CUDART_VERSION), fflush(stdout);
|
|
||||||
printf("[----------]\n"), fflush(stdout);
|
|
||||||
|
|
||||||
printf("[----------]\n"), fflush(stdout);
|
|
||||||
printf("[ GPU INFO ] \tCUDA module was compiled for the following GPU archs.\n"), fflush(stdout);
|
|
||||||
printf("[ BIN ] \t%s.\n", CUDA_ARCH_BIN), fflush(stdout);
|
|
||||||
printf("[ PTX ] \t%s.\n", CUDA_ARCH_PTX), fflush(stdout);
|
|
||||||
printf("[----------]\n"), fflush(stdout);
|
|
||||||
|
|
||||||
printf("[----------]\n"), fflush(stdout);
|
|
||||||
int deviceCount = cv::cuda::getCudaEnabledDeviceCount();
|
|
||||||
printf("[ GPU INFO ] \tCUDA device count:: %d.\n", deviceCount), fflush(stdout);
|
|
||||||
printf("[----------]\n"), fflush(stdout);
|
|
||||||
|
|
||||||
for (int i = 0; i < deviceCount; ++i)
|
|
||||||
{
|
|
||||||
cv::cuda::DeviceInfo info(i);
|
|
||||||
|
|
||||||
printf("[----------]\n"), fflush(stdout);
|
|
||||||
printf("[ DEVICE ] \t# %d %s.\n", i, info.name()), fflush(stdout);
|
|
||||||
printf("[ ] \tCompute capability: %d.%d\n", (int)info.majorVersion(), (int)info.minorVersion()), fflush(stdout);
|
|
||||||
printf("[ ] \tMulti Processor Count: %d\n", info.multiProcessorCount()), fflush(stdout);
|
|
||||||
printf("[ ] \tTotal memory: %d Mb\n", static_cast<int>(static_cast<int>(info.totalMemory() / 1024.0) / 1024.0)), fflush(stdout);
|
|
||||||
printf("[ ] \tFree memory: %d Mb\n", static_cast<int>(static_cast<int>(info.freeMemory() / 1024.0) / 1024.0)), fflush(stdout);
|
|
||||||
if (!info.isCompatible())
|
|
||||||
printf("[ GPU INFO ] \tThis device is NOT compatible with current CUDA module build\n");
|
|
||||||
printf("[----------]\n"), fflush(stdout);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
struct KeypointIdxCompare
|
struct KeypointIdxCompare
|
||||||
|
@ -63,3 +63,7 @@ OpenCV version constants
|
|||||||
.. data:: OPENCV_VERSION_2_4_7
|
.. data:: OPENCV_VERSION_2_4_7
|
||||||
|
|
||||||
OpenCV Library version 2.4.7
|
OpenCV Library version 2.4.7
|
||||||
|
|
||||||
|
.. data:: OPENCV_VERSION_2_4_8
|
||||||
|
|
||||||
|
OpenCV Library version 2.4.8
|
||||||
|
@ -15,7 +15,7 @@ using namespace android;
|
|||||||
|
|
||||||
const int OpenCVEngine::Platform = DetectKnownPlatforms();
|
const int OpenCVEngine::Platform = DetectKnownPlatforms();
|
||||||
const int OpenCVEngine::CpuID = GetCpuID();
|
const int OpenCVEngine::CpuID = GetCpuID();
|
||||||
const int OpenCVEngine::KnownVersions[] = {2040000, 2040100, 2040200, 2040300, 2040301, 2040302, 2040400, 2040500, 2040600, 2040700};
|
const int OpenCVEngine::KnownVersions[] = {2040000, 2040100, 2040200, 2040300, 2040301, 2040302, 2040400, 2040500, 2040600, 2040700, 2040701, 2040800};
|
||||||
|
|
||||||
bool OpenCVEngine::ValidateVersion(int version)
|
bool OpenCVEngine::ValidateVersion(int version)
|
||||||
{
|
{
|
||||||
|
@ -34,13 +34,13 @@ bool ParseString(const string& src, string& key, string& value)
|
|||||||
if (src.empty())
|
if (src.empty())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// find seporator ":"
|
// find separator ":"
|
||||||
size_t seporator_pos = src.find(":");
|
size_t separator_pos = src.find(":");
|
||||||
if (string::npos != seporator_pos)
|
if (string::npos != separator_pos)
|
||||||
{
|
{
|
||||||
key = src.substr(0, seporator_pos);
|
key = src.substr(0, separator_pos);
|
||||||
StripString(key);
|
StripString(key);
|
||||||
value = src.substr(seporator_pos+1);
|
value = src.substr(separator_pos+1);
|
||||||
StripString(value);
|
StripString(value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -50,42 +50,42 @@ bool ParseString(const string& src, string& key, string& value)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
set<string> SplitString(const string& src, const char seporator)
|
set<string> SplitString(const string& src, const char separator)
|
||||||
{
|
{
|
||||||
set<string> result;
|
set<string> result;
|
||||||
|
|
||||||
if (!src.empty())
|
if (!src.empty())
|
||||||
{
|
{
|
||||||
size_t seporator_pos;
|
size_t separator_pos;
|
||||||
size_t prev_pos = 0;
|
size_t prev_pos = 0;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
seporator_pos = src.find(seporator, prev_pos);
|
separator_pos = src.find(separator, prev_pos);
|
||||||
result.insert(src.substr(prev_pos, seporator_pos - prev_pos));
|
result.insert(src.substr(prev_pos, separator_pos - prev_pos));
|
||||||
prev_pos = seporator_pos + 1;
|
prev_pos = separator_pos + 1;
|
||||||
}
|
}
|
||||||
while (string::npos != seporator_pos);
|
while (string::npos != separator_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
vector<string> SplitStringVector(const string& src, const char seporator)
|
vector<string> SplitStringVector(const string& src, const char separator)
|
||||||
{
|
{
|
||||||
vector<string> result;
|
vector<string> result;
|
||||||
|
|
||||||
if (!src.empty())
|
if (!src.empty())
|
||||||
{
|
{
|
||||||
size_t seporator_pos;
|
size_t separator_pos;
|
||||||
size_t prev_pos = 0;
|
size_t prev_pos = 0;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
seporator_pos = src.find(seporator, prev_pos);
|
separator_pos = src.find(separator, prev_pos);
|
||||||
string tmp = src.substr(prev_pos, seporator_pos - prev_pos);
|
string tmp = src.substr(prev_pos, separator_pos - prev_pos);
|
||||||
result.push_back(tmp);
|
result.push_back(tmp);
|
||||||
prev_pos = seporator_pos + 1;
|
prev_pos = separator_pos + 1;
|
||||||
}
|
}
|
||||||
while (string::npos != seporator_pos);
|
while (string::npos != separator_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
@ -6,8 +6,8 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
bool StripString(std::string& src);
|
bool StripString(std::string& src);
|
||||||
std::set<std::string> SplitString(const std::string& src, const char seporator);
|
std::set<std::string> SplitString(const std::string& src, const char separator);
|
||||||
bool ParseString(const std::string& src, std::string& key, std::string& value);
|
bool ParseString(const std::string& src, std::string& key, std::string& value);
|
||||||
std::vector<std::string> SplitStringVector(const std::string& src, const char seporator);
|
std::vector<std::string> SplitStringVector(const std::string& src, const char separator);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -203,7 +203,7 @@ inline int SplitPlatform(const vector<string>& features)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Package naming convention
|
/* Package naming convention
|
||||||
* All parts of package name seporated by "_" symbol
|
* All parts of package name separated by "_" symbol
|
||||||
* First part is base namespace.
|
* First part is base namespace.
|
||||||
* Second part is version. Version starts from "v" symbol. After "v" symbol version nomber without dot symbol added.
|
* Second part is version. Version starts from "v" symbol. After "v" symbol version nomber without dot symbol added.
|
||||||
* If platform is known third part is platform name
|
* If platform is known third part is platform name
|
||||||
|
@ -144,7 +144,7 @@ TEST(PackageManager, GetPackagePathForMips)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// TODO: Enable tests if seporate package will be exists
|
// TODO: Enable tests if separate package will be exists
|
||||||
// TEST(PackageManager, GetPackagePathForTegra2)
|
// TEST(PackageManager, GetPackagePathForTegra2)
|
||||||
// {
|
// {
|
||||||
// PackageManagerStub pm;
|
// PackageManagerStub pm;
|
||||||
|
@ -25,9 +25,9 @@ interface OpenCVEngineInterface
|
|||||||
boolean installVersion(String version);
|
boolean installVersion(String version);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return list of libraries in loading order seporated by ";" symbol
|
* Return list of libraries in loading order separated by ";" symbol
|
||||||
* @param OpenCV version
|
* @param OpenCV version
|
||||||
* @return Returns OpenCV libraries names seporated by symbol ";" in loading order
|
* @return Returns OpenCV libraries names separated by symbol ";" in loading order
|
||||||
*/
|
*/
|
||||||
String getLibraryList(String version);
|
String getLibraryList(String version);
|
||||||
}
|
}
|
||||||
|
@ -14,20 +14,20 @@ manually using adb tool:
|
|||||||
|
|
||||||
.. code-block:: sh
|
.. code-block:: sh
|
||||||
|
|
||||||
adb install OpenCV-2.4.7.1-android-sdk/apk/OpenCV_2.4.7.1_Manager_2.15_<platform>.apk
|
adb install OpenCV-2.4.8-android-sdk/apk/OpenCV_2.4.8_Manager_2.16_<platform>.apk
|
||||||
|
|
||||||
Use the table below to determine proper OpenCV Manager package for your device:
|
Use the table below to determine proper OpenCV Manager package for your device:
|
||||||
|
|
||||||
+------------------------------+--------------+------------------------------------------------------+
|
+------------------------------+--------------+----------------------------------------------------+
|
||||||
| Hardware Platform | Android ver. | Package name |
|
| Hardware Platform | Android ver. | Package name |
|
||||||
+==============================+==============+======================================================+
|
+==============================+==============+====================================================+
|
||||||
| armeabi-v7a (ARMv7-A + NEON) | >= 2.3 | OpenCV_2.4.7.1_Manager_2.15_armv7a-neon.apk |
|
| armeabi-v7a (ARMv7-A + NEON) | >= 2.3 | OpenCV_2.4.8_Manager_2.16_armv7a-neon.apk |
|
||||||
+------------------------------+--------------+------------------------------------------------------+
|
+------------------------------+--------------+----------------------------------------------------+
|
||||||
| armeabi-v7a (ARMv7-A + NEON) | = 2.2 | OpenCV_2.4.7.1_Manager_2.15_armv7a-neon-android8.apk |
|
| armeabi-v7a (ARMv7-A + NEON) | = 2.2 | OpenCV_2.4.8_Manager_2.16_armv7a-neon-android8.apk |
|
||||||
+------------------------------+--------------+------------------------------------------------------+
|
+------------------------------+--------------+----------------------------------------------------+
|
||||||
| armeabi (ARMv5, ARMv6) | >= 2.3 | OpenCV_2.4.7.1_Manager_2.15_armeabi.apk |
|
| armeabi (ARMv5, ARMv6) | >= 2.3 | OpenCV_2.4.8_Manager_2.16_armeabi.apk |
|
||||||
+------------------------------+--------------+------------------------------------------------------+
|
+------------------------------+--------------+----------------------------------------------------+
|
||||||
| Intel x86 | >= 2.3 | OpenCV_2.4.7.1_Manager_2.15_x86.apk |
|
| Intel x86 | >= 2.3 | OpenCV_2.4.8_Manager_2.16_x86.apk |
|
||||||
+------------------------------+--------------+------------------------------------------------------+
|
+------------------------------+--------------+----------------------------------------------------+
|
||||||
| MIPS | >= 2.3 | OpenCV_2.4.7.1_Manager_2.15_mips.apk |
|
| MIPS | >= 2.3 | OpenCV_2.4.8_Manager_2.16_mips.apk |
|
||||||
+------------------------------+--------------+------------------------------------------------------+
|
+------------------------------+--------------+----------------------------------------------------+
|
||||||
|
Loading…
x
Reference in New Issue
Block a user