From 7626d9a547e9a8dfadbcf0dc148fcef4e61bb2cd Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Mon, 10 May 2004 14:06:23 +0000 Subject: more little bits of code in prep for resample/audioFormat conversion, now to just write the actual audioFormat conversion code! git-svn-id: https://svn.musicpd.org/mpd/trunk@970 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/outputBuffer.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'src/outputBuffer.c') diff --git a/src/outputBuffer.c b/src/outputBuffer.c index 1861fe45a..615139231 100644 --- a/src/outputBuffer.c +++ b/src/outputBuffer.c @@ -38,10 +38,32 @@ void flushOutputBuffer(OutputBuffer * cb) { } int sendDataToOutputBuffer(OutputBuffer * cb, DecoderControl * dc, - char * data, long datalen, float time, mpd_uint16 bitRate) + char * dataIn, long dataInLen, float time, mpd_uint16 bitRate) { mpd_uint16 dataToSend; mpd_uint16 chunkLeft; + char * data; + size_t datalen; + static char * convBuffer = NULL; + static long convBufferLen = 0; + + if(memcmp(&(cb->audioFormat),&(dc->audioFormat),sizeof(AudioFormat))==0) + { + data = dataIn; + datalen = dataInLen; + } + else { + datalen = pcm_sizeOfOutputBufferForAudioFormatConversion( + &(dc->audioFormat), dataIn, dataInLen, + &(cb->audioFormat)); + if(datalen > convBufferLen) { + convBuffer = realloc(convBuffer,datalen); + convBufferLen = datalen; + } + data = convBuffer; + pcm_convertAudioFormat(&(dc->audioFormat), dataIn, dataInLen, + &(cb->audioFormat),data); + } while(datalen) { if(currentChunk != cb->end) { -- cgit v1.2.3