[vlc-commits] chromecast: yield input_thread while waiting for the CC
Thomas Guillem
git at videolan.org
Wed Feb 7 23:45:44 CET 2018
vlc/vlc-3.0 | branch: master | Thomas Guillem <thomas at gllm.fr> | Wed Feb 7 11:42:00 2018 +0100| [e3b718c3774301cffc2aa5df661cc47aa290a75b] | committer: Jean-Baptiste Kempf
chromecast: yield input_thread while waiting for the CC
(cherry picked from commit eb3cd5c8f673e908e9272efa06b5a8d249f53577)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>
> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=e3b718c3774301cffc2aa5df661cc47aa290a75b
---
modules/stream_out/chromecast/chromecast.h | 4 ++--
modules/stream_out/chromecast/chromecast_common.h | 2 +-
modules/stream_out/chromecast/chromecast_ctrl.cpp | 16 ++++++++++------
modules/stream_out/chromecast/chromecast_demux.cpp | 7 ++++++-
4 files changed, 19 insertions(+), 10 deletions(-)
diff --git a/modules/stream_out/chromecast/chromecast.h b/modules/stream_out/chromecast/chromecast.h
index d220171bcc..3a66a0234f 100644
--- a/modules/stream_out/chromecast/chromecast.h
+++ b/modules/stream_out/chromecast/chromecast.h
@@ -176,7 +176,7 @@ struct intf_sys_t
States state() const;
void setPacing(bool do_pace);
- void pace();
+ bool pace();
int httpd_file_fill( uint8_t *psz_request, uint8_t **pp_data, int *pi_data );
void interrupt_wake_up();
@@ -220,7 +220,7 @@ private:
static double get_position(void*);
static void set_initial_time( void*, mtime_t time );
- static void pace(void*);
+ static bool pace(void*);
static void set_on_paused_changed_cb(void *, on_paused_changed_itf, void *);
static void set_pause_state(void*, bool paused);
diff --git a/modules/stream_out/chromecast/chromecast_common.h b/modules/stream_out/chromecast/chromecast_common.h
index 4e47c86f7b..050752fb46 100644
--- a/modules/stream_out/chromecast/chromecast_common.h
+++ b/modules/stream_out/chromecast/chromecast_common.h
@@ -46,7 +46,7 @@ typedef struct
double (*pf_get_position)(void*);
void (*pf_set_initial_time)( void*, mtime_t time );
- void (*pf_pace)(void*);
+ bool (*pf_pace)(void*);
void (*pf_set_pause_state)(void*, bool paused);
diff --git a/modules/stream_out/chromecast/chromecast_ctrl.cpp b/modules/stream_out/chromecast/chromecast_ctrl.cpp
index bc2ac2026e..3762853b0e 100644
--- a/modules/stream_out/chromecast/chromecast_ctrl.cpp
+++ b/modules/stream_out/chromecast/chromecast_ctrl.cpp
@@ -375,18 +375,22 @@ void intf_sys_t::interrupt_wake_up()
vlc_cond_signal( &m_pace_cond );
}
-void intf_sys_t::pace()
+bool intf_sys_t::pace()
{
vlc_mutex_locker locker(&m_lock);
if( !m_pace )
- return;
+ return true;
m_interrupted = false;
vlc_interrupt_register( interrupt_wake_up_cb, this );
- while( m_pace && !m_interrupted )
- vlc_cond_wait( &m_pace_cond, &m_lock );
+ int ret = 0;
+ mtime_t deadline = mdate() + INT64_C(500000);
+ while( m_pace && !m_interrupted && ret == 0 )
+ ret = vlc_cond_timedwait( &m_pace_cond, &m_lock, deadline );
vlc_interrupt_unregister();
+
+ return ret == 0;
}
/**
@@ -1064,10 +1068,10 @@ void intf_sys_t::set_length(void *pt, mtime_t length)
p_this->m_length = length;
}
-void intf_sys_t::pace(void *pt)
+bool intf_sys_t::pace(void *pt)
{
intf_sys_t *p_this = static_cast<intf_sys_t*>(pt);
- p_this->pace();
+ return p_this->pace();
}
void intf_sys_t::set_pause_state(void *pt, bool paused)
diff --git a/modules/stream_out/chromecast/chromecast_demux.cpp b/modules/stream_out/chromecast/chromecast_demux.cpp
index bad4edd8ae..64c93bed7f 100644
--- a/modules/stream_out/chromecast/chromecast_demux.cpp
+++ b/modules/stream_out/chromecast/chromecast_demux.cpp
@@ -171,7 +171,12 @@ struct demux_sys_t
if ( !m_enabled )
return demux_Demux( p_demux->p_next );
- p_renderer->pf_pace( p_renderer->p_opaque );
+ if( !p_renderer->pf_pace( p_renderer->p_opaque ) )
+ {
+ // Still pacing, but we return now in order to let the input thread
+ // do some controls.
+ return VLC_DEMUXER_SUCCESS;
+ }
if( m_startTime == VLC_TS_INVALID )
{
More information about the vlc-commits
mailing list