[vlc-devel] [PATCH 5/5] mkv: use DEMUX_VOUT_CHANGED control to get vouts
Thomas Guillem
thomas at gllm.fr
Fri Jul 13 11:34:41 CEST 2018
Remove one other dependency to "intf-event".
---
modules/demux/mkv/demux.cpp | 57 +++++++++++++------------------------
modules/demux/mkv/demux.hpp | 4 +--
modules/demux/mkv/mkv.cpp | 5 ++++
3 files changed, 27 insertions(+), 39 deletions(-)
diff --git a/modules/demux/mkv/demux.cpp b/modules/demux/mkv/demux.cpp
index 4e39af0078..13dcfe534a 100644
--- a/modules/demux/mkv/demux.cpp
+++ b/modules/demux/mkv/demux.cpp
@@ -31,7 +31,7 @@
namespace mkv {
-event_thread_t::event_thread_t(demux_t *p_demux) : p_demux(p_demux)
+event_thread_t::event_thread_t(demux_t *p_demux) : p_demux(p_demux), vout(NULL)
{
vlc_mutex_init( &lock );
vlc_cond_init( &wait );
@@ -41,6 +41,12 @@ event_thread_t::event_thread_t(demux_t *p_demux) : p_demux(p_demux)
event_thread_t::~event_thread_t()
{
ResetPci();
+ if( vout )
+ {
+ var_DelCallback( vout, "mouse-moved", EventMouse, this );
+ var_DelCallback( vout, "mouse-clicked", EventMouse, this );
+ vlc_object_release( vout );
+ }
vlc_cond_destroy( &wait );
vlc_mutex_destroy( &lock );
}
@@ -120,20 +126,21 @@ int event_thread_t::EventKey( vlc_object_t *p_this, char const *,
return VLC_SUCCESS;
}
-int event_thread_t::EventInput( vlc_object_t *p_this, char const *,
- vlc_value_t, vlc_value_t newval, void *p_data )
+void event_thread_t::voutChanged(vout_thread_t **vouts, size_t vout_count)
{
- VLC_UNUSED( p_this );
- event_thread_t *p_ev = (event_thread_t *) p_data;
- vlc_mutex_lock( &p_ev->lock );
- if( newval.i_int == INPUT_EVENT_VOUT )
+ if( vout )
{
- p_ev->b_vout |= true;
- vlc_cond_signal( &p_ev->wait );
+ var_DelCallback( vout, "mouse-moved", EventMouse, this );
+ var_DelCallback( vout, "mouse-clicked", EventMouse, this );
+ vlc_object_release( vout );
+ }
+ vout = vout_count > 0 ? vouts[0] : NULL;
+ if( vout )
+ {
+ vlc_object_hold( vout );
+ var_AddCallback( vout, "mouse-moved", EventMouse, this );
+ var_AddCallback( vout, "mouse-clicked", EventMouse, this );
}
- vlc_mutex_unlock( &p_ev->lock );
-
- return VLC_SUCCESS;
}
void event_thread_t::EventThread()
@@ -145,18 +152,15 @@ void event_thread_t::EventThread()
b_moved = false;
b_clicked = false;
i_key_action = 0;
- b_vout = true;
/* catch all key event */
var_AddCallback( p_demux->obj.libvlc, "key-action", EventKey, this );
- /* catch input event */
- var_AddCallback( p_demux->p_input, "intf-event", EventInput, this );
/* main loop */
for( ;; )
{
vlc_mutex_lock( &lock );
- while( !b_abort && !i_key_action && !b_moved && !b_clicked && !b_vout)
+ while( !b_abort && !i_key_action && !b_moved && !b_clicked)
vlc_cond_wait( &wait, &lock );
if( b_abort )
@@ -395,30 +399,9 @@ void event_thread_t::EventThread()
b_moved = false;
b_clicked = false;
}
-
- b_vout = false;
vlc_mutex_unlock( &lock );
-
- /* Always check vout */
- if( p_vout == NULL )
- {
- p_vout = (vlc_object_t*) input_GetVout(p_demux->p_input);
- if( p_vout)
- {
- var_AddCallback( p_vout, "mouse-moved", EventMouse, this );
- var_AddCallback( p_vout, "mouse-clicked", EventMouse, this );
- }
- }
}
- /* Release callback */
- if( p_vout )
- {
- var_DelCallback( p_vout, "mouse-moved", EventMouse, this );
- var_DelCallback( p_vout, "mouse-clicked", EventMouse, this );
- vlc_object_release( p_vout );
- }
- var_DelCallback( p_demux->p_input, "intf-event", EventInput, this );
var_DelCallback( p_demux->obj.libvlc, "key-action", EventKey, this );
vlc_restorecancel (canc);
diff --git a/modules/demux/mkv/demux.hpp b/modules/demux/mkv/demux.hpp
index 79f15b5f83..a465e0438e 100644
--- a/modules/demux/mkv/demux.hpp
+++ b/modules/demux/mkv/demux.hpp
@@ -303,6 +303,7 @@ public:
void SetPci(const pci_t *data);
void ResetPci();
+ void voutChanged(vout_thread_t **, size_t);
private:
void EventThread();
@@ -310,12 +311,12 @@ private:
static int EventMouse( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * );
static int EventKey( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * );
- static int EventInput( vlc_object_t *, char const *, vlc_value_t, vlc_value_t, void * );
demux_t *p_demux;
bool is_running;
vlc_thread_t thread;
+ vout_thread_t *vout;
vlc_mutex_t lock;
vlc_cond_t wait;
@@ -323,7 +324,6 @@ private:
bool b_moved;
bool b_clicked;
int i_key_action;
- bool b_vout;
pci_t pci_packet;
};
diff --git a/modules/demux/mkv/mkv.cpp b/modules/demux/mkv/mkv.cpp
index af6554dcb2..432acb4a96 100644
--- a/modules/demux/mkv/mkv.cpp
+++ b/modules/demux/mkv/mkv.cpp
@@ -465,6 +465,11 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
case DEMUX_GET_PTS_DELAY:
return demux_vaControlHelper( p_demux->s, 0, -1, 0, 1, i_query, args );
+ case DEMUX_VOUT_CHANGED:
+ p_sys->p_ev->voutChanged( va_arg( args, vout_thread_t** ),
+ va_arg( args, size_t ) );
+ break;
+
default:
return VLC_EGENERIC;
}
--
2.18.0
More information about the vlc-devel
mailing list