summaryrefslogtreecommitdiff
path: root/core/multimedia/opieplayer/libmad/timer.c
Side-by-side diff
Diffstat (limited to 'core/multimedia/opieplayer/libmad/timer.c') (more/less context) (ignore whitespace changes)
-rw-r--r--core/multimedia/opieplayer/libmad/timer.c66
1 files changed, 35 insertions, 31 deletions
diff --git a/core/multimedia/opieplayer/libmad/timer.c b/core/multimedia/opieplayer/libmad/timer.c
index b30680c..299fe0b 100644
--- a/core/multimedia/opieplayer/libmad/timer.c
+++ b/core/multimedia/opieplayer/libmad/timer.c
@@ -1,8 +1,8 @@
/*
- * mad - MPEG audio decoder
+ * libmad - MPEG audio decoder library
* Copyright (C) 2000-2001 Robert Leslie
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
@@ -23,13 +23,16 @@
# include "libmad_config.h"
# endif
# include "libmad_global.h"
# include <stdio.h>
-# include <assert.h>
+
+# ifdef HAVE_ASSERT_H
+# include <assert.h>
+# endif
# include "timer.h"
mad_timer_t const mad_timer_zero = { 0, 0 };
/*
@@ -147,74 +150,75 @@ unsigned long scale_rational(unsigned long numer, unsigned long denom,
return numer * scale / denom;
}
/*
* NAME: timer->set()
- * DESCRIPTION: set timer to specific value
+ * DESCRIPTION: set timer to specific (positive) value
*/
void mad_timer_set(mad_timer_t *timer, unsigned long seconds,
- unsigned long fraction, unsigned long fracparts)
+ unsigned long numer, unsigned long denom)
{
timer->seconds = seconds;
-
- if (fraction == 0)
- fracparts = 0;
- else if (fracparts == 0) {
- fracparts = fraction;
- fraction = 1;
+ if (numer >= denom && denom > 0) {
+ timer->seconds += numer / denom;
+ numer %= denom;
}
- switch (fracparts) {
+ switch (denom) {
case 0:
+ case 1:
timer->fraction = 0;
break;
case MAD_TIMER_RESOLUTION:
- timer->fraction = fraction;
+ timer->fraction = numer;
+ break;
+
+ case 1000:
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 1000);
break;
case 8000:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 8000);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 8000);
break;
case 11025:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 11025);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 11025);
break;
case 12000:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 12000);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 12000);
break;
case 16000:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 16000);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 16000);
break;
case 22050:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 22050);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 22050);
break;
case 24000:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 24000);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 24000);
break;
case 32000:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 32000);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 32000);
break;
case 44100:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 44100);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 44100);
break;
case 48000:
- timer->fraction = fraction * (MAD_TIMER_RESOLUTION / 48000);
+ timer->fraction = numer * (MAD_TIMER_RESOLUTION / 48000);
break;
default:
- timer->fraction =
- scale_rational(fraction, fracparts, MAD_TIMER_RESOLUTION);
+ timer->fraction = scale_rational(numer, denom, MAD_TIMER_RESOLUTION);
break;
}
if (timer->fraction >= MAD_TIMER_RESOLUTION)
reduce_timer(timer);
}
@@ -240,14 +244,14 @@ void mad_timer_multiply(mad_timer_t *timer, signed long scalar)
{
mad_timer_t addend;
unsigned long factor;
factor = scalar;
if (scalar < 0) {
- mad_timer_negate(timer);
factor = -scalar;
+ mad_timer_negate(timer);
}
addend = *timer;
*timer = mad_timer_zero;
while (factor) {
@@ -314,25 +318,25 @@ signed long mad_timer_count(mad_timer_t timer, enum mad_units units)
}
/*
* NAME: timer->fraction()
* DESCRIPTION: return fractional part of timer in arbitrary terms
*/
-unsigned long mad_timer_fraction(mad_timer_t timer, unsigned long fracparts)
+unsigned long mad_timer_fraction(mad_timer_t timer, unsigned long denom)
{
timer = mad_timer_abs(timer);
- switch (fracparts) {
+ switch (denom) {
case 0:
return MAD_TIMER_RESOLUTION / timer.fraction;
case MAD_TIMER_RESOLUTION:
return timer.fraction;
default:
- return scale_rational(timer.fraction, MAD_TIMER_RESOLUTION, fracparts);
+ return scale_rational(timer.fraction, MAD_TIMER_RESOLUTION, denom);
}
}
/*
* NAME: timer->string()
* DESCRIPTION: write a string representation of a timer using a template
@@ -374,18 +378,18 @@ void mad_timer_string(mad_timer_t timer,
case MAD_UNITS_30_FPS:
case MAD_UNITS_48_FPS:
case MAD_UNITS_50_FPS:
case MAD_UNITS_60_FPS:
case MAD_UNITS_75_FPS:
{
- unsigned long fracparts;
+ unsigned long denom;
- fracparts = MAD_TIMER_RESOLUTION / fracunits;
+ denom = MAD_TIMER_RESOLUTION / fracunits;
- frac = timer.fraction / fracparts;
- sub = scale_rational(timer.fraction % fracparts, fracparts, subparts);
+ frac = timer.fraction / denom;
+ sub = scale_rational(timer.fraction % denom, denom, subparts);
}
break;
case MAD_UNITS_23_976_FPS:
case MAD_UNITS_24_975_FPS:
case MAD_UNITS_29_97_FPS: