[vlc-devel] [RFC PATCH 06/10] sout: Add time/pos/pause controls
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Thu Sep 7 15:46:02 CEST 2017
---
include/vlc_sout.h | 7 ++++-
src/stream_output/stream_output.c | 66 +++++++++++++++++++++++++++++++++++++++
src/stream_output/stream_output.h | 6 ++++
3 files changed, 78 insertions(+), 1 deletion(-)
diff --git a/include/vlc_sout.h b/include/vlc_sout.h
index c710780e2e..38ac269303 100644
--- a/include/vlc_sout.h
+++ b/include/vlc_sout.h
@@ -191,7 +191,12 @@ static inline int sout_MuxControl( sout_mux_t *p_mux, int i_query, ... )
/** @} */
enum sout_stream_query_e {
- SOUT_STREAM_EMPTY, /* arg1=bool *, res=can fail (assume true) */
+ SOUT_STREAM_EMPTY, /* arg1=bool *, res=can fail (assume true) */
+ SOUT_STREAM_GET_TIME, /* arg1=mtime_t* res=can fail */
+ SOUT_STREAM_SET_TIME, /* arg1=mtime_t res=can fail */
+ SOUT_STREAM_GET_POSITION, /* arg1=float* res=can fail */
+ SOUT_STREAM_SET_POSITION, /* arg1=float res=can fail */
+ SOUT_STREAM_SET_PAUSE_STATE /* arg1=bool res=can fail */
};
struct sout_stream_t
diff --git a/src/stream_output/stream_output.c b/src/stream_output/stream_output.c
index a30e66852c..89f7503eee 100644
--- a/src/stream_output/stream_output.c
+++ b/src/stream_output/stream_output.c
@@ -150,6 +150,72 @@ void sout_DeleteInstance( sout_instance_t * p_sout )
vlc_object_release( p_sout );
}
+int sout_InstanceGetTime( sout_instance_t* p_sout, mtime_t* pi_time )
+{
+ if( !p_sout )
+ return VLC_EGENERIC;
+
+ int i_res;
+ vlc_mutex_lock( &p_sout->lock );
+ i_res = sout_StreamControl( p_sout->p_stream,
+ SOUT_STREAM_GET_TIME, pi_time );
+ vlc_mutex_unlock( &p_sout->lock );
+ return i_res;
+}
+
+int sout_InstanceSetTime( sout_instance_t* p_sout, mtime_t i_time )
+{
+ if( !p_sout )
+ return VLC_EGENERIC;
+
+ int i_res;
+ vlc_mutex_lock( &p_sout->lock );
+ i_res = sout_StreamControl( p_sout->p_stream,
+ SOUT_STREAM_SET_TIME, i_time );
+ vlc_mutex_unlock( &p_sout->lock );
+ return i_res;
+}
+
+int sout_InstanceGetPosition( sout_instance_t* p_sout, double* pf_pos )
+{
+ if( !p_sout )
+ return VLC_EGENERIC;
+
+ int i_res;
+ vlc_mutex_lock( &p_sout->lock );
+ i_res = sout_StreamControl( p_sout->p_stream,
+ SOUT_STREAM_GET_POSITION, pf_pos );
+ vlc_mutex_unlock( &p_sout->lock );
+ return i_res;
+}
+
+int sout_InstanceSetPosition( sout_instance_t* p_sout, double f_pos )
+{
+ if( !p_sout )
+ return VLC_EGENERIC;
+
+ int i_res;
+ vlc_mutex_lock( &p_sout->lock );
+ if( p_sout->p_stream )
+ i_res = sout_StreamControl( p_sout->p_stream,
+ SOUT_STREAM_SET_POSITION, f_pos );
+ vlc_mutex_unlock( &p_sout->lock );
+ return i_res;
+}
+
+int sout_InstanceSetPauseState( sout_instance_t* p_sout, bool b_state )
+{
+ if( !p_sout )
+ return VLC_EGENERIC;
+
+ int i_res = VLC_EGENERIC;
+ vlc_mutex_lock( &p_sout->lock );
+ i_res = sout_StreamControl( p_sout->p_stream,
+ SOUT_STREAM_SET_PAUSE_STATE, b_state );
+ vlc_mutex_unlock( &p_sout->lock );
+ return i_res;
+}
+
/*****************************************************************************
* Packetizer/Input
*****************************************************************************/
diff --git a/src/stream_output/stream_output.h b/src/stream_output/stream_output.h
index c7ff95269d..24187a179a 100644
--- a/src/stream_output/stream_output.h
+++ b/src/stream_output/stream_output.h
@@ -44,6 +44,12 @@ sout_instance_t *sout_NewInstance( vlc_object_t *, const char * );
#define sout_NewInstance(a,b) sout_NewInstance(VLC_OBJECT(a),b)
void sout_DeleteInstance( sout_instance_t * );
+int sout_InstanceGetTime( sout_instance_t*, mtime_t* );
+int sout_InstanceSetTime( sout_instance_t*, mtime_t );
+int sout_InstanceGetPosition( sout_instance_t*, double* );
+int sout_InstanceSetPosition( sout_instance_t*, double );
+int sout_InstanceSetPauseState( sout_instance_t*, bool );
+
sout_packetizer_input_t *sout_InputNew( sout_instance_t *, const es_format_t * );
int sout_InputDelete( sout_packetizer_input_t * );
int sout_InputSendBuffer( sout_packetizer_input_t *, block_t* );
--
2.11.0
More information about the vlc-devel
mailing list