summaryrefslogtreecommitdiff
path: root/src/xine-engine/resample.c
diff options
context:
space:
mode:
authorMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-07-01 13:51:26 +0000
committerMiguel Freitas <miguelfreitas@users.sourceforge.net>2002-07-01 13:51:26 +0000
commit152d605773745cf59f89a3575ed0aed3c8bd5b2e (patch)
treec9aed4af04b8293b45ed770aba10a87641dc90c7 /src/xine-engine/resample.c
parentcd0b9cf91b6b7f14c085c2fc9f564ccfb65203b0 (diff)
downloadxine-lib-152d605773745cf59f89a3575ed0aed3c8bd5b2e.tar.gz
xine-lib-152d605773745cf59f89a3575ed0aed3c8bd5b2e.tar.bz2
improved audio resampling for limited featured sound cards (like the ones found in
laptops, supporting only 16 bits, only stereo etc). as added bonus of new "stackable" conversion scheme fixes resampling for 8 bit streams. (thanks Damien Clermonté for discussion and ideas) note1: alsa patch untested. note2: pass-through untested. CVS patchset: 2187 CVS date: 2002/07/01 13:51:26
Diffstat (limited to 'src/xine-engine/resample.c')
-rw-r--r--src/xine-engine/resample.c50
1 files changed, 49 insertions, 1 deletions
diff --git a/src/xine-engine/resample.c b/src/xine-engine/resample.c
index 4b363735c..6f7863e6e 100644
--- a/src/xine-engine/resample.c
+++ b/src/xine-engine/resample.c
@@ -17,7 +17,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
*
- * $Id: resample.c,v 1.2 2001/12/27 14:30:30 f1rmb Exp $
+ * $Id: resample.c,v 1.3 2002/07/01 13:51:28 miguelfreitas Exp $
*/
#ifdef HAVE_CONFIG_H
@@ -278,3 +278,51 @@ void audio_out_resample_6channel(int16_t* input_samples, uint32_t in_samples,
output_samples[out_samples*6-2] = input_samples[in_samples*6-2];
output_samples[out_samples*6-1] = input_samples[in_samples*6-1];
}
+
+void audio_out_resample_8to16(int8_t* input_samples,
+ int16_t* output_samples, uint32_t samples)
+{
+ while( samples-- ) {
+ int16_t os;
+
+ os = *input_samples++;
+ os = (os - 0x80) << 8;
+ *output_samples++ = os;
+ }
+}
+
+void audio_out_resample_16to8(int16_t* input_samples,
+ int8_t* output_samples, uint32_t samples)
+{
+ while( samples-- ) {
+ int16_t os;
+
+ os = *input_samples++;
+ os = (os >> 8) + 0x80;
+ *output_samples++ = os;
+ }
+}
+
+void audio_out_resample_monotostereo(int16_t* input_samples,
+ int16_t* output_samples, uint32_t frames)
+{
+ while( frames-- ) {
+ int16_t os;
+
+ os = *input_samples++;
+ *output_samples++ = os;
+ *output_samples++ = os;
+ }
+}
+
+void audio_out_resample_stereotomono(int16_t* input_samples,
+ int16_t* output_samples, uint32_t frames)
+{
+ while( frames-- ) {
+ int16_t os;
+
+ os = (*input_samples++)>>1;
+ os += (*input_samples++)>>1;
+ *output_samples++ = os;
+ }
+}