Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
62b85a41
Commit
62b85a41
authored
Jul 23, 2013
by
Alexander Smorkalov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
TLS calls on WinRT replaced on variables with C++11 "thread" attribute.
parent
6257df1c
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
102 additions
and
25 deletions
+102
-25
inputoutput.cpp
modules/contrib/src/inputoutput.cpp
+66
-10
alloc.cpp
modules/core/src/alloc.cpp
+4
-4
rand.cpp
modules/core/src/rand.cpp
+30
-9
system.cpp
modules/core/src/system.cpp
+2
-2
No files found.
modules/contrib/src/inputoutput.cpp
View file @
62b85a41
...
...
@@ -16,10 +16,23 @@ namespace cv
list
.
clear
();
std
::
string
path_f
=
path
+
"/"
+
exten
;
#ifdef WIN32
#if HAVE_WINRT
WIN32_FIND_DATAW
FindFileData
;
#else
WIN32_FIND_DATA
FindFileData
;
HANDLE
hFind
;
hFind
=
FindFirstFile
((
LPCSTR
)
path_f
.
c_str
(),
&
FindFileData
);
#endif
HANDLE
hFind
;
#ifdef HAVE_WINRT
size_t
size
=
mbstowcs
(
NULL
,
path_f
.
c_str
(),
path_f
.
size
());
wchar_t
*
wpath
=
(
wchar_t
*
)
malloc
((
size
+
1
)
*
sizeof
(
wchar_t
));
wpath
[
size
]
=
0
;
mbstowcs
(
wpath
,
path_f
.
c_str
(),
path_f
.
size
());
hFind
=
FindFirstFileW
(
wpath
,
&
FindFileData
);
free
(
wpath
);
#else
hFind
=
FindFirstFileA
((
LPCSTR
)
path_f
.
c_str
(),
&
FindFileData
);
#endif
if
(
hFind
==
INVALID_HANDLE_VALUE
)
{
return
list
;
...
...
@@ -34,13 +47,29 @@ namespace cv
FindFileData
.
dwFileAttributes
==
FILE_ATTRIBUTE_SYSTEM
||
FindFileData
.
dwFileAttributes
==
FILE_ATTRIBUTE_READONLY
)
{
char
*
fname
;
#ifdef HAVE_WINRT
size_t
asize
=
wcstombs
(
NULL
,
FindFileData
.
cFileName
,
0
);
char
*
fname
=
(
char
*
)
malloc
((
asize
+
1
)
*
sizeof
(
char
));
fname
[
asize
]
=
0
;
wcstombs
(
fname
,
FindFileData
.
cFileName
,
asize
);
#else
fname
=
FindFileData
.
cFileName
;
#endif
if
(
addPath
)
list
.
push_back
(
path
+
"/"
+
FindFileData
.
cFileN
ame
);
list
.
push_back
(
path
+
"/"
+
fn
ame
);
else
list
.
push_back
(
FindFileData
.
cFileName
);
list
.
push_back
(
fname
);
#ifdef HAVE_WINRT
free
(
fname
);
#endif
}
}
while
(
FindNextFile
(
hFind
,
&
FindFileData
));
#ifdef HAVE_WINRT
while
(
FindNextFileW
(
hFind
,
&
FindFileData
));
#else
while
(
FindNextFileA
(
hFind
,
&
FindFileData
));
#endif
FindClose
(
hFind
);
}
#else
...
...
@@ -75,10 +104,23 @@ namespace cv
std
::
string
path_f
=
path
+
"/"
+
exten
;
list
.
clear
();
#ifdef WIN32
#if HAVE_WINRT
WIN32_FIND_DATAW
FindFileData
;
#else
WIN32_FIND_DATA
FindFileData
;
#endif
HANDLE
hFind
;
hFind
=
FindFirstFile
((
LPCSTR
)
path_f
.
c_str
(),
&
FindFileData
);
#ifdef HAVE_WINRT
size_t
size
=
mbstowcs
(
NULL
,
path_f
.
c_str
(),
path_f
.
size
());
wchar_t
*
wpath
=
(
wchar_t
*
)
malloc
((
size
+
1
)
*
sizeof
(
wchar_t
));
wpath
[
size
]
=
0
;
mbstowcs
(
wpath
,
path_f
.
c_str
(),
path_f
.
size
());
hFind
=
FindFirstFileW
(
wpath
,
&
FindFileData
);
free
(
wpath
);
#else
hFind
=
FindFirstFileA
((
LPCSTR
)
path_f
.
c_str
(),
&
FindFileData
);
#endif
if
(
hFind
==
INVALID_HANDLE_VALUE
)
{
return
list
;
...
...
@@ -91,13 +133,27 @@ namespace cv
strcmp
(
FindFileData
.
cFileName
,
"."
)
!=
0
&&
strcmp
(
FindFileData
.
cFileName
,
".."
)
!=
0
)
{
char
*
fname
;
#ifdef HAVE_WINRT
size_t
asize
=
wcstombs
(
NULL
,
FindFileData
.
cFileName
,
0
);
char
*
fname
=
(
char
*
)
malloc
((
asize
+
1
)
*
sizeof
(
char
));
fname
[
asize
]
=
0
;
wcstombs
(
fname
,
FindFileData
.
cFileName
,
asize
);
#else
fname
=
FindFileData
.
cFileName
;
#endif
if
(
addPath
)
list
.
push_back
(
path
+
"/"
+
FindFileData
.
cFileN
ame
);
list
.
push_back
(
path
+
"/"
+
fn
ame
);
else
list
.
push_back
(
FindFileData
.
cFileN
ame
);
list
.
push_back
(
fn
ame
);
}
}
while
(
FindNextFile
(
hFind
,
&
FindFileData
));
#ifdef HAVE_WINRT
while
(
FindNextFileW
(
hFind
,
&
FindFileData
));
#else
while
(
FindNextFileA
(
hFind
,
&
FindFileData
));
#endif
FindClose
(
hFind
);
}
...
...
modules/core/src/alloc.cpp
View file @
62b85a41
...
...
@@ -42,10 +42,6 @@
#include "precomp.hpp"
#if (_WIN32_WINNT >= 0x0602)
#include <synchapi.h>
#endif
#define CV_USE_SYSTEM_MALLOC 1
namespace
cv
...
...
@@ -98,6 +94,10 @@ void fastFree(void* ptr)
#define STAT(stmt)
#ifdef WIN32
#if (_WIN32_WINNT >= 0x0602)
#include <synchapi.h>
#endif
struct
CriticalSection
{
CriticalSection
()
...
...
modules/core/src/rand.cpp
View file @
62b85a41
...
...
@@ -726,33 +726,54 @@ void RNG::fill( InputOutputArray _mat, int disttype,
}
#ifdef WIN32
#ifdef HAVE_WINRT
// using C++11 thread attribute for local thread data
__declspec
(
thread
)
RNG
*
rng
=
NULL
;
void
deleteThreadRNGData
()
{
if
(
rng
)
delete
rng
;
}
RNG
&
theRNG
()
{
if
(
!
rng
)
{
rng
=
new
RNG
;
}
return
*
rng
;
}
#else
#ifdef WINCE
# define TLS_OUT_OF_INDEXES ((DWORD)0xFFFFFFFF)
#endif
static
DWORD
tlsRNGKey
=
TLS_OUT_OF_INDEXES
;
void
deleteThreadRNGData
()
{
if
(
tlsRNGKey
!=
TLS_OUT_OF_INDEXES
)
delete
(
RNG
*
)
TlsGetValue
(
tlsRNGKey
);
void
deleteThreadRNGData
()
{
if
(
tlsRNGKey
!=
TLS_OUT_OF_INDEXES
)
delete
(
RNG
*
)
TlsGetValue
(
tlsRNGKey
);
}
RNG
&
theRNG
()
{
if
(
tlsRNGKey
==
TLS_OUT_OF_INDEXES
)
{
tlsRNGKey
=
TlsAlloc
();
CV_Assert
(
tlsRNGKey
!=
TLS_OUT_OF_INDEXES
);
tlsRNGKey
=
TlsAlloc
();
CV_Assert
(
tlsRNGKey
!=
TLS_OUT_OF_INDEXES
);
}
RNG
*
rng
=
(
RNG
*
)
TlsGetValue
(
tlsRNGKey
);
if
(
!
rng
)
{
rng
=
new
RNG
;
TlsSetValue
(
tlsRNGKey
,
rng
);
rng
=
new
RNG
;
TlsSetValue
(
tlsRNGKey
,
rng
);
}
return
*
rng
;
}
#endif //HAVE_WINRT
#else
static
pthread_key_t
tlsRNGKey
=
0
;
...
...
modules/core/src/system.cpp
View file @
62b85a41
...
...
@@ -48,7 +48,7 @@
#endif
#include <windows.h>
#if (_WIN32_WINNT >= 0x0602)
#include <synchapi.h>
#include <synchapi.h>
#endif
#undef small
#undef min
...
...
@@ -80,8 +80,8 @@
#endif
#ifdef HAVE_WINRT
#pragma comment(lib, "MinCore_Downlevel")
#include <wrl/client.h>
#pragma comment(lib, "MinCore_Downlevel")
std
::
wstring
GetTempPathWinRT
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment