From 50f7bdc9745a95caee1121e52f0fb670df8056ce Mon Sep 17 00:00:00 2001 From: Laurent Aimar <fenrir@videolan.org> Date: Sat, 20 Sep 2003 13:50:14 +0000 Subject: [PATCH] * input: added position-offset and time-offset for relative seeking. (Untested) --- src/input/input.c | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/src/input/input.c b/src/input/input.c index 3964e63bc66a..7536a126abbd 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -4,7 +4,7 @@ * decoders. ***************************************************************************** * Copyright (C) 1998-2002 VideoLAN - * $Id: input.c,v 1.241 2003/09/15 18:05:13 fenrir Exp $ + * $Id: input.c,v 1.242 2003/09/20 13:50:14 fenrir Exp $ * * Authors: Christophe Massiot <massiot@via.ecp.fr> * @@ -119,13 +119,15 @@ input_thread_t *__input_CreateThread( vlc_object_t *p_parent, /* play status */ /* position variable */ - var_Create( p_input, "position", VLC_VAR_FLOAT ); /* position 0.0 -> 1.0 */ + var_Create( p_input, "position", VLC_VAR_FLOAT ); /* position 0.0->1.0 */ + var_Create( p_input, "position-offset", VLC_VAR_FLOAT ); /* relative */ val.f_float = 0.0; var_Change( p_input, "position", VLC_VAR_SETVALUE, &val, NULL ); var_AddCallback( p_input, "position", PositionCallback, NULL ); /* time variable */ var_Create( p_input, "time", VLC_VAR_TIME ); + var_Create( p_input, "time-offset", VLC_VAR_TIME ); /* relative */ val.i_time = 0; var_Change( p_input, "time", VLC_VAR_SETVALUE, &val, NULL ); var_AddCallback( p_input, "time", TimeCallback, NULL ); @@ -1189,14 +1191,27 @@ static int PositionCallback( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ) { input_thread_t *p_input = (input_thread_t *)p_this; + int64_t i_offset; msg_Warn( p_input, "cmd=%s old=%f new=%f", psz_cmd, oldval.f_float, newval.f_float ); vlc_mutex_lock( &p_input->stream.stream_lock ); - p_input->stream.p_selected_area->i_seek = - (int64_t)( newval.f_float * (double)p_input->stream.p_selected_area->i_size ); + i_offset = (int64_t)( newval.f_float * + (double)p_input->stream.p_selected_area->i_size ); + if( !strcmp( psz_cmd, "position-offset" ) ) + { + p_input->stream.p_selected_area->i_seek += i_offset; + } + else + { + p_input->stream.p_selected_area->i_seek = i_offset; + } + if( p_input->stream.p_selected_area->i_seek < 0 ) + { + p_input->stream.p_selected_area->i_seek = 0; + } vlc_mutex_unlock( &p_input->stream.stream_lock ); return VLC_SUCCESS; @@ -1206,15 +1221,28 @@ static int TimeCallback ( vlc_object_t *p_this, char const *psz_cmd, vlc_value_t oldval, vlc_value_t newval, void *p_data ) { input_thread_t *p_input = (input_thread_t *)p_this; + int64_t i_offset; /* FIXME TODO FIXME */ msg_Warn( p_input, "cmd=%s old=%lld new=%lld", psz_cmd, oldval.i_time, newval.i_time ); + vlc_mutex_lock( &p_input->stream.stream_lock ); - p_input->stream.p_selected_area->i_seek = - newval.i_time / 1000000 * 50 * p_input->stream.i_mux_rate; + i_offset = newval.i_time / 1000000 * 50 * p_input->stream.i_mux_rate; + if( !strcmp( psz_cmd, "time-offset" ) ) + { + p_input->stream.p_selected_area->i_seek += i_offset; + } + else + { + p_input->stream.p_selected_area->i_seek = i_offset; + } + if( p_input->stream.p_selected_area->i_seek < 0 ) + { + p_input->stream.p_selected_area->i_seek = 0; + } vlc_mutex_unlock( &p_input->stream.stream_lock ); return VLC_SUCCESS; -- GitLab