moved currentChunk into OutputBuffer

currentChunk is a global variable, which renders the whole output
buffer code non-reentrant.  Although this is not a real problem since
there is only one global output buffer currently, we should move it to
the OutputBuffer struct.

git-svn-id: https://svn.musicpd.org/mpd/trunk@7284 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Max Kellermann 2008-04-12 04:14:50 +00:00 committed by Eric Wong
parent 4ee8396f41
commit 079f13bc7d
2 changed files with 11 additions and 10 deletions

View File

@ -26,28 +26,27 @@
#include "conf.h" #include "conf.h"
#include "os_compat.h" #include "os_compat.h"
static mpd_sint16 currentChunk = -1;
void initOutputBuffer(OutputBuffer * cb, OutputBufferChunk * chunks) void initOutputBuffer(OutputBuffer * cb, OutputBufferChunk * chunks)
{ {
memset(&cb->convState, 0, sizeof(ConvState)); memset(&cb->convState, 0, sizeof(ConvState));
cb->chunks = chunks; cb->chunks = chunks;
cb->currentChunk = -1;
} }
void clearOutputBuffer(OutputBuffer * cb) void clearOutputBuffer(OutputBuffer * cb)
{ {
cb->end = cb->begin; cb->end = cb->begin;
currentChunk = -1; cb->currentChunk = -1;
} }
void flushOutputBuffer(OutputBuffer * cb) void flushOutputBuffer(OutputBuffer * cb)
{ {
if (currentChunk == cb->end) { if (cb->currentChunk == cb->end) {
if (((unsigned)cb->end + 1) >= buffered_chunks) { if (((unsigned)cb->end + 1) >= buffered_chunks) {
cb->end = 0; cb->end = 0;
} }
else cb->end++; else cb->end++;
currentChunk = -1; cb->currentChunk = -1;
} }
} }
@ -119,8 +118,8 @@ static int tailChunk(OutputBuffer * cb, InputStream * inStream,
unsigned int next; unsigned int next;
OutputBufferChunk *chunk; OutputBufferChunk *chunk;
if (currentChunk == cb->end) if (cb->currentChunk == cb->end)
return currentChunk; return cb->currentChunk;
next = cb->end + 1; next = cb->end + 1;
if (next >= buffered_chunks) { if (next >= buffered_chunks) {
@ -144,13 +143,13 @@ static int tailChunk(OutputBuffer * cb, InputStream * inStream,
if (dc->stop) if (dc->stop)
return OUTPUT_BUFFER_DC_STOP; return OUTPUT_BUFFER_DC_STOP;
currentChunk = cb->end; cb->currentChunk = cb->end;
chunk = outputBufferGetChunk(cb, currentChunk); chunk = outputBufferGetChunk(cb, cb->currentChunk);
chunk->chunkSize = 0; chunk->chunkSize = 0;
chunk->bitRate = bitRate; chunk->bitRate = bitRate;
chunk->times = data_time; chunk->times = data_time;
return currentChunk; return cb->currentChunk;
} }
int sendDataToOutputBuffer(OutputBuffer * cb, InputStream * inStream, int sendDataToOutputBuffer(OutputBuffer * cb, InputStream * inStream,

View File

@ -52,6 +52,8 @@ typedef struct _OutputBuffer {
/** the index after the last decoded chunk */ /** the index after the last decoded chunk */
mpd_uint16 volatile end; mpd_uint16 volatile end;
mpd_sint16 currentChunk;
AudioFormat audioFormat; AudioFormat audioFormat;
ConvState convState; ConvState convState;
} OutputBuffer; } OutputBuffer;