Fixed fraction simplification code
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Sat, 9 Jun 2007 12:49:07 +0000 (12:49 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Sat, 9 Jun 2007 12:49:07 +0000 (12:49 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@13120 0101bb08-14d6-0310-b084-bc0e0c8e3800

libspeex/resample.c

index cd01732..2ea5449 100644 (file)
@@ -84,6 +84,7 @@ static void speex_free (void *ptr) {free(ptr);}
 #define OVERSAMPLE 8
 
 #define IMAX(a,b) ((a) > (b) ? (a) : (b))
+#define IMIN(a,b) ((a) < (b) ? (a) : (b))
 
 #ifndef NULL
 #define NULL 0
@@ -1006,7 +1007,7 @@ int speex_resampler_set_rate_frac(SpeexResamplerState *st, spx_uint32_t ratio_nu
    st->num_rate = ratio_num;
    st->den_rate = ratio_den;
    /* FIXME: This is terribly inefficient, but who cares (at least for now)? */
-   for (fact=2;fact<=sqrt(IMAX(in_rate, out_rate));fact++)
+   for (fact=2;fact<=IMIN(st->num_rate, st->den_rate);fact++)
    {
       while ((st->num_rate % fact == 0) && (st->den_rate % fact == 0))
       {