Interfaces do not have an event handler that would justify the
separation. Indeed, no caller did anything in-between.
Also, the "primary" reference to the interface object belongs to the
main thread because of the libvlc cleanup procedure. Therefore, the
interface thread pointer really should not be returned to the creator.
Note that this does not really fix the small race condition but it
conceals it within intf_Create() and libvlc_InternalCleanup().
While reading this, you will find a bunch of:
while (find (VLC_OBJECT_INTERFACE))
release; release;
These are of course plain BUGS (which are neither introduced nor fixed
by this commit). Imagine, for instance, what happens if two threads run
the code above at the same time... they end up releasing the interface
once too many.
Missing some cases that I could not test.
Also ffmpeg/chroma.c is locked, so I can but leave it broken.
Fix is for the remaining modules is obvious and the issue is easy to detect.
* Headers in include must contain the structures and prototypes needed
by the plugins and should be named vlc_*.
* Headers in include/vlc must contain the structures and prototypes
needed by external libvlc clients
* Moved and renamed some things in headers.
- Removed vlc_cpu.h, vlc_error.h (merged in vlc_common)
- Removed snapshot.h (merged in vlc_vout.h)
- Removed vlc_spu.h (merged in vlc_osd.h)
- Removed intf_eject.h and vlc_interaction.h (merged in vlc_interface)
- Moved all internal headers to src
- Merged vlc_video.h and video_output.h and move private things to src
- Removed vlc/intf.h, vlc/aout.h, vlc/vout.h, vlc/decoder.h and vlc/input.h
(meta headers for use in modules, and often implying too large
dependencies)
* Removed some useless dependencies
* Unexported a bunch of functions and structures used only in src/
(--> Still some work here)
* Finally made input_thread_t and input_source_t (mostly) private.
Added input_GetItem to fetch the input_item of an input_thread
* Cleaned up deprecated entries in vlc_symbols.h and bumped up symbol
prefix
This commit has a 99% probability of breaking the build, 0.1% of killing
your cat and 0% of getting you hot chicks.
Also, make it clearer what is shared and instance-specific
So,
libvlc_t ==> libvlc_global_t
vlc_t ==> libvlc_int_t (internal instance)
p_object->p_libvlc ==> p_object->p_libvlc_globale
p_object->p_vlc ==> p_object->p_libvlc
VLC_OBJECT_VLC ==> VLC_OBJECT_LIBVLC
And by the way, there is some cleanup required :) (ie, some things are created in the global object instead of the instance-specific one)
* Each module can declare a "human-readable short name" with set_name
* Modules are sorted by category (set_category, set_subcategory).
Modules configs can be separated by set_section()
* Separated audio-filter and audio-visual
* Separated extraintf and control
* New command and widget : add_module_list() for comma-separated modules
* Vfilters now use "," as separator