summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorwang-bin <wbsecg1@gmail.com>2015-09-29 18:11:03 +0800
committerMatt Oliver <protogonoi@gmail.com>2015-10-16 00:54:57 +1100
commit0861862b897ade9e62064f532f3b0a957ee7a0d8 (patch)
tree31a4529e5bc9ecfa7e668a0cb05249c04a72dd32
parent909907948846dedf57a730a4d115d04d1117f9e5 (diff)
winrt: multithreading support
_beginthreadex is for desktop only. CreateThread is available for windows store apps on windows (and phone) 8.1 and later. http://msdn.microsoft.com/en-us/library/ms682453%28VS.85%29.aspx Signed-off-by: Matt Oliver <protogonoi@gmail.com>
-rw-r--r--compat/w32pthreads.h5
-rwxr-xr-xconfigure7
-rw-r--r--libavutil/cpu.c8
3 files changed, 19 insertions, 1 deletions
diff --git a/compat/w32pthreads.h b/compat/w32pthreads.h
index 2aff72ae99..c25a191f21 100644
--- a/compat/w32pthreads.h
+++ b/compat/w32pthreads.h
@@ -82,8 +82,13 @@ static av_unused int pthread_create(pthread_t *thread, const void *unused_attr,
{
thread->func = start_routine;
thread->arg = arg;
+#if HAVE_WINRT
+ thread->handle = (void*)CreateThread(NULL, 0, win32thread_worker, thread,
+ 0, NULL);
+#else
thread->handle = (void*)_beginthreadex(NULL, 0, win32thread_worker, thread,
0, NULL);
+#endif
return !thread->handle;
}
diff --git a/configure b/configure
index 52a65a4876..386805e20f 100755
--- a/configure
+++ b/configure
@@ -1904,6 +1904,7 @@ HAVE_LIST="
dos_paths
dxva2api_cobj
dxva2_lib
+ winrt
libc_msvcrt
libdc1394_1
libdc1394_2
@@ -5236,9 +5237,15 @@ check_type "va/va.h" "VAPictureParameterBufferHEVC"
check_type "vdpau/vdpau.h" "VdpPictureInfoHEVC"
+check_cpp_condition windows.h "!WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)" && enable winrt || disable winrt
+
if ! disabled w32threads && ! enabled pthreads; then
check_func_headers "windows.h process.h" _beginthreadex &&
enable w32threads || disable w32threads
+ if ! enabled w32threads && enabled winrt; then
+ check_func_headers "windows.h" CreateThread &&
+ enable w32threads || disable w32threads
+ fi
fi
# check for some common methods of building with pthread support
diff --git a/libavutil/cpu.c b/libavutil/cpu.c
index 780368d69e..c64baf9324 100644
--- a/libavutil/cpu.c
+++ b/libavutil/cpu.c
@@ -30,7 +30,7 @@
#endif
#include <sched.h>
#endif
-#if HAVE_GETPROCESSAFFINITYMASK
+#if HAVE_GETPROCESSAFFINITYMASK || HAVE_WINRT
#include <windows.h>
#endif
#if HAVE_SYSCTL
@@ -253,6 +253,9 @@ int av_cpu_count(void)
static volatile int printed;
int nb_cpus = 1;
+#if HAVE_WINRT
+ SYSTEM_INFO sysinfo;
+#endif
#if HAVE_SCHED_GETAFFINITY && defined(CPU_COUNT)
cpu_set_t cpuset;
@@ -274,6 +277,9 @@ int av_cpu_count(void)
nb_cpus = sysconf(_SC_NPROC_ONLN);
#elif HAVE_SYSCONF && defined(_SC_NPROCESSORS_ONLN)
nb_cpus = sysconf(_SC_NPROCESSORS_ONLN);
+#elif HAVE_WINRT
+ GetNativeSystemInfo(&sysinfo);
+ nb_cpus = sysinfo.dwNumberOfProcessors;
#endif
if (!printed) {