Commit 731e99c2 authored by Max Kellermann's avatar Max Kellermann

mpc: moved code to mpc_to_mpd_buffer()

mpc_to_mpd_buffer() converts a whole chunk at a time. This eliminates 3 local variables in mpc_decode().
parent 975d5cd7
...@@ -96,6 +96,14 @@ static inline int32_t convertSample(MPC_SAMPLE_FORMAT sample) ...@@ -96,6 +96,14 @@ static inline int32_t convertSample(MPC_SAMPLE_FORMAT sample)
} }
static void static void
mpc_to_mpd_buffer(int32_t *dest, const MPC_SAMPLE_FORMAT *src,
unsigned num_samples)
{
while (num_samples-- > 0)
*dest++ = convertSample(*src++);
}
static void
mpc_decode(struct decoder *mpd_decoder, struct input_stream *inStream) mpc_decode(struct decoder *mpd_decoder, struct input_stream *inStream)
{ {
mpc_decoder decoder; mpc_decoder decoder;
...@@ -109,14 +117,11 @@ mpc_decode(struct decoder *mpd_decoder, struct input_stream *inStream) ...@@ -109,14 +117,11 @@ mpc_decode(struct decoder *mpd_decoder, struct input_stream *inStream)
long ret; long ret;
int32_t chunk[G_N_ELEMENTS(sample_buffer)]; int32_t chunk[G_N_ELEMENTS(sample_buffer)];
int chunkpos = 0;
long bitRate = 0; long bitRate = 0;
int32_t *dest = chunk;
unsigned long samplePos = 0; unsigned long samplePos = 0;
mpc_uint32_t vbrUpdateAcc; mpc_uint32_t vbrUpdateAcc;
mpc_uint32_t vbrUpdateBits; mpc_uint32_t vbrUpdateBits;
float total_time; float total_time;
int i;
struct replay_gain_info *replayGainInfo = NULL; struct replay_gain_info *replayGainInfo = NULL;
data.inStream = inStream; data.inStream = inStream;
...@@ -163,11 +168,9 @@ mpc_decode(struct decoder *mpd_decoder, struct input_stream *inStream) ...@@ -163,11 +168,9 @@ mpc_decode(struct decoder *mpd_decoder, struct input_stream *inStream)
if (decoder_get_command(mpd_decoder) == DECODE_COMMAND_SEEK) { if (decoder_get_command(mpd_decoder) == DECODE_COMMAND_SEEK) {
samplePos = decoder_seek_where(mpd_decoder) * samplePos = decoder_seek_where(mpd_decoder) *
audio_format.sample_rate; audio_format.sample_rate;
if (mpc_decoder_seek_sample(&decoder, samplePos)) { if (mpc_decoder_seek_sample(&decoder, samplePos))
dest = chunk;
chunkpos = 0;
decoder_command_finished(mpd_decoder); decoder_command_finished(mpd_decoder);
} else else
decoder_seek_error(mpd_decoder); decoder_seek_error(mpd_decoder);
} }
...@@ -184,22 +187,17 @@ mpc_decode(struct decoder *mpd_decoder, struct input_stream *inStream) ...@@ -184,22 +187,17 @@ mpc_decode(struct decoder *mpd_decoder, struct input_stream *inStream)
/* ret is in samples, and we have stereo */ /* ret is in samples, and we have stereo */
ret *= 2; ret *= 2;
for (i = 0; i < ret; i++) { mpc_to_mpd_buffer(chunk, sample_buffer, ret);
*dest++ = convertSample(sample_buffer[i]);
chunkpos += sizeof(*dest);
}
total_time = ((float)samplePos) / audio_format.sample_rate; total_time = ((float)samplePos) / audio_format.sample_rate;
bitRate = vbrUpdateBits * audio_format.sample_rate bitRate = vbrUpdateBits * audio_format.sample_rate
/ 1152 / 1000; / 1152 / 1000;
decoder_data(mpd_decoder, inStream, decoder_data(mpd_decoder, inStream,
chunk, chunkpos, chunk, ret * sizeof(chunk[0]),
total_time, total_time,
bitRate, replayGainInfo); bitRate, replayGainInfo);
dest = chunk;
if (decoder_get_command(mpd_decoder) == DECODE_COMMAND_STOP) if (decoder_get_command(mpd_decoder) == DECODE_COMMAND_STOP)
break; break;
} }
......
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