Separated the normal (integer frequency) calls from the fractional frequency
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 12 Feb 2007 14:50:06 +0000 (14:50 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 12 Feb 2007 14:50:06 +0000 (14:50 +0000)
calls.

git-svn-id: http://svn.xiph.org/trunk/speex@12455 0101bb08-14d6-0310-b084-bc0e0c8e3800

include/speex/speex_resampler.h
libspeex/resample.c

index 79c1b6a..1384e00 100644 (file)
@@ -71,8 +71,17 @@ extern "C" {
 struct SpeexResamplerState_;
 typedef struct SpeexResamplerState_ SpeexResamplerState;
 
-/** Create a new resampler. The sampling rate ratio is an arbitrary rational number 
- * with both the numerator and denominator being 32-bit integers.
+/** Create a new resampler with integer input and output rates.
+ * @param nb_channels Number of channels to be processed
+ * @param in_rate Nominal input sampling rate rounded to the nearest integer (in Hz). This does not need to be accurate.
+ * @param out_rate Nominal output sampling rate rounded to the nearest integer (in Hz). This does not need to be accurate.
+ * @param quality Resampling quality between 0 and 10, where 0 has poor quality and 10 has very high quality.
+ * @return Newly created resampler state
+ */
+SpeexResamplerState *speex_resampler_init(int nb_channels, int in_rate, int out_rate, int quality);
+
+/** Create a new resampler with fractional input/output rates. The sampling rate ratio is 
+ * an arbitrary rational number with both the numerator and denominator being 32-bit integers.
  * @param nb_channels Number of channels to be processed
  * @param ratio_num Numerator of the sampling rate ratio
  * @param ratio_den Denominator of the sampling rate ratio
@@ -81,7 +90,7 @@ typedef struct SpeexResamplerState_ SpeexResamplerState;
  * @param quality Resampling quality between 0 and 10, where 0 has poor quality and 10 has very high quality.
  * @return Newly created resampler state
  */
-SpeexResamplerState *speex_resampler_init(int nb_channels, int ratio_num, int ratio_den, int in_rate, int out_rate, int quality);
+SpeexResamplerState *speex_resampler_init_frac(int nb_channels, int ratio_num, int ratio_den, int in_rate, int out_rate, int quality);
 
 /** Destroy a resampler state.
  * @param st Resampler state
@@ -126,14 +135,21 @@ void speex_resampler_process_interleaved_float(SpeexResamplerState *st, const fl
  */
 void speex_resampler_process_interleaved_int(SpeexResamplerState *st, const spx_int16_t *in, int *in_len, spx_int16_t *out, int *out_len);
 
-/** Set (change) the input/output sampling rates and resampling ratio.
+/** Set (change) the input/output sampling rates (integer value).
+ * @param st Resampler state
+ * @param in_rate Nominal input sampling rate rounded to the nearest integer (in Hz). This does not need to be accurate.
+ * @param out_rate Nominal output sampling rate rounded to the nearest integer (in Hz). This does not need to be accurate.
+ */
+void speex_resampler_set_rate(SpeexResamplerState *st, int in_rate, int out_rate);
+
+/** Set (change) the input/output sampling rates and resampling ratio (fractional values in Hz supported).
  * @param st Resampler state
  * @param ratio_num Numerator of the sampling rate ratio
  * @param ratio_den Denominator of the sampling rate ratio
  * @param in_rate Nominal input sampling rate rounded to the nearest integer (in Hz). This does not need to be accurate.
  * @param out_rate Nominal output sampling rate rounded to the nearest integer (in Hz). This does not need to be accurate.
  */
-void speex_resampler_set_rate(SpeexResamplerState *st, int ratio_num, int ratio_den, int in_rate, int out_rate);
+void speex_resampler_set_rate_frac(SpeexResamplerState *st, int ratio_num, int ratio_den, int in_rate, int out_rate);
 
 /** Set (change) the conversion quality.
  * @param st Resampler state
index c3ce0ca..a2fdff0 100644 (file)
@@ -487,8 +487,12 @@ static void update_filter(SpeexResamplerState *st)
 
 }
 
+SpeexResamplerState *speex_resampler_init(int nb_channels, int in_rate, int out_rate, int quality)
+{
+   return speex_resampler_init_frac(nb_channels, in_rate, out_rate, in_rate, out_rate, quality);
+}
 
-SpeexResamplerState *speex_resampler_init(int nb_channels, int ratio_num, int ratio_den, int in_rate, int out_rate, int quality)
+SpeexResamplerState *speex_resampler_init_frac(int nb_channels, int ratio_num, int ratio_den, int in_rate, int out_rate, int quality)
 {
    int i;
    SpeexResamplerState *st = (SpeexResamplerState *)speex_alloc(sizeof(SpeexResamplerState));
@@ -522,7 +526,7 @@ SpeexResamplerState *speex_resampler_init(int nb_channels, int ratio_num, int ra
    }
 
    speex_resampler_set_quality(st, quality);
-   speex_resampler_set_rate(st, ratio_num, ratio_den, in_rate, out_rate);
+   speex_resampler_set_rate_frac(st, ratio_num, ratio_den, in_rate, out_rate);
 
    
    update_filter(st);
@@ -658,7 +662,12 @@ void speex_resampler_process_interleaved_int(SpeexResamplerState *st, const spx_
    st->out_stride = ostride_save;
 }
 
-void speex_resampler_set_rate(SpeexResamplerState *st, int ratio_num, int ratio_den, int in_rate, int out_rate)
+void speex_resampler_set_rate(SpeexResamplerState *st, int in_rate, int out_rate)
+{
+   speex_resampler_set_rate_frac(st, in_rate, out_rate, in_rate, out_rate);
+}
+
+void speex_resampler_set_rate_frac(SpeexResamplerState *st, int ratio_num, int ratio_den, int in_rate, int out_rate)
 {
    int fact;
    if (st->in_rate == in_rate && st->out_rate == out_rate && st->num_rate == ratio_num && st->den_rate == ratio_den)