From 9f1c2185529eec1eb422acd60800c6bca8d66983 Mon Sep 17 00:00:00 2001 From: Arnaud Vallat Date: Fri, 10 Sep 2010 08:47:10 +0200 Subject: [PATCH] Extend libvlc Media Player API for DVD menu navigation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémi Denis-Courmont --- include/vlc/libvlc_media_player.h | 22 ++++++++++++++++++- src/control/media_player.c | 35 +++++++++++++++++++++++++++++++ src/libvlc.sym | 1 + 3 files changed, 57 insertions(+), 1 deletion(-) diff --git a/include/vlc/libvlc_media_player.h b/include/vlc/libvlc_media_player.h index d328e511ba..e8fe7a7a97 100644 --- a/include/vlc/libvlc_media_player.h +++ b/include/vlc/libvlc_media_player.h @@ -95,6 +95,18 @@ typedef enum libvlc_video_marquee_option_t { libvlc_marquee_Y } 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 * @@ -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 328a7e40cf..3789ddf90a 100644 --- a/src/control/media_player.c +++ b/src/control/media_player.c @@ -34,6 +34,7 @@ #include #include #include +#include #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 afaf90108f..f635a689fb 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 -- 2.39.5