Commit 69200883 authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

adaptive: privatize str_duration()

parent 6f15ed52
......@@ -137,8 +137,6 @@ static inline char *str_format( input_thread_t *input, const char *fmt )
VLC_API void filename_sanitize( char * );
VLC_API void path_sanitize( char * );
VLC_API time_t str_duration( const char * );
/**
* @}
*/
......
......@@ -19,9 +19,68 @@
*****************************************************************************/
#include "Conversions.hpp"
#include <vlc_strings.h>
#include <vlc_charset.h>
#include <sstream>
/*
Decodes a duration as defined by ISO 8601
http://en.wikipedia.org/wiki/ISO_8601#Durations
@param str A null-terminated string to convert
@return: The duration in seconds. -1 if an error occurred.
Exemple input string: "PT0H9M56.46S"
*/
static time_t str_duration( const char *psz_duration )
{
bool timeDesignatorReached = false;
time_t res = 0;
char* end_ptr;
if ( psz_duration == NULL )
return -1;
if ( ( *(psz_duration++) ) != 'P' )
return -1;
do
{
double number = us_strtod( psz_duration, &end_ptr );
double mul = 0;
if ( psz_duration != end_ptr )
psz_duration = end_ptr;
switch( *psz_duration )
{
case 'M':
{
//M can mean month or minutes, if the 'T' flag has been reached.
//We don't handle months though.
if ( timeDesignatorReached == true )
mul = 60.0;
break ;
}
case 'Y':
case 'W':
break ; //Don't handle this duration.
case 'D':
mul = 86400.0;
break ;
case 'T':
timeDesignatorReached = true;
break ;
case 'H':
mul = 3600.0;
break ;
case 'S':
mul = 1.0;
break ;
default:
break ;
}
res += (time_t)(mul * number);
if ( *psz_duration )
psz_duration++;
} while ( *psz_duration );
return res;
}
IsoTime::IsoTime(const std::string &str)
{
time = str_duration(str.c_str());
......
......@@ -413,7 +413,6 @@ stream_ReadDir
stream_FilterDefaultReadDir
str_format_meta
str_format_time
str_duration
subpicture_Delete
subpicture_New
subpicture_NewFromPicture
......
......@@ -913,62 +913,3 @@ void path_sanitize( char *str )
str++;
}
}
/*
Decodes a duration as defined by ISO 8601
http://en.wikipedia.org/wiki/ISO_8601#Durations
@param str A null-terminated string to convert
@return: The duration in seconds. -1 if an error occurred.
Exemple input string: "PT0H9M56.46S"
*/
time_t str_duration( const char *psz_duration )
{
bool timeDesignatorReached = false;
time_t res = 0;
char* end_ptr;
if ( psz_duration == NULL )
return -1;
if ( ( *(psz_duration++) ) != 'P' )
return -1;
do
{
double number = us_strtod( psz_duration, &end_ptr );
double mul = 0;
if ( psz_duration != end_ptr )
psz_duration = end_ptr;
switch( *psz_duration )
{
case 'M':
{
//M can mean month or minutes, if the 'T' flag has been reached.
//We don't handle months though.
if ( timeDesignatorReached == true )
mul = 60.0;
break ;
}
case 'Y':
case 'W':
break ; //Don't handle this duration.
case 'D':
mul = 86400.0;
break ;
case 'T':
timeDesignatorReached = true;
break ;
case 'H':
mul = 3600.0;
break ;
case 'S':
mul = 1.0;
break ;
default:
break ;
}
res += (time_t)(mul * number);
if ( *psz_duration )
psz_duration++;
} while ( *psz_duration );
return res;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment