vlc_value_t, vlc_value_t, void * );
static void PlayBookmark( intf_thread_t *, int );
static void SetBookmark ( intf_thread_t *, int );
+static int GetPosition ( intf_thread_t * );
/*****************************************************************************
* Module descriptor
vlc_module_begin();
set_description( _("Hotkeys management interface") );
add_string( "bookmark1", NULL, NULL,
- BOOKMARK1_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK1_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark2", NULL, NULL,
- BOOKMARK2_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK2_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark3", NULL, NULL,
- BOOKMARK3_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK3_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark4", NULL, NULL,
- BOOKMARK4_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK4_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark5", NULL, NULL,
- BOOKMARK5_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK5_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark6", NULL, NULL,
- BOOKMARK6_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK6_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark7", NULL, NULL,
- BOOKMARK7_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK7_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark8", NULL, NULL,
- BOOKMARK8_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK8_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark9", NULL, NULL,
- BOOKMARK9_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+ BOOKMARK9_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
add_string( "bookmark10", NULL, NULL,
- BOOKMARK10_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
-
+ BOOKMARK10_TEXT, BOOKMARK_LONGTEXT, VLC_FALSE );
+
set_capability( "interface", 0 );
set_callbacks( Open, Close );
vlc_module_end();
/* Update the vout */
if( p_vout == NULL )
{
- p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT,
- FIND_ANYWHERE );
+ p_vout = vlc_object_find( p_intf, VLC_OBJECT_VOUT, FIND_ANYWHERE );
p_intf->p_sys->p_vout = p_vout;
}
else if( p_vout->b_die )
{
audio_volume_t i_newvol;
aout_VolumeUp( p_intf, 1, &i_newvol );
- vout_OSDMessage( p_intf, "Vol %d%%", i_newvol*100/AOUT_VOLUME_MAX );
+ if( p_vout )
+ {
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_intf ),
+ i_newvol*100/AOUT_VOLUME_MAX, 1 );
+ }
+ else
+ {
+ vout_OSDMessage( p_intf, "Vol %d%%",
+ 2*i_newvol*100/AOUT_VOLUME_MAX );
+ }
+ }
}
else if( i_action == ACTIONID_VOL_DOWN )
{
audio_volume_t i_newvol;
aout_VolumeDown( p_intf, 1, &i_newvol );
- vout_OSDMessage( p_intf, "Vol %d%%", i_newvol*100/AOUT_VOLUME_MAX);
+ if( p_vout )
+ {
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_intf ),
+ i_newvol*100/AOUT_VOLUME_MAX, 1 );
+ }
+ else
+ {
+ vout_OSDMessage( p_intf, "Vol %d%%",
+ 2*i_newvol*100/AOUT_VOLUME_MAX );
+ }
+ }
+
}
else if( i_action == ACTIONID_SUBDELAY_DOWN )
{
int i_delay;
if( input_Control( p_input, INPUT_GET_SUBDELAY, &i_delay ) ==
- VLC_SUCCESS )
+ VLC_SUCCESS )
{
i_delay--;
input_Control( p_input, INPUT_SET_SUBDELAY, i_delay );
- vout_OSDMessage( p_intf, "Subtitle delay %i ms",i_delay*100);
+ vout_OSDMessage( p_intf, "Subtitle delay %i ms", i_delay*100);
}
}
else if( i_action == ACTIONID_SUBDELAY_UP )
{
int i_delay;
if( input_Control( p_input, INPUT_GET_SUBDELAY, &i_delay ) ==
- VLC_SUCCESS )
+ VLC_SUCCESS )
{
i_delay++;
input_Control( p_input, INPUT_SET_SUBDELAY, i_delay );
- vout_OSDMessage( p_intf, "Subtitle delay %i ms",i_delay*100);
+ vout_OSDMessage( p_intf, "Subtitle delay %i ms", i_delay*100);
}
}
else if( i_action == ACTIONID_VOL_MUTE )
else
{
vout_OSDMessage( p_intf, "Vol %d%%",
- i_newvol*100/AOUT_VOLUME_MAX );
+ i_newvol * 100 / AOUT_VOLUME_MAX );
}
}
else if( i_action == ACTIONID_FULLSCREEN && p_vout )
FIND_ANYWHERE );
if( p_playlist )
{
- vlc_mutex_lock( &p_playlist->object_lock );
- if( p_playlist->i_size )
- {
- vlc_mutex_unlock( &p_playlist->object_lock );
- vout_OSDMessage( p_intf, _( "Play" ) );
- playlist_Play( p_playlist );
- vlc_object_release( p_playlist );
- }
+ vout_OSDMessage( p_intf, _( "Play" ) );
+ playlist_Play( p_playlist );
+ vlc_object_release( p_playlist );
}
}
}
else if( p_input )
{
+ vlc_bool_t b_seekable = p_input->stream.b_seekable;
+
if( i_action == ACTIONID_PAUSE )
{
vout_OSDMessage( p_intf, _( "Pause" ) );
val.i_int = PAUSE_S;
var_Set( p_input, "state", val );
}
- else if( i_action == ACTIONID_JUMP_BACKWARD_10SEC )
+ else if( i_action == ACTIONID_JUMP_BACKWARD_10SEC && b_seekable )
{
- vout_OSDMessage( p_intf, _( "Jump -10 seconds" ) );
val.i_time = -10000000;
var_Set( p_input, "time-offset", val );
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_intf ),
+ GetPosition( p_intf ), 0 );
+ }
+ else
+ {
+ vout_OSDMessage( p_intf, _( "Jump -10 seconds" ) );
+ }
}
- else if( i_action == ACTIONID_JUMP_FORWARD_10SEC )
+ else if( i_action == ACTIONID_JUMP_FORWARD_10SEC && b_seekable )
{
- vout_OSDMessage( p_intf, _( "Jump +10 seconds" ) );
val.i_time = 10000000;
var_Set( p_input, "time-offset", val );
+ if( p_vout )
+ {
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_intf ),
+ GetPosition( p_intf ), 0 );
+ }
+ else
+ {
+ vout_OSDMessage( p_intf, _( "Jump +10 seconds" ) );
+ }
+ }
}
- else if( i_action == ACTIONID_JUMP_BACKWARD_1MIN )
+ else if( i_action == ACTIONID_JUMP_BACKWARD_1MIN && b_seekable )
{
- vout_OSDMessage( p_intf, _( "Jump -1 minute" ) );
val.i_time = -60000000;
var_Set( p_input, "time-offset", val );
+ if( p_vout )
+ {
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_intf ),
+ GetPosition( p_intf ), 0 );
+ }
+ else
+ {
+ vout_OSDMessage( p_intf, _( "Jump -1 minute" ) );
+ }
+ }
}
- else if( i_action == ACTIONID_JUMP_FORWARD_1MIN )
+ else if( i_action == ACTIONID_JUMP_FORWARD_1MIN && b_seekable )
{
- vout_OSDMessage( p_intf, _( "Jump +1 minute" ) );
val.i_time = 60000000;
var_Set( p_input, "time-offset", val );
+ if( p_vout )
+ {
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_intf ),
+ GetPosition( p_intf ), 0 );
+ }
+ else
+ {
+ vout_OSDMessage( p_intf, _( "Jump +1 minute" ) );
+ }
+ }
}
- else if( i_action == ACTIONID_JUMP_BACKWARD_5MIN )
+ else if( i_action == ACTIONID_JUMP_BACKWARD_5MIN && b_seekable )
{
vout_OSDMessage( p_intf, _( "Jump -5 minutes" ) );
val.i_time = -300000000;
var_Set( p_input, "time-offset", val );
+ if( p_vout )
+ {
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_intf ),
+ GetPosition( p_intf ), 0 );
+ }
+ else
+ {
+ vout_OSDMessage( p_intf, _( "Jump -5 minutes" ) );
+ }
+ }
}
- else if( i_action == ACTIONID_JUMP_FORWARD_5MIN )
+ else if( i_action == ACTIONID_JUMP_FORWARD_5MIN && b_seekable )
{
- vout_OSDMessage( p_intf, _( "Jump +5 minutes" ) );
val.i_time = 300000000;
var_Set( p_input, "time-offset", val );
+ if( p_vout )
+ {
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_intf ),
+ GetPosition( p_intf ), 0 );
+ }
+ else
+ {
+ vout_OSDMessage( p_intf, _( "Jump +5 minutes" ) );
+ }
+ }
}
else if( i_action == ACTIONID_NEXT )
{
}
else if( i_action == ACTIONID_POSITION )
{
- playlist_t *p_playlist = vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST,
- FIND_ANYWHERE );
char psz_duration[MSTRTIME_MAX_SIZE];
char psz_time[MSTRTIME_MAX_SIZE];
vlc_value_t time;
mtime_t i_seconds;
-
+
var_Get( p_input, "time", &time );
-
- if( p_playlist )
- {
- mtime_t dur =
- p_playlist->pp_items[p_playlist->i_index]->input.i_duration;
+ i_seconds = time.i_time / 1000000;
+ secstotimestr ( psz_time, i_seconds );
- i_seconds = time.i_time / 1000000;
- secstotimestr ( psz_time, i_seconds );
-
- if( dur != -1 )
- {
- secstotimestr( psz_duration, dur/1000000 );
- vout_OSDMessage( p_playlist, "%s / %s", psz_time, psz_duration );
- }
- else if( i_seconds > 0 )
- {
- vout_OSDMessage( p_playlist, psz_time );
- }
- vlc_object_release( p_playlist );
+ var_Get( p_input, "length", &time );
+ if( time.i_time > 0 )
+ {
+ secstotimestr( psz_duration, time.i_time / 1000000 );
+ vout_OSDMessage( p_input, "%s / %s",
+ psz_time, psz_duration );
+ }
+ else if( i_seconds > 0 )
+ {
+ vout_OSDMessage( p_input, psz_time );
}
}
else if( i_action >= ACTIONID_PLAY_BOOKMARK1 &&
}
static void PlayBookmark( intf_thread_t *p_intf, int i_num )
-{
+{
vlc_value_t val;
int i_position;
char psz_bookmark_name[11];
- playlist_t *p_playlist = vlc_object_find( p_intf,
- VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
-
+ playlist_t *p_playlist =
+ vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+
sprintf( psz_bookmark_name, "bookmark%i", i_num );
var_Create( p_intf, psz_bookmark_name, VLC_VAR_STRING|VLC_VAR_DOINHERIT );
var_Get( p_intf, psz_bookmark_name, &val );
-
+
if( p_playlist )
{
char *psz_bookmark = strdup( val.psz_string );
- for( i_position = 0 ; i_position < p_playlist->i_size ; i_position++)
+ for( i_position = 0; i_position < p_playlist->i_size; i_position++)
{
- if( !strcmp( psz_bookmark, p_playlist->pp_items[i_position]->input.psz_uri ) )
+ if( !strcmp( psz_bookmark,
+ p_playlist->pp_items[i_position]->input.psz_uri ) )
{
playlist_Goto( p_playlist, i_position );
break;
static void SetBookmark( intf_thread_t *p_intf, int i_num )
{
vlc_value_t val;
- playlist_t *p_playlist = vlc_object_find( p_intf,
- VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
+ playlist_t *p_playlist =
+ vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE );
if( p_playlist )
{
char psz_bookmark_name[11];
sprintf( psz_bookmark_name, "bookmark%i", i_num );
- var_Create( p_intf, psz_bookmark_name, VLC_VAR_STRING|VLC_VAR_DOINHERIT );
+ var_Create( p_intf, psz_bookmark_name,
+ VLC_VAR_STRING|VLC_VAR_DOINHERIT );
val.psz_string = strdup( p_playlist->pp_items[p_playlist->i_index]->input.psz_uri );
var_Set( p_intf, psz_bookmark_name, val );
- msg_Info( p_intf, "setting playlist bookmark %i to %s", i_num, val.psz_string );
+ msg_Info( p_intf, "setting playlist bookmark %i to %s", i_num,
+ val.psz_string );
vlc_object_release( p_playlist );
}
}
+
+static int GetPosition( intf_thread_t *p_intf )
+{
+ input_thread_t *p_input =
+ (input_thread_t *)vlc_object_find( p_intf, VLC_OBJECT_INPUT,
+ FIND_ANYWHERE );
+ if( p_input )
+ {
+ vlc_value_t pos;
+ var_Get( p_input, "position", &pos );
+ vlc_object_release( p_input );
+ return pos.f_float * 100;
+ }
+ return -1;
+}