Added interleave_int() call.
authorjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 12 Feb 2007 14:37:55 +0000 (14:37 +0000)
committerjm <jm@0101bb08-14d6-0310-b084-bc0e0c8e3800>
Mon, 12 Feb 2007 14:37:55 +0000 (14:37 +0000)
git-svn-id: http://svn.xiph.org/trunk/speex@12454 0101bb08-14d6-0310-b084-bc0e0c8e3800

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

index 13606a7..79c1b6a 100644 (file)
@@ -88,7 +88,7 @@ SpeexResamplerState *speex_resampler_init(int nb_channels, int ratio_num, int ra
  */
 void speex_resampler_destroy(SpeexResamplerState *st);
 
-/** Resample a float array. The input and output may *not* alias.
+/** Resample a float array. The input and output buffers must *not* overlap.
  * @param st Resampler state
  * @param channel_index Index of the channel to process for the multi-channel base (0 otherwise)
  * @param in Input buffer
@@ -98,7 +98,7 @@ void speex_resampler_destroy(SpeexResamplerState *st);
  */
 void speex_resampler_process_float(SpeexResamplerState *st, int channel_index, const float *in, int *in_len, float *out, int *out_len);
 
-/** Resample an int array. The input and output may *not* alias.
+/** Resample an int array. The input and output buffers must *not* overlap.
  * @param st Resampler state
  * @param channel_index Index of the channel to process for the multi-channel base (0 otherwise)
  * @param in Input buffer
@@ -108,7 +108,7 @@ void speex_resampler_process_float(SpeexResamplerState *st, int channel_index, c
  */
 void speex_resampler_process_int(SpeexResamplerState *st, int channel_index, const spx_int16_t *in, int *in_len, spx_int16_t *out, int *out_len);
 
-/** Resample an interleaved float array. The input and output may *not* alias.
+/** Resample an interleaved float array. The input and output buffers must *not* overlap.
  * @param st Resampler state
  * @param in Input buffer
  * @param in_len Number of input samples in the input buffer. Returns the number of samples processed. This is all per-channel.
@@ -117,6 +117,15 @@ void speex_resampler_process_int(SpeexResamplerState *st, int channel_index, con
  */
 void speex_resampler_process_interleaved_float(SpeexResamplerState *st, const float *in, int *in_len, float *out, int *out_len);
 
+/** Resample an interleaved int array. The input and output buffers must *not* overlap.
+ * @param st Resampler state
+ * @param in Input buffer
+ * @param in_len Number of input samples in the input buffer. Returns the number of samples processed. This is all per-channel.
+ * @param out Output buffer
+ * @param out_len Size of the output buffer. Returns the number of samples written. This is all per-channel.
+ */
+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.
  * @param st Resampler state
  * @param ratio_num Numerator of the sampling rate ratio
index e95186f..c3ce0ca 100644 (file)
@@ -643,6 +643,20 @@ void speex_resampler_process_interleaved_float(SpeexResamplerState *st, const fl
    st->out_stride = ostride_save;
 }
 
+void speex_resampler_process_interleaved_int(SpeexResamplerState *st, const spx_int16_t *in, int *in_len, spx_int16_t *out, int *out_len)
+{
+   int i;
+   int istride_save, ostride_save;
+   istride_save = st->in_stride;
+   ostride_save = st->out_stride;
+   st->in_stride = st->out_stride = st->nb_channels;
+   for (i=0;i<st->nb_channels;i++)
+   {
+      speex_resampler_process_int(st, i, in+i, in_len, out+i, out_len);
+   }
+   st->in_stride = istride_save;
+   st->out_stride = ostride_save;
+}
 
 void speex_resampler_set_rate(SpeexResamplerState *st, int ratio_num, int ratio_den, int in_rate, int out_rate)
 {