+
+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 );
+
+ 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++)
+ {
+ if( !strcmp( psz_bookmark,
+ p_playlist->pp_items[i_position]->input.psz_uri ) )
+ {
+ playlist_Goto( p_playlist, i_position );
+ break;
+ }
+ }
+ vlc_object_release( p_playlist );
+ }
+}
+
+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 );
+ 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 );
+ 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 );
+ vlc_object_release( p_playlist );
+ }
+}
+
+static void DisplayPosition( intf_thread_t *p_intf, vout_thread_t *p_vout,
+ input_thread_t *p_input )
+{
+ char psz_duration[MSTRTIME_MAX_SIZE];
+ char psz_time[MSTRTIME_MAX_SIZE];
+ vlc_value_t time, pos;
+ mtime_t i_seconds;
+
+ if( p_vout == NULL )
+ {
+ return;
+ }
+ ClearChannels( p_intf, p_vout );
+
+ var_Get( p_input, "time", &time );
+ i_seconds = time.i_time / 1000000;
+ secstotimestr ( psz_time, i_seconds );
+
+ var_Get( p_input, "length", &time );
+ if( time.i_time > 0 )
+ {
+ secstotimestr( psz_duration, time.i_time / 1000000 );
+ vout_OSDMessage( p_input, POSITION_TEXT_CHAN, "%s / %s",
+ psz_time, psz_duration );
+ }
+ else if( i_seconds > 0 )
+ {
+ vout_OSDMessage( p_input, POSITION_TEXT_CHAN, psz_time );
+ }
+
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ var_Get( p_input, "position", &pos );
+ vout_OSDSlider( VLC_OBJECT( p_input ), POSITION_WIDGET_CHAN,
+ pos.f_float * 100, OSD_HOR_SLIDER );
+ }
+}
+
+static void DisplayVolume( intf_thread_t *p_intf, vout_thread_t *p_vout,
+ audio_volume_t i_vol )
+{
+ if( p_vout == NULL )
+ {
+ return;
+ }
+ ClearChannels( p_intf, p_vout );
+
+ if( !p_vout->p_parent_intf || p_vout->b_fullscreen )
+ {
+ vout_OSDSlider( VLC_OBJECT( p_vout ), VOLUME_WIDGET_CHAN,
+ i_vol*100/AOUT_VOLUME_MAX, OSD_VERT_SLIDER );
+ }
+ else
+ {
+ vout_OSDMessage( p_vout, VOLUME_TEXT_CHAN, "Vol %d%%",
+ 2*i_vol*100/AOUT_VOLUME_MAX );
+ }
+}
+
+static void ClearChannels( intf_thread_t *p_intf, vout_thread_t *p_vout )
+{
+ int i;
+
+ if( p_vout )
+ {
+ vout_ClearOSDChannel( p_vout, DEFAULT_CHAN );
+ for( i = 0; i < CHANNELS_NUMBER; i++ )
+ {
+ vout_ClearOSDChannel( p_vout, p_intf->p_sys->p_channels[ i ] );
+ }
+ }
+}