Commit 331625d9 authored by Laurent Aimar's avatar Laurent Aimar

Moved date_Decrement to libvlc core from dirac.

parent fc44328d
...@@ -136,5 +136,6 @@ VLC_EXPORT( void, date_Set, ( date_t *, mtime_t ) ); ...@@ -136,5 +136,6 @@ VLC_EXPORT( void, date_Set, ( date_t *, mtime_t ) );
VLC_EXPORT( mtime_t, date_Get, ( const date_t * ) ); VLC_EXPORT( mtime_t, date_Get, ( const date_t * ) );
VLC_EXPORT( void, date_Move, ( date_t *, mtime_t ) ); VLC_EXPORT( void, date_Move, ( date_t *, mtime_t ) );
VLC_EXPORT( mtime_t, date_Increment, ( date_t *, uint32_t ) ); VLC_EXPORT( mtime_t, date_Increment, ( date_t *, uint32_t ) );
VLC_EXPORT( mtime_t, date_Decrement, ( date_t *, uint32_t ) );
VLC_EXPORT( uint64_t, NTPtime64, ( void ) ); VLC_EXPORT( uint64_t, NTPtime64, ( void ) );
#endif /* !__VLC_MTIME_ */ #endif /* !__VLC_MTIME_ */
...@@ -266,26 +266,6 @@ static dirac_block_encap_t *dirac_GetBlockEncap( block_t *p_block ) ...@@ -266,26 +266,6 @@ static dirac_block_encap_t *dirac_GetBlockEncap( block_t *p_block )
* General utility funcions * General utility funcions
*/ */
/* decrement a date. opposite to date_Increment */
static mtime_t date_Decrement( date_t *p_date, uint32_t i_nb_samples )
{
mtime_t i_dividend = (mtime_t)i_nb_samples * 1000000 * p_date->i_divider_den;
p_date->date -= i_dividend / p_date->i_divider_num;
unsigned u_rem_adjust = i_dividend % p_date->i_divider_num;
if( p_date->i_remainder < u_rem_adjust )
{
/* This is Bresenham algorithm. */
assert( p_date->i_remainder > -p_date->i_divider_num);
p_date->date -= 1;
p_date->i_remainder += p_date->i_divider_num;
}
p_date->i_remainder -= u_rem_adjust;
return p_date->date;
}
/** /**
* given a chain of block_t, allocate and return an array containing * given a chain of block_t, allocate and return an array containing
* pointers to all the blocks. (Acts as a replacement for the old p_prev * pointers to all the blocks. (Acts as a replacement for the old p_prev
......
...@@ -74,6 +74,7 @@ config_StringEscape ...@@ -74,6 +74,7 @@ config_StringEscape
config_StringUnescape config_StringUnescape
convert_xml_special_chars convert_xml_special_chars
date_Change date_Change
date_Decrement
date_Get date_Get
date_Increment date_Increment
date_Init date_Init
......
...@@ -536,6 +536,33 @@ mtime_t date_Increment( date_t *p_date, uint32_t i_nb_samples ) ...@@ -536,6 +536,33 @@ mtime_t date_Increment( date_t *p_date, uint32_t i_nb_samples )
return p_date->date; return p_date->date;
} }
/**
* Decrement the date and return the result, taking into account
* rounding errors.
*
* \param date to decrement
* \param decrementation in number of samples
* \return date value
*/
mtime_t date_Decrement( date_t *p_date, uint32_t i_nb_samples )
{
mtime_t i_dividend = (mtime_t)i_nb_samples * 1000000 * p_date->i_divider_den;
p_date->date -= i_dividend / p_date->i_divider_num;
unsigned i_rem_adjust = i_dividend % p_date->i_divider_num;
if( p_date->i_remainder < i_rem_adjust )
{
/* This is Bresenham algorithm. */
assert( p_date->i_remainder > -p_date->i_divider_num);
p_date->date -= 1;
p_date->i_remainder += p_date->i_divider_num;
}
p_date->i_remainder -= i_rem_adjust;
return p_date->date;
}
#ifndef HAVE_GETTIMEOFDAY #ifndef HAVE_GETTIMEOFDAY
#ifdef WIN32 #ifdef WIN32
......
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