1. code can be shared between access/srt.c and access_output/srt.c
2. created a URL parser for SRT parameters stored in URL
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
The fun part has been supported by the rotation filter for 7 years.
The serious part should be handled by the GUI and/or the video window,
under control of the operating system or windowing system.
Originally, XVideo was the HAL for video ("2D") overlay.
Nowadays, XVideo is but a backward compatibility wrapper around the 3D
hardware for use by legacy applications (notably GLAMOR provides XVideo
using OpenGL). VLC supports OpenGL well nowadays, so there is no point
in using XVideo.
This is since some time a stream filter and not a demuxer anymore,
therefore this should be named stream_filter to not cause confusion
about that.
Signed-off-by: Rémi Denis-Courmont <remi@remlab.net>
This orders existing files into a new directory structure, to
group related elements together. The Xcode project is adapted
as well and reflects the same structure under macosx.
All includes include the subfolders now and are reordered and
cleaned up. Existing structure and alphabetic ordering shall be
kept.
Add support for casting to a DLNA Media Renderers
implementing the AVTransport service with the
initial support of the default media format.
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
Signed-off-by: Hugo Beauzée-Luyssen <hugo@beauzee.fr>
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 module is a drop-in replacement for the deprecated QTSound module.
QTSound is based on QtKit framework, which is long deprecated and does
not even exist anymore in current SDKs.
It supports the same feature set as QTSound.
closes#20883
This API will replace the usage of input_thread_t from interface modules. The
player implementation continue to use input_thread_t in private. The goal is to
hide the input_thread_t API when every modules are switched to the player API.
TODO (all need to be fixed, for VLC 4.0):
- Gapless: API is complete but not implemented (the player can play several
medias in a row, but without gapless).
- Position callbacks: still using the input_thread_t position that is really
imprecise (notified every 250ms minimum, and sometime more, depending on
pf_demux implementation).
- Seek/discontinuity callbacks: when seeking, the player can still send
position of the requested position, the actual position or the next position
to come. This leads to UI inconsistency.
- OSD messages should be display from input callbacks but it's not possible
now since you can't know if the event come from the user or from the core.
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.
RIST for Reliable Internet Stream Transport (RIST) Protocol.
The implementation follows the Video Services Forum (VSF) Technical
Recommendation TR-06 which defines an ARQ based UDP transmission protocol
for real-time streaming over lossy networks (internet, wifi, etc).
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
RIST for the Reliable Internet Stream Transport Protocol
The implementation follows the Video Services Forum (VSF) Technical
Recommendation TR-06 which defines an ARQ based UDP transmission protocol
for real-time streaming over lossy networks (internet, wifi, etc).
Signed-off-by: Thomas Guillem <thomas@gllm.fr>
There does not appear to be any real user. The "broadcast"
functionality can be reproduced more simply with the LibVLC media
player API. The "VoD" functionality does not make much sense outside of
the VLC executable process.
Removes the long unused Winamp/SHOUTcast directory stream filter for
playlist handling, which was mostly useful together with the service
discovery (modules/services_discovery/shout.c) which is not present
anymore.
The GL/GLES2 plugins doesn't depends anymore on X11, WAYLAND, VAAPI or other
hardware libs.
Move all converters (that were built in GL plugins) in separate plugins, with a
"glconv" plugin capability. This new type of module will be loaded by GL
plugins when a video format is opaque. Otherwise, the built-in software
converter (that handle RGB,YUV,YXZ12) will be used.
Each new converters plugins depends only on hardware libs like VAAPI-X11,
VAAPI-WL. These news plugins don't depend on Open GL / GLES2. Therefore, one
glconv plugin can be used by a GL and a GLES2 plugin.
Fixes#18575
The SDL video output has been forcefully disabled on MacOS X for 12
years. It has also been disabled in Windows builds for over 6 years.
Finally, it has been broken on X11 due to lack of windowing
integration, for several years, cannot be fixed without changes to
the SDL API, and is completely useless.
The DirectFB project has been dead for several years, and is ostensibly
not used. If you really need direct access to the Linux frame buffer,
there is still the raw LinuxFB module for the time being.
As most demuxers cannot handle tags at the beginning of their input
streams, the demuxer code has automatically skipped them for a long
time.
Unfortunately, a number of demuxers also assume that the initial stream
byte offset is zero (while some others seem to assume zero in some paths
and not in others). This seems like a reasonable assumption. And even if
it were not, fixing all affected stream filters and demuxers to perform
only relative seeking seems impractical and unpalatable.
This stream filter shifts the stream byte offset so that the tags are
entirely invisible, and the demuxer can assume the start is at offset 0.
Of couse, the tags must still be accessible to the meta extraction
engine(s). The TagLib plugin uses "low-level" vlc_access_NewMRL() so it
is not subject to stream filters, and not affected by this change.
(This change does however remove tags from "demuxdump".)
NOTE: On the one hand, this also enables demuxing a file format with
embedded absolute file offsets, if the tags were prepended after muxing.
On the other hand, it conversely breaks demuxing such a file format if
the tags are added during muxing. As far as I know, tags are normally
appended rather than prepended to avoid this ambiguity.
This set of "helpers" is only used by the libmpeg2 plugin, and was not
exposed to out-of-tree-plugins. There is apparently no point keeping it
inside the core.
zip extraction is now handled by the libarchive based
modules/stream_extractor/archive.c, as such these files/modules are no
longer needed.
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
rar extraction is now handled by the libarchive based
modules/stream_extractor/archive.c, as such these files/modules are no
longer needed.
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
This provides a very very basic window provider using the unstable XDG
shell protocol version 5. This will be updated later, to unstable
version 6, a higher unstable version or preferably a stable version.
Bonjour is an implementation, trademarked by Apple, of Zeroconf
protocol, which avahi is a (slightly) different implementation.
Zeroconf protocol is mostly mdns + dns-sd
The edge detection filter uses the Sobel operator to detect and highlight
edges in a frame. In order to successfully detect an edge, the image must
first be converted to gray scale (because Sobel is a gray scale operator) and
then have a slight Gaussian blur applied to it. We do this because Sobel is a
noisy operator and the Gaussian blur reduces this noise.
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
This handles deflate encoding or application/zlib type transparently.
(Note though that it fails to check and discard the application/zlib
content-type from the underlying stream.)
This renames the Growl plugin to OS X Notifications to highlight
the new capabilities and to not advertise Growl so much, as
requested.
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
This renames the playlist related class files to match the class name,
which makes it easier to find the which belongs to a certain class and
follows common Cocoa/Obj C file naming conventions.
Signed-off-by: Felix Paul Kühne <fkuehne@videolan.org>
This is the work from Moti Zilberman, modified by me to build and
integrate in-tree
It's heavily inspired on the OS X one.
Be careful: you need a very recent Mingw-W64 to hope to compile it.
Ref #11893