contrib: rav1e: update to v0.4.1
[vlc.git] / modules / gui / skins2 / vars / time.cpp
1 /*****************************************************************************
2  * time.cpp
3  *****************************************************************************
4  * Copyright (C) 2003 the VideoLAN team
5  *
6  * Authors: Cyril Deguet     <asmax@via.ecp.fr>
7  *          Olivier Teulière <ipkiss@via.ecp.fr>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
22  *****************************************************************************/
23
24 #include "time.hpp"
25
26
27 inline bool StreamTime::havePosition() const {
28
29     float position = 0.0;
30     vlc_player_t *player = vlc_playlist_GetPlayer( getPL() );
31
32     if( player )
33     {
34         vlc_playlist_Lock( getPL() );
35         position = vlc_player_GetPosition( player );
36         vlc_playlist_Unlock( getPL() );
37     }
38     return player && (position != 0.0);
39 }
40
41
42 void StreamTime::set( float percentage, bool updateVLC )
43 {
44     VarPercent::set( percentage );
45
46     // Avoid looping forever...
47     if( updateVLC )
48     {
49         vlc_player_t *player = vlc_playlist_GetPlayer( getPL() );
50         vlc_playlist_Lock( getPL() );
51         vlc_player_SetPosition( player, percentage );
52         vlc_playlist_Unlock( getPL() );
53     }
54 }
55
56
57 std::string StreamTime::getAsStringPercent() const
58 {
59     int value = (int)(100. * get());
60     // 0 <= value <= 100, so we need 4 chars
61     char str[4];
62     snprintf( str, 4, "%d", value );
63     return std::string(str);
64 }
65
66
67 std::string StreamTime::formatTime( int seconds, bool bShortFormat ) const
68 {
69     char psz_time[MSTRTIME_MAX_SIZE];
70     if( bShortFormat && (seconds < 60 * 60) )
71     {
72         snprintf( psz_time, MSTRTIME_MAX_SIZE, "%02d:%02d",
73                   (int) (seconds / 60 % 60),
74                   (int) (seconds % 60) );
75     }
76     else
77     {
78         snprintf( psz_time, MSTRTIME_MAX_SIZE, "%d:%02d:%02d",
79                   (int) (seconds / (60 * 60)),
80                   (int) (seconds / 60 % 60),
81                   (int) (seconds % 60) );
82     }
83     return std::string(psz_time);
84 }
85
86
87 std::string StreamTime::getAsStringCurrTime( bool bShortFormat ) const
88 {
89     vlc_player_t *player = vlc_playlist_GetPlayer( getPL() );
90     if( !havePosition() )
91         return "-:--:--";
92
93     vlc_playlist_Lock( getPL() );
94     vlc_tick_t time = vlc_player_GetTime( player );
95     vlc_playlist_Unlock( getPL() );
96     return formatTime( SEC_FROM_VLC_TICK(time), bShortFormat );
97 }
98
99
100 std::string StreamTime::getAsStringTimeLeft( bool bShortFormat ) const
101 {
102     vlc_player_t *player = vlc_playlist_GetPlayer( getPL() );
103     if( !havePosition() )
104         return "-:--:--";
105
106     vlc_playlist_Lock( getPL() );
107     vlc_tick_t time = vlc_player_GetTime( player );
108     vlc_tick_t duration = vlc_player_GetLength( player );
109     vlc_playlist_Unlock( getPL() );
110     return formatTime( SEC_FROM_VLC_TICK(duration - time), bShortFormat );
111 }
112
113
114 std::string StreamTime::getAsStringDuration( bool bShortFormat ) const
115 {
116     vlc_player_t *player = vlc_playlist_GetPlayer( getPL() );
117     if( !havePosition() )
118         return "-:--:--";
119
120     vlc_playlist_Lock( getPL() );
121     vlc_tick_t duration = vlc_player_GetLength( player );
122     vlc_playlist_Unlock( getPL() );
123     return formatTime( SEC_FROM_VLC_TICK(duration), bShortFormat );
124 }