[vlc-devel] [RFC PATCH 07/10] input: Query a potential stream output for its time/pos
Hugo Beauzée-Luyssen
hugo at beauzee.fr
Thu Sep 7 15:46:03 CEST 2017
Also forward pause request
---
src/input/input.c | 13 +++++++++++--
src/input/var.c | 2 ++
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/src/input/input.c b/src/input/input.c
index 956d441982..924fcf6e45 100644
--- a/src/input/input.c
+++ b/src/input/input.c
@@ -43,6 +43,7 @@
#include "item.h"
#include "resource.h"
#include "stream.h"
+#include "stream_output/stream_output.h"
#include <vlc_aout.h>
#include <vlc_sout.h>
@@ -652,13 +653,16 @@ static void MainLoopStatistics( input_thread_t *p_input )
double f_position = 0.0;
mtime_t i_time = 0;
mtime_t i_length = 0;
+ sout_instance_t *p_sout = input_priv(p_input)->p_sout;
/* update input status variables */
- if( demux_Control( input_priv(p_input)->master->p_demux,
+ if( sout_InstanceGetPosition( p_sout, &f_position ) &&
+ demux_Control( input_priv(p_input)->master->p_demux,
DEMUX_GET_POSITION, &f_position ) )
f_position = 0.0;
- if( demux_Control( input_priv(p_input)->master->p_demux,
+ if( sout_InstanceGetTime( p_sout, &i_time ) &&
+ demux_Control( input_priv(p_input)->master->p_demux,
DEMUX_GET_TIME, &i_time ) )
i_time = 0;
input_priv(p_input)->i_time = i_time;
@@ -1732,6 +1736,8 @@ static void ControlPause( input_thread_t *p_input, mtime_t i_control_date )
return;
}
+ sout_InstanceSetPauseState( input_priv(p_input)->p_sout, true );
+
/* Switch to new state */
input_ChangeState( p_input, i_state );
}
@@ -1753,6 +1759,7 @@ static void ControlUnpause( input_thread_t *p_input, mtime_t i_control_date )
/* Switch to play */
input_ChangeState( p_input, PLAYING_S );
es_out_SetPauseState( input_priv(p_input)->p_es_out, false, false, i_control_date );
+ sout_InstanceSetPauseState( input_priv(p_input)->p_sout, false );
}
static void ViewpointApply( input_thread_t *p_input )
@@ -1950,6 +1957,8 @@ static bool Control( input_thread_t *p_input,
/* Reset the decoders states and clock sync (before calling the demuxer */
es_out_SetTime( input_priv(p_input)->p_es_out, -1 );
+ sout_InstanceSetTime( input_priv(p_input)->p_sout, i_time );
+
i_ret = demux_Control( input_priv(p_input)->master->p_demux,
DEMUX_SET_TIME, i_time,
!input_priv(p_input)->b_fast_seek );
diff --git a/src/input/var.c b/src/input/var.c
index f41dac5e9e..cecc756cbe 100644
--- a/src/input/var.c
+++ b/src/input/var.c
@@ -29,6 +29,7 @@
#endif
#include <vlc_common.h>
+#include "stream_output/stream_output.h"
#include <assert.h>
#include <math.h>
#include <stdio.h>
@@ -609,6 +610,7 @@ static int PositionCallback( vlc_object_t *p_this, char const *psz_cmd,
val.i_int = i_length * newval.f_float;
var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL );
}
+ sout_InstanceSetPosition( input_priv(p_input)->p_sout, newval.f_float );
input_ControlPush( p_input, INPUT_CONTROL_SET_POSITION, &newval );
return VLC_SUCCESS;
--
2.11.0
More information about the vlc-devel
mailing list