diff options
author | Max Kellermann <max@duempel.org> | 2008-08-26 08:27:13 +0200 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2008-08-30 19:44:08 -0700 |
commit | 66ecc1901ad51a1c8a54064fd5ac33454a7cd4b2 (patch) | |
tree | e0fcb4844a690b44298b4bae975b73cd127b9d84 /src | |
parent | c9c9a7c7742afa59990cd1a3f1d52d2ab8c486d1 (diff) | |
download | mpd-66ecc1901ad51a1c8a54064fd5ac33454a7cd4b2.tar.gz mpd-66ecc1901ad51a1c8a54064fd5ac33454a7cd4b2.tar.xz mpd-66ecc1901ad51a1c8a54064fd5ac33454a7cd4b2.zip |
mp3: eliminated outputPtr
The output buffer is always flushed after being appended to, which
allows us to assume it is always empty. Always start writing at
outputBuffer, don't remember outputPtr.
Diffstat (limited to 'src')
-rw-r--r-- | src/inputPlugins/mp3_plugin.c | 26 |
1 files changed, 9 insertions, 17 deletions
diff --git a/src/inputPlugins/mp3_plugin.c b/src/inputPlugins/mp3_plugin.c index 5e217c6ee..16770e63f 100644 --- a/src/inputPlugins/mp3_plugin.c +++ b/src/inputPlugins/mp3_plugin.c @@ -151,8 +151,6 @@ typedef struct _mp3DecodeData { mad_timer_t timer; unsigned char readBuffer[READ_BUFFER_SIZE]; char outputBuffer[MP3_DATA_OUTPUT_BUFFER_SIZE]; - char *outputPtr; - char *outputBufferEnd; float totalTime; float elapsedTime; int muteFrame; @@ -176,9 +174,6 @@ typedef struct _mp3DecodeData { static void initMp3DecodeData(mp3DecodeData * data, InputStream * inStream) { - data->outputPtr = data->outputBuffer; - data->outputBufferEnd = - data->outputBuffer + MP3_DATA_OUTPUT_BUFFER_SIZE; data->muteFrame = 0; data->highestFrame = 0; data->maxFrames = 0; @@ -844,12 +839,10 @@ static void mp3Read_seek(mp3DecodeData * data) j++; if (j < data->highestFrame) { dc_action_begin(); - if (seekMp3InputBuffer(data, data->frameOffset[j]) < 0) { + if (seekMp3InputBuffer(data, data->frameOffset[j]) < 0) dc.seek_where = DC_SEEK_ERROR; - } else { - data->outputPtr = data->outputBuffer; + else data->currentFrame = j; - } data->muteFrame = 0; dc_action_end(); } @@ -897,7 +890,6 @@ static int mp3Read(mp3DecodeData * data, ReplayGainInfo ** replayGainInfo) if (dc.seek_where <= data->elapsedTime) { dc_action_begin(); assert(dc.action == DC_ACTION_SEEK); - data->outputPtr = data->outputBuffer; data->muteFrame = 0; dc_action_end(); } @@ -955,29 +947,29 @@ static int mp3Read(mp3DecodeData * data, ReplayGainInfo ** replayGainInfo) while (i < pcm_length) { enum dc_action action; - unsigned int num_samples = - (data->outputBufferEnd - data->outputPtr) / + unsigned int num_samples = sizeof(data->outputBuffer) / (2 * MAD_NCHANNELS(&(data->frame).header)); + if (num_samples > pcm_length - i) num_samples = pcm_length - i; i += num_samples; - num_samples = dither_buffer((mpd_sint16 *) data->outputPtr, + num_samples = dither_buffer((mpd_sint16 *) + data->outputBuffer, &data->synth, &data->dither, i - num_samples, i, - MAD_NCHANNELS(&(data->frame).header)); - data->outputPtr += 2 * num_samples; + MAD_NCHANNELS( + &(data->frame).header)); action = ob_send(data->outputBuffer, - data->outputPtr - data->outputBuffer, + 2 * num_samples, data->elapsedTime, data->bitRate / 1000, replayGainInfo ? *replayGainInfo : NULL); if (action == DC_ACTION_STOP) return DECODE_BREAK; - data->outputPtr = data->outputBuffer; if (action == DC_ACTION_SEEK) break; |