diff options
author | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-07-01 13:51:26 +0000 |
---|---|---|
committer | Miguel Freitas <miguelfreitas@users.sourceforge.net> | 2002-07-01 13:51:26 +0000 |
commit | 152d605773745cf59f89a3575ed0aed3c8bd5b2e (patch) | |
tree | c9aed4af04b8293b45ed770aba10a87641dc90c7 /src/xine-engine/resample.c | |
parent | cd0b9cf91b6b7f14c085c2fc9f564ccfb65203b0 (diff) | |
download | xine-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.c | 50 |
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; + } +} |