Rémi Duraffort [Thu, 11 Feb 2010 09:08:22 +0000 (10:08 +0100)]
Add all bindings as a submodule of the main vlc git tree.
Some basic information about git submodule:
* by default the submodules are not clone
* by default the url for the submodules are git:// and not ssh://, the
developpers must change this (just uncomment the right line in .gitmodules)
to be able to commit to the bindings.
Git commandes:
* git submodule init => intialize the submodules
* git submodule status => status of the submodules
* git submodule update => update all submodules
Jean-Paul Saman [Fri, 5 Feb 2010 13:13:29 +0000 (14:13 +0100)]
libvlc: add mouse events as libvlc_MediaPlayerEvents
The following events have been added:
- MouseButton : mouse button pressed events
- MouseClick : mouse button click event
- MouseMoved : mouse movement event (x,y) absolute against vlc video output window
- MouseObject : object of interest under mouse button for use by video filters (like: logo)
We must delete from the head to the tail, the opposite of the creation
order. This stems from the fact that an stream output object "sees" the
next element, and may try to use it while being deleted.
The crash was easily reproducible with:
vlc --sout-keep --sout '#duplicate{dst=gather:std{mux=ts,dst=/dev/null}}' \
-I oldrc -vv raw_es.mp2
If we just set "fullscreen" on the emitting video output, the fullscreen
mode will not survive a change of video output.
With this hack, the hotkeys interface can handle the request correctly.
On the other hand, the hotkeys can also handle it incorrectly (e.g. if
inside LibVLC). It all comes down to the fact that key actions are per
instance, when most of them should be per-input.
Keep the authoritative fullscreen status on the playlist
This allows the value to be inherited most cleanly across inputs (if
the video output cannot be recycled anyway). This also enables changing
the fullscreen status in absence of video, just like LibVLC does.
"fullscreen" callback: do nothing if value is unchanged
The old video output core assumes that the fullscreen state must be
toggled if the VOUT_FULLSCREEN_CHANGE bit is set. So we need to check
that the target state is not already correct, as the VLC variables core
does NOT do it internally. This commit provides rare exception to the
rule that oldval is useless.
This fixes a whole class of race conditions where two threads try to
change fullscreen status at the same time.
In the video filter case, we now enable fullscreen on all childrens, not
just one. This seems a bit more logical for wall. Without this, toggling
fullscreen would only ever work on the first video output. With this,
things should work great if the different pieces of the wall are on
different video ports, and OK (Alt+Tab is your friend) otherwise.
Do not propagate fullscreen status up the filter chain
This is fundamentally a lock inversion between the parent and child
object variables locks. Interfaces (hotkeys and others) use downward
propagation, so we keep that direction and remove the other direction.
"fullscreen" callback: do nothing if value is unchanged
The old video output core assumes that the fullscreen state must be
toggled if the VOUT_FULLSCREEN_CHANGE bit is set. So we need to check
that the target state is not already correct, as the VLC variables core
does NOT do it internally. This commit provides rare exception to the
rule that oldval is useless.
This fixes a whole class of race conditions where two threads try to
change fullscreen status at the same time.
In the video filter case, we now enable fullscreen on all childrens, not
just one. This seems a bit more logical for wall. Without this, toggling
fullscreen would only ever work on the first video output. With this,
things should work great if the different pieces of the wall are on
different video ports, and OK (Alt+Tab is your friend) otherwise.
Jakob Leben [Wed, 10 Feb 2010 01:30:12 +0000 (02:30 +0100)]
services_discovery: fix embedding longname in name, take 2
The longname argument to macro #define VLC_SD_PROBE_HELPER(name, longname, cat)
is usually in the form like N_("some_longname"). Literalization of the argument by
doing # longname in the macro will result in a literal "N_(\"some_longname\")"
instead of translating the long name.
Remove pl_Release, and rename pl_Hold back to pl_Get
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.
No need to lock the playlist for meta fetch and preparsing
The previous fix made the fetcher and preparser persistent throughout
the lifetime of the playlist. So we don't need to protect the pointers
anymore. Also, they are internally thread-safe (with their own lock).
They do not create threads anymore (unless they have work to do).
LibVLC needs this because we are sloppy programmers^W^W^W^Wit still
depends on the playlist for item meta infos (it should probably
instantiate the fetcher and preparser directly).
Also, do not create the preparser if there is no fetcher.
Jakob Leben [Tue, 9 Feb 2010 14:56:34 +0000 (15:56 +0100)]
input_item: post individual subitems later when posting the whole tree
This makes the interface more comprehensible and allows for
input_item_node_Append[x] functions to be used for general node manipulation
without side effects, if needed in future.