[vlc-commits] commit: str_format_meta: use lldiv, do less math ( Rémi Denis-Courmont )
git at videolan.org
git at videolan.org
Thu Jun 17 03:48:54 CEST 2010
vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Thu Jun 17 04:39:24 2010 +0300| [6fce72c757f545cd2c4f18bf553e2f32fd28dbf1] | committer: Rémi Denis-Courmont
str_format_meta: use lldiv, do less math
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=6fce72c757f545cd2c4f18bf553e2f32fd28dbf1
---
src/text/strings.c | 28 ++++++++++++++++------------
1 files changed, 16 insertions(+), 12 deletions(-)
diff --git a/src/text/strings.c b/src/text/strings.c
index 8ae50a5..ee05699 100644
--- a/src/text/strings.c
+++ b/src/text/strings.c
@@ -601,6 +601,18 @@ char *str_format_time( const char *tformat )
assert (0);
}
+static void format_duration (char *buf, size_t len, int64_t duration)
+{
+ lldiv_t d;
+ int sec;
+
+ duration /= CLOCK_FREQ;
+ d = lldiv (duration, 60);
+ sec = d.rem;
+ d = lldiv (d.quot, 60);
+ snprintf (buf, len, "%02lld:%02d:%02d", d.quot, (int)d.rem, sec);
+}
+
#define INSERT_STRING( string ) \
if( string != NULL ) \
{ \
@@ -779,10 +791,7 @@ char *str_format_meta( vlc_object_t *p_object, const char *string )
if( p_item )
{
mtime_t i_duration = input_item_GetDuration( p_item );
- snprintf( buf, 10, "%02d:%02d:%02d",
- (int)(i_duration/(3600000000)),
- (int)((i_duration/(60000000))%60),
- (int)((i_duration/1000000)%60) );
+ format_duration (buf, sizeof (buf), i_duration);
}
else
{
@@ -813,10 +822,8 @@ char *str_format_meta( vlc_object_t *p_object, const char *string )
{
mtime_t i_duration = input_item_GetDuration( p_item );
int64_t i_time = var_GetTime( p_input, "time" );
- snprintf( buf, 10, "%02d:%02d:%02d",
- (int)( ( i_duration - i_time ) / 3600000000 ),
- (int)( ( ( i_duration - i_time ) / 60000000 ) % 60 ),
- (int)( ( ( i_duration - i_time ) / 1000000 ) % 60 ) );
+ format_duration( buf, sizeof(buf),
+ i_duration - i_time );
}
else
{
@@ -881,10 +888,7 @@ char *str_format_meta( vlc_object_t *p_object, const char *string )
if( p_input )
{
int64_t i_time = var_GetTime( p_input, "time" );
- snprintf( buf, 10, "%02d:%02d:%02d",
- (int)( i_time / ( 3600000000 ) ),
- (int)( ( i_time / ( 60000000 ) ) % 60 ),
- (int)( ( i_time / 1000000 ) % 60 ) );
+ format_duration( buf, sizeof(buf), i_time );
}
else
{
More information about the vlc-commits
mailing list