vlc | branch: master | Arnaud Vallat <[email protected]> | Fri Sep 10 08:47:10 2010 +0200| [9f1c2185529eec1eb422acd60800c6bca8d66983] | committer: Rémi Denis-Courmont
Extend libvlc Media Player API for DVD menu navigation Signed-off-by: Rémi Denis-Courmont <[email protected]> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9f1c2185529eec1eb422acd60800c6bca8d66983 --- include/vlc/libvlc_media_player.h | 22 +++++++++++++++++++++- src/control/media_player.c | 35 +++++++++++++++++++++++++++++++++++ src/libvlc.sym | 1 + 3 files changed, 57 insertions(+), 1 deletions(-) diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h index d328e51..e8fe7a7 100644 --- a/include/vlc/libvlc_media_player.h +++ b/include/vlc/libvlc_media_player.h @@ -96,6 +96,18 @@ typedef enum libvlc_video_marquee_option_t { } libvlc_video_marquee_option_t; /** + * Navigation mode + */ +typedef enum libvlc_navigate_mode_t +{ + libvlc_navigate_activate = 0, + libvlc_navigate_up, + libvlc_navigate_down, + libvlc_navigate_left, + libvlc_navigate_right, +} libvlc_navigate_mode_t; + +/** * Create an empty Media Player object * * \param p_libvlc_instance the libvlc instance in which the Media Player @@ -549,7 +561,15 @@ VLC_PUBLIC_API int libvlc_media_player_can_pause( libvlc_media_player_t *p_mi ); */ VLC_PUBLIC_API void libvlc_media_player_next_frame( libvlc_media_player_t *p_mi ); - +/** + * Navigate through DVD Menu + * + * \param p_mi the Media Player + * \param navigate the Navigation mode + * \version libVLC 1.2.0 or later + */ +VLC_PUBLIC_API void libvlc_media_player_navigate( libvlc_media_player_t* p_mi, + unsigned navigate ); /** * Release (free) libvlc_track_description_t diff --git a/src/control/media_player.c b/src/control/media_player.c index 328a7e4..3789ddf 100644 --- a/src/control/media_player.c +++ b/src/control/media_player.c @@ -34,6 +34,7 @@ #include <vlc_demux.h> #include <vlc_input.h> #include <vlc_vout.h> +#include <vlc_keys.h> #include "libvlc.h" @@ -41,6 +42,22 @@ #include "media_internal.h" // libvlc_media_set_state() #include "media_player_internal.h" +/* + * mapping of libvlc_navigate_mode_t to vlc_key_t + */ +static const vlc_key_t libvlc_navigate_to_action[] = + { + ACTIONID_NAV_ACTIVATE, + ACTIONID_NAV_UP, + ACTIONID_NAV_DOWN, + ACTIONID_NAV_LEFT, + ACTIONID_NAV_RIGHT + }; + +static const uint32_t libvlc_navigate_to_action_size = \ + sizeof( libvlc_navigate_to_action ) / sizeof( libvlc_navigate_to_action[0] ); + + static int input_seekable_changed( vlc_object_t * p_this, char const * psz_cmd, vlc_value_t oldval, vlc_value_t newval, @@ -1200,6 +1217,24 @@ int libvlc_media_player_is_seekable( libvlc_media_player_t *p_mi ) return b_seekable; } +void libvlc_media_player_navigate( libvlc_media_player_t* p_mi, + unsigned navigate ) +{ + input_thread_t *p_input_thread; + + if ( navigate > libvlc_navigate_to_action_size) + return; + + p_input_thread = libvlc_get_input_thread ( p_mi ); + if ( !p_input_thread ) + return; + + var_SetInteger( p_mi->p_libvlc_instance->p_libvlc_int, + "key-action", libvlc_navigate_to_action[navigate] ); + + vlc_object_release( p_input_thread ); +} + /* internal function, used by audio, video */ libvlc_track_description_t * libvlc_get_track_description( libvlc_media_player_t *p_mi, diff --git a/src/libvlc.sym b/src/libvlc.sym index afaf901..f635a68 100644 --- a/src/libvlc.sym +++ b/src/libvlc.sym @@ -149,6 +149,7 @@ libvlc_media_player_set_title libvlc_media_player_set_xwindow libvlc_media_player_stop libvlc_media_player_will_play +libvlc_media_player_navigate libvlc_media_release libvlc_media_retain libvlc_media_save_meta _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
