Now that we use winpthreads, configure finds clock_nanosleep there,
causing -pthread to be added to the libvlccore requirement, while we
don't use it for win32.
fixed patch with the duplicate "#if defined ..." removed
Janne
---8<---
Some toolchains predefine _FORTIFY_SOURCE resulting in countless
_FORTIFY_SOURCE is redefined warnings. Using _FORTIFY_SOURCE without
compiler optimizations also generates warnings.
_FORTIFY_SOURCE is a reserved identifier in C99 ("All identifiers that
begin with an underscore and either an uppercase letter or another
underscore are always reserved for any use.") so the toolchain is
perfectly free to predefine it.
Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
This brings the modern (well, at least current) X11 rendering protocol
for video output (refs #12348).
Compared to plain X11, it can handle scaling and orientation.
Compared to XVideo, it can handle orientation, and can crop correctly
(without bleeding), but it expects packed RGB rather than YCbCr.
Also RENDER would be able to handle SPU blending (and SPU scaling),
though this is left for future work, which neither X11 nor XVideo can.
This should sort properly on Windows and any other platform without
qsort_r(). It does _not_ fix any potential issues on any platforms with
an incompatible qsort_r() prototype (such as FreeBSD < 13).
It is using the picture callback API so there's is no copy on output of the decoder.
Co-authored-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
Co-authored-by: Steve Lhomme <robux4@ycbcr.xyz>
This uses libplacebo's rendering helpers for all video output, on top of
the vulkan graphics API. Some notes:
- The existing fourcc/chroma helpers don't really line up with what the
libplacebo API expects, or in some cases return values that just don't
seem to make sense. I was advised against touching them for fear of
breaking the rest of VLC - so we add our own helpers that give us the
information in the format we need for libplacebo.
- Not all libplacebo options are mapped. There's no ability to create
custom filter functions (which libplacebo/mpv support), and there's
also no support for ICC profiles / 3DLUTs (which libplacebo supports)
nor for the new color blindness simulation parameters in libplacebo
v0.6. We also don't map the VLC brightness/hue/gamma/etc. options to
the libplacebo structs - we could do it for free as part of the video
decode matrix, rather than needing to insert a CPU filter for it.
- How to create the vulkan surface will depend on the platform (much
like in opengl), so we move context, surface and device creation into
a single module (`vulkan/surface.c`) which will be conditionally
compiled depending on the platform in order to provide support for
multiple surfaces side-by-side (e.g. x11 and wayland). This does mean
that the context/device-related options end up being separate per
platform, but OTOH this is not that bad since different platforms
might want different e.g. swapchain modes (an example being wayland,
which can make better use of mailbox rather than fifo).
- libplacebo doesn't have a "configure" step, instead all rendering
parameters are fully dynamic. So we could call UpdateParams() in our
module at any point in time when the config values change.
Unfortunately, there's no easy way for us to find out when this is the
case, so right now changing the vulkan module options requires a
module reinit to take effect. In theory we could change this. (As an
aside: calling var_Inherit* per frame does work to get us the changes
in "realtime", as soon as the user clicks "save", but this may block
for arbitrary amounts of time so I was advised against doing it)
Due to the new functions, structs and enum members used, the minimum
libplacebo version has been bumped up to v0.5.0. In theory we could also
try and support v0.4.0 with some #ifdefs, but v0.5.0 has been out for
several months now so it should be a safe requirement.
The Decklink SDK has platform-specific implementations for various
calls which return strings. Add some portability macros to
properly handle those calls and then normalize the result down to
a C char * as we would typically see in VLC.
Signed-off-by: Devin Heitmueller <dheitmueller@ltnglobal.com>
Add a comment of which version of a required libavcodec corresponds to what libavutil
version. This way we don't need defines for versions we don't support anymore.
Definitions from AH_TOP aren't included in the configure checks.
This was the original intent of e807c8e91.
This makes sure configure checks and actual compilation are run
with the same version defined.
Since e807c8e91, we're explicitly unconditionally defining _WIN32_WINNT,
regardless if it was set before or not.
If it was set before (e.g. on the command line), to a higher version,
we should honor that.
This is cruicial for WinRT building, where _WIN32_WINNT is set to Windows
8 or higher on the command line.
Because libsmb2 doesn't have any netbios name resolver.
Maybe, every VLC services discoveries should use the IP instead of the netbios
name for SMB shares.
Using libsmb2 from Ronnie Sahlberg https://github.com/sahlberg/libsmb2
This is LGPL 2.1 fully async lib for accessing SMB2 and SMB3 shares.
This module use the async feature of the libsmb2 lib with the vlc interrupt
mechanism, therefore every network requests are cancellable almost immediately.
The 2.0.0 version is required since this version drop OpenSSL dependency and
allow to use Builtin NTLMSSP authentication instead of libkrb5.
Add new kernel mode setting video output plugin.
By default it tries to match vlc suggested video mode to anything
kms api offers. There are command line parameters to control
which video format to use for both vlc and for drm.
kms-vlc-chroma parameter to force VLC to use FourCC as output.
kms-drm-chroma parameter to overide DRM requested framebuffer type.
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
This appears to be the official way to get POSIX threads. In practice,
it pre-defines _REENTRANT to 1 and pulls -lpthread.
(This works with both GCC and Clang.)