1 /*****************************************************************************
3 *****************************************************************************
4 * Copyright (C) 2003 VideoLAN
7 * Authors: Cyril Deguet <asmax@via.ecp.fr>
8 * Olivier Teulière <ipkiss@via.ecp.fr>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
23 *****************************************************************************/
25 #include <stdio.h> // snprintf
28 #include <vlc/input.h>
31 void Time::set( float percentage, bool updateVLC )
33 if( getIntf()->p_sys->p_input == NULL )
38 VarPercent::set( percentage );
40 // Avoid looping forever...
44 pos.f_float = percentage;
46 var_Set( getIntf()->p_sys->p_input, "position", pos );
51 const string Time::getAsStringPercent() const
53 int value = (int)(100. * get());
54 // 0 <= value <= 100, so we need 4 chars
55 char *str = new char[4];
56 snprintf( str, 4, "%d", value );
64 const string Time::getAsStringCurrTime() const
66 if( getIntf()->p_sys->p_input == NULL ||
67 !getIntf()->p_sys->p_input->stream.b_seekable )
73 var_Get( getIntf()->p_sys->p_input, "time", &time );
75 return formatTime( time.i_time / 1000000 );
79 const string Time::getAsStringTimeLeft() const
81 if( getIntf()->p_sys->p_input == NULL ||
82 !getIntf()->p_sys->p_input->stream.b_seekable )
87 vlc_value_t time, duration;
88 var_Get( getIntf()->p_sys->p_input, "time", &time );
89 var_Get( getIntf()->p_sys->p_input, "length", &duration );
91 return formatTime( (duration.i_time - time.i_time) / 1000000 );
95 const string Time::getAsStringDuration() const
97 if( getIntf()->p_sys->p_input == NULL ||
98 !getIntf()->p_sys->p_input->stream.b_seekable )
104 var_Get( getIntf()->p_sys->p_input, "length", &time );
106 return formatTime( time.i_time / 1000000 );
110 const string Time::formatTime( int seconds ) const
112 char *psz_time = new char[MSTRTIME_MAX_SIZE];
113 snprintf( psz_time, MSTRTIME_MAX_SIZE, "%d:%02d:%02d",
114 (int) (seconds / (60 * 60)),
115 (int) (seconds / 60 % 60),
116 (int) (seconds % 60) );
118 string ret = psz_time;