vlc | branch: master | Filip Roséen <[email protected]> | Thu Jul 19 19:30:45 2018 +0200| [8c9b0069967a3e36372b940d0e5a6da397ab350c] | committer: Thomas Guillem
demux: mkv: use new event handling for actions > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=8c9b0069967a3e36372b940d0e5a6da397ab350c --- modules/demux/mkv/events.cpp | 29 ++++++++++++++--------------- modules/demux/mkv/events.hpp | 14 ++++++++++++-- 2 files changed, 26 insertions(+), 17 deletions(-) diff --git a/modules/demux/mkv/events.cpp b/modules/demux/mkv/events.cpp index 015cdf0115..776c42f817 100644 --- a/modules/demux/mkv/events.cpp +++ b/modules/demux/mkv/events.cpp @@ -110,11 +110,13 @@ void event_thread_t::EventMouse( vlc_mouse_t const* new_state, void* userdata ) int event_thread_t::EventKey( vlc_object_t *p_this, char const *, vlc_value_t, vlc_value_t newval, void *p_data ) { - event_thread_t *p_ev = (event_thread_t *) p_data; - vlc_mutex_lock( &p_ev->lock ); - p_ev->i_key_action = newval.i_int; - vlc_cond_signal( &p_ev->wait ); - vlc_mutex_unlock( &p_ev->lock ); + event_thread_t* owner = static_cast<event_thread_t*>( p_data ); + vlc_mutex_locker lock_guard( &owner->lock ); + + owner->pending_events.push_back( + EventInfo( static_cast<vlc_action_id_t>( newval.i_int ) ) ); + + vlc_cond_signal( &owner->wait ); msg_Dbg( p_this, "Event Key"); return VLC_SUCCESS; @@ -124,8 +126,6 @@ void event_thread_t::EventThread() { int canc = vlc_savecancel (); - i_key_action = 0; - /* catch all key event */ var_AddCallback( p_demux->obj.libvlc, "key-action", EventKey, this ); @@ -133,7 +133,7 @@ void event_thread_t::EventThread() for( ;; ) { vlc_mutex_lock( &lock ); - while( !b_abort && !i_key_action && pending_events.empty() ) + while( !b_abort && pending_events.empty() ) vlc_cond_wait( &wait, &lock ); if( b_abort ) @@ -142,10 +142,6 @@ void event_thread_t::EventThread() break; } - /* KEY part */ - if( i_key_action ) - HandleKeyEvent(); - while( !pending_events.empty() ) { EventInfo const& ev = pending_events.front(); @@ -155,6 +151,10 @@ void event_thread_t::EventThread() case EventInfo::ESMouseEvent: HandleMouseEvent( ev ); break; + + case EventInfo::ActionEvent: + HandleKeyEvent( ev ); + break; } pending_events.pop_front(); @@ -173,7 +173,7 @@ void *event_thread_t::EventThread(void *data) return NULL; } -void event_thread_t::HandleKeyEvent() +void event_thread_t::HandleKeyEvent( EventInfo const& ev ) { msg_Dbg( p_demux, "Handle Key Event"); @@ -182,7 +182,7 @@ void event_thread_t::HandleKeyEvent() uint16 i_curr_button = p_sys->dvd_interpretor.GetSPRM( 0x88 ); - switch( i_key_action ) + switch( ev.action.id ) { case ACTIONID_NAV_LEFT: if ( i_curr_button > 0 && i_curr_button <= pci->hli.hl_gi.btn_ns ) @@ -294,7 +294,6 @@ void event_thread_t::HandleKeyEvent() default: break; } - i_key_action = 0; } void event_thread_t::HandleMouseEvent( EventInfo const& event ) diff --git a/modules/demux/mkv/events.hpp b/modules/demux/mkv/events.hpp index 2800d0f09d..b30fae8cf7 100644 --- a/modules/demux/mkv/events.hpp +++ b/modules/demux/mkv/events.hpp @@ -27,6 +27,7 @@ #include <vlc_common.h> #include <vlc_threads.h> +#include <vlc_actions.h> #include <vlc_mouse.h> #include "dvd_types.hpp" @@ -81,12 +82,22 @@ private: mouse.state_new = state_new; } + EventInfo( vlc_action_id_t id ) + : type( ActionEvent ) + { + action.id = id; + } + union { struct { ESInfo* es_info; vlc_mouse_t state_old; vlc_mouse_t state_new; } mouse; + + struct { + vlc_action_id_t id; + } action; }; }; @@ -96,7 +107,7 @@ private: static void EventMouse( vlc_mouse_t const* state, void* userdata ); static int EventKey( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * ); - void HandleKeyEvent(); + void HandleKeyEvent( EventInfo const& ); void HandleMouseEvent( EventInfo const& ); demux_t *p_demux; @@ -107,7 +118,6 @@ private: vlc_mutex_t lock; vlc_cond_t wait; bool b_abort; - int i_key_action; pci_t pci_packet; typedef std::list<ESInfo> es_list_t; _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
