[FFmpeg-devel] [PATCH 1/5] w32pthreads: always use Vista+ API, drop XP support

James Almer jamrial at gmail.com
Fri Dec 22 02:31:37 EET 2017


On 12/21/2017 7:22 PM, wm4 wrote:
> This removes the XP compatibility code, and switches entirely to SWR
> locks, which are available starting at Windows Vista.
> 
> This removes CRITICAL_SECTION use, which allows us to add
> PTHREAD_MUTEX_INITIALIZER, which will be useful later.
> 
> Windows XP is hereby not a supported build target anymore. It was
> decided in a project vote that this is OK. (Technically, it could still
> be built for Windows XP using an external pthread lib as of this
> commit.)
> 
> Windows Vista adds WSAPoll(), and for some reason struct pollfd. Since
> we raise the Windows API level globally when enabling w32threads, we
> need to move it before configure checks for struct pollfd to avoid that
> the compatibility ifdef mess redefines it.
> ---
> Not sure if there's a better way to do the things configure does.
> ---
>  Changelog                  |   2 +
>  compat/w32pthreads.h       | 269 ++-------------------------------------------
>  configure                  |  93 ++++++++--------
>  libavcodec/pthread_frame.c |   4 -
>  libavcodec/pthread_slice.c |   4 -
>  libavfilter/pthread.c      |   4 -
>  libavutil/slicethread.c    |   4 -
>  7 files changed, 60 insertions(+), 320 deletions(-)

[...]

> --- a/configure
> +++ b/configure
> @@ -2089,7 +2089,6 @@ TOOLCHAIN_FEATURES="
>  "
>  
>  TYPES_LIST="
> -    CONDITION_VARIABLE_Ptr
>      kCMVideoCodecType_HEVC
>      socklen_t
>      struct_addrinfo
> @@ -5163,8 +5162,8 @@ probe_libc(){
>          add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1
>          check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" &&
>              add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700
> -        check_${pfx}cpp_condition windows.h "defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0502" &&
> -            add_${pfx}cppflags -D_WIN32_WINNT=0x0502
> +        check_${pfx}cpp_condition windows.h "defined(_WIN32_WINNT) && _WIN32_WINNT < 0x0600" &&
> +            add_${pfx}cppflags -D_WIN32_WINNT=0x0600

This same check should now also be added to the mingw-w64 part of this
function.
Until now, this was done this way because mingw32 defaults to Win98,
whereas mingw-w64 to WinXP. Now we need Vista in both.

It would be a good idea for that matter to make sure all the required
Vista API is actually supported by Mingw32 3.15, or if we need to bump
that (or just drop mingw32 support, which wouldn't really hurt).

>          eval test \$${pfx_no_}cc_type = "gcc" &&
>              add_${pfx}cppflags -D__printf__=__gnu_printf__
>      elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then
> @@ -5184,14 +5183,14 @@ probe_libc(){
>          # 0x601 by default unless something else is set by the user.
>          # This can easily lead to us detecting functions only present
>          # in such new versions and producing binaries requiring windows 7.0.
> -        # Therefore explicitly set the default to XP unless the user has
> +        # Therefore explicitly set the default to Vista unless the user has
>          # set something else on the command line.
>          # Don't do this if WINAPI_FAMILY is set and is set to a non-desktop
>          # family. For these cases, configure is free to use any functions
>          # found in the SDK headers by default. (Alternatively, we could force
>          # _WIN32_WINNT to 0x0602 in that case.)
>          check_${pfx}cpp_condition stdlib.h "defined(_WIN32_WINNT)" ||
> -            { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0502; }
> +            { check_${pfx}cpp <<EOF && add_${pfx}cppflags -D_WIN32_WINNT=0x0600; }
>  #ifdef WINAPI_FAMILY
>  #include <winapifamily.h>
>  #if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
> @@ -5564,6 +5563,51 @@ check_code cc arm_neon.h "int16x8_t test = vdupq_n_s16(0)" && enable intrinsics_
>  check_ldflags -Wl,--as-needed
>  check_ldflags -Wl,-z,noexecstack
>  
> +if ! disabled w32threads && ! enabled pthreads; then
> +    check_func_headers "windows.h process.h" _beginthreadex &&
> +        check_type "windows.h" CONDITION_VARIABLE &&
> +        enable w32threads || disable w32threads
> +    if ! enabled w32threads && enabled winrt; then
> +        check_func_headers "windows.h" CreateThread &&
> +            enable w32threads || disable w32threads
> +    fi
> +fi
> +
> +if enabled w32threads; then
> +    if check_cpp_condition windows.h "!defined(_WIN32_WINNT) || _WIN32_WINNT < 0x0600" ; then
> +        add_cppflags -D_WIN32_WINNT=0x0600

Win Vista should be forced regardless of w32threads being enabled or
not, so this should be done in probe_libc().

> +    fi
> +fi


More information about the ffmpeg-devel mailing list