see e967f81f6a.
note, this does **not** affect cat-based module selection items
(of which there are just three in use by the core), since that
mechanism uses subcats not cats.
The config "advanced" flag was unused and has been removed by
6a7a137f7b.
It has been removed from many add_*() macros, but not all. Remove it
from the remaining macros.
Do not declare *_sys_t typedefs globally in vlc_common.h. Instead,
declare them locally in each module that provides a definition.
This paves the way to move C++ definitions into anonymous namespaces in
order to respect C++ ODR.
The picture_resource_t and sout_stream_id_sys_t typedefs will be handled
separately, since they require specific additional changes.
See #18033
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
Some muxes, e.g. MP4, will send multiple header blocks. These are
merged by the HTTP server to a single header which is sent out to
the beginning of each client. However, they are _also_ sent out
directly on the wire to any client that connected before the first
block. In this case, we would send two separate Metacube header
blocks, which would have Cubemap (correctly) discard the first and
set only the second as header.
This would make us send only part of the MP4 header when sending
through Cubemap, if Cubemap connected before the first non-header
block, which would in turn confuse Chrome on Android (although not
Chrome on e.g. Linux). As Cubemap is pretty aggressive about
reconnecting (trying every 200 ms), this could easily happen in practice.
Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
This is an inclusion of a patch that has been living out-of-tree for some time,
but now as Cubemap 1.0.0 has been released and the protocol has been frozen,
it would sound reasonable to get it into mainline.
Essentially it makes the VLC HTTP server support the Metacube protocol, which
is a framing format to let an external reflector know where the start and end
of the blocks are without having to understand the format itself (similar to
how the VLC HTTP server itself gets to know this information). This lets it
serve the correct header block to new clients joining in the middle of the
stream, and makes sure new clients don't start in the middle of a block,
which is a problem for non-self-synchronizing formats (such as FLV and WebM).
It includes self-synchronization and header checksumming to ensure smooth
recovery from overruns in the server-to-reflector TCP stream.
The only consumer of this protocol currently, and for the foreseeable future,
is Cubemap (http://git.sesse.net/?p=cubemap), a scalable video reflector
designed to be used with VLC.
Signed-off-by: Denis Charmet <typx@dinauz.org>
When the mux is capable of marking blocks as containing keyframes
(currently only the avformat mux), start new clients only on such
frames. This makes sure they do not get anything they might not
decode at the beginning of the stream.
This patch completes WebM streaming support.
Signed-off-by: Rafaël Carré <funman@videolan.org>
pl_Hold() assumed the playlist was already created.
pl_Release() does not solve any problem. Playlist synchronization is
done with the playlist lock, while playlist deletion must anyway be done
after all interfaces, services and other threads are joined.