aboutsummaryrefslogtreecommitdiffstats
path: root/src/pcm_utils.c
diff options
context:
space:
mode:
authorWarren Dukes <warren.dukes@gmail.com>2004-05-10 17:15:04 +0000
committerWarren Dukes <warren.dukes@gmail.com>2004-05-10 17:15:04 +0000
commit5b4a0a1821aa959bfabcf480da1899e750be2b25 (patch)
treecdf07e771f905b918054e01c01a94ea074d2ae1d /src/pcm_utils.c
parent4f76ba5a427b27c9d354f2fca762eebacea5ee0c (diff)
downloadmpd-5b4a0a1821aa959bfabcf480da1899e750be2b25.tar.gz
mpd-5b4a0a1821aa959bfabcf480da1899e750be2b25.tar.xz
mpd-5b4a0a1821aa959bfabcf480da1899e750be2b25.zip
fix computation of conversion buffer size
git-svn-id: https://svn.musicpd.org/mpd/trunk@974 09075e82-0dd4-0310-85a5-a0d7c8717e4f
Diffstat (limited to 'src/pcm_utils.c')
-rw-r--r--src/pcm_utils.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/pcm_utils.c b/src/pcm_utils.c
index 5465af65e..c1be8d167 100644
--- a/src/pcm_utils.c
+++ b/src/pcm_utils.c
@@ -255,17 +255,36 @@ size_t pcm_sizeOfOutputBufferForAudioFormatConversion(AudioFormat * inFormat,
char * inBuffer, size_t inSize, AudioFormat * outFormat)
{
const int shift = sizeof(mpd_sint16);
- mpd_uint32 nlen = (((inSize >> shift) *
- (mpd_uint32)(outFormat->sampleRate)) /
- inFormat->sampleRate);
+ size_t outSize = inSize;
- nlen <<= shift;
+ switch(inFormat->bits) {
+ case 8:
+ outSize = outSize << 1;
+ break;
+ case 16:
+ break;
+ default:
+ ERROR("only 8 or 16 bits are supported for conversion!\n");
+ exit(EXIT_FAILURE);
+ }
+ switch(inFormat->channels) {
+ case 1:
+ outSize = (outSize >> 1) << 2;
+ break;
+ case 2:
+ break;
+ default:
+ ERROR("only 1 or 2 channels are supported for conversion!\n");
+ exit(EXIT_FAILURE);
+ }
+
+ outSize = (((outSize >> shift) * (mpd_uint32)(outFormat->sampleRate)) /
+ inFormat->sampleRate);
- assert(outFormat->bits==16);
- assert(outFormat->channels==2);
+ outSize <<= shift;
- return nlen;
+ return outSize;
}
/* vim:set shiftwidth=8 tabstop=8 expandtab: */