Commit a80b5cf1 authored by Max Kellermann's avatar Max Kellermann

DecoderInternal: move functions into the class

parent 44ac8476
......@@ -312,12 +312,12 @@ do_send_tag(Decoder &decoder, const Tag &tag)
if (decoder.chunk != nullptr) {
/* there is a partial chunk - flush it, we want the
tag in a new chunk */
decoder_flush_chunk(decoder);
decoder.FlushChunk();
}
assert(decoder.chunk == nullptr);
chunk = decoder_get_chunk(decoder);
chunk = decoder.GetChunk();
if (chunk == nullptr) {
assert(decoder.dc.command != DecoderCommand::NONE);
return decoder.dc.command;
......@@ -408,7 +408,7 @@ decoder_data(Decoder &decoder,
struct music_chunk *chunk;
bool full;
chunk = decoder_get_chunk(decoder);
chunk = decoder.GetChunk();
if (chunk == nullptr) {
assert(dc.command != DecoderCommand::NONE);
return dc.command;
......@@ -421,7 +421,7 @@ decoder_data(Decoder &decoder,
kbit_rate);
if (dest.IsNull()) {
/* the chunk is full, flush it */
decoder_flush_chunk(decoder);
decoder.FlushChunk();
continue;
}
......@@ -440,7 +440,7 @@ decoder_data(Decoder &decoder,
full = chunk->Expand(dc.out_audio_format, nbytes);
if (full) {
/* the chunk is full, flush it */
decoder_flush_chunk(decoder);
decoder.FlushChunk();
}
data = (const uint8_t *)data + nbytes;
......@@ -532,7 +532,7 @@ decoder_replay_gain(Decoder &decoder,
/* flush the current chunk because the new
replay gain values affect the following
samples */
decoder_flush_chunk(decoder);
decoder.FlushChunk();
}
} else
decoder.replay_gain_serial = 0;
......
......@@ -51,24 +51,21 @@ need_chunks(DecoderControl &dc)
}
struct music_chunk *
decoder_get_chunk(Decoder &decoder)
Decoder::GetChunk()
{
DecoderControl &dc = decoder.dc;
DecoderCommand cmd;
if (decoder.chunk != nullptr)
return decoder.chunk;
if (chunk != nullptr)
return chunk;
do {
decoder.chunk = dc.buffer->Allocate();
if (decoder.chunk != nullptr) {
decoder.chunk->replay_gain_serial =
decoder.replay_gain_serial;
if (decoder.replay_gain_serial != 0)
decoder.chunk->replay_gain_info =
decoder.replay_gain_info;
return decoder.chunk;
chunk = dc.buffer->Allocate();
if (chunk != nullptr) {
chunk->replay_gain_serial = replay_gain_serial;
if (replay_gain_serial != 0)
chunk->replay_gain_info = replay_gain_info;
return chunk;
}
dc.Lock();
......@@ -80,18 +77,16 @@ decoder_get_chunk(Decoder &decoder)
}
void
decoder_flush_chunk(Decoder &decoder)
Decoder::FlushChunk()
{
DecoderControl &dc = decoder.dc;
assert(decoder.chunk != nullptr);
assert(chunk != nullptr);
if (decoder.chunk->IsEmpty())
dc.buffer->Return(decoder.chunk);
if (chunk->IsEmpty())
dc.buffer->Return(chunk);
else
dc.pipe->Push(decoder.chunk);
dc.pipe->Push(chunk);
decoder.chunk = nullptr;
chunk = nullptr;
dc.Lock();
if (dc.client_is_waiting)
......
......@@ -95,23 +95,21 @@ struct Decoder {
}
~Decoder();
};
/**
* Returns the current chunk the decoder writes to, or allocates a new
* chunk if there is none.
*
* @return the chunk, or NULL if we have received a decoder command
*/
struct music_chunk *
decoder_get_chunk(Decoder &decoder);
/**
* Returns the current chunk the decoder writes to, or allocates a new
* chunk if there is none.
*
* @return the chunk, or NULL if we have received a decoder command
*/
music_chunk *GetChunk();
/**
* Flushes the current chunk.
*
* Caller must not lock the #DecoderControl object.
*/
void
decoder_flush_chunk(Decoder &decoder);
/**
* Flushes the current chunk.
*
* Caller must not lock the #DecoderControl object.
*/
void FlushChunk();
};
#endif
......@@ -356,7 +356,7 @@ decoder_run_song(DecoderControl &dc,
/* flush the last chunk */
if (decoder.chunk != nullptr)
decoder_flush_chunk(decoder);
decoder.FlushChunk();
dc.Lock();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment