aboutsummaryrefslogtreecommitdiffstats
path: root/src/inputPlugins/flac_plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/inputPlugins/flac_plugin.c')
-rw-r--r--src/inputPlugins/flac_plugin.c69
1 files changed, 1 insertions, 68 deletions
diff --git a/src/inputPlugins/flac_plugin.c b/src/inputPlugins/flac_plugin.c
index f66ca4845..2bf5a29bf 100644
--- a/src/inputPlugins/flac_plugin.c
+++ b/src/inputPlugins/flac_plugin.c
@@ -199,39 +199,6 @@ static void flacMetadata(mpd_unused const flac_decoder * dec,
flac_metadata_common_cb(block, (FlacData *) vdata);
}
-static void flac_convert_stereo16(unsigned char *dest,
- const FLAC__int32 * const buf[],
- unsigned int position, unsigned int end)
-{
- for (; position < end; ++position) {
- *(uint16_t*)dest = buf[0][position];
- dest += 2;
- *(uint16_t*)dest = buf[1][position];
- dest += 2;
- }
-}
-
-static void flac_convert(unsigned char *dest,
- unsigned int num_channels,
- unsigned int bytes_per_sample,
- const FLAC__int32 * const buf[],
- unsigned int position, unsigned int end)
-{
- unsigned int c_chan, i;
- FLAC__uint16 u16;
- unsigned char *uc;
-
- for (; position < end; ++position) {
- for (c_chan = 0; c_chan < num_channels; c_chan++) {
- u16 = buf[c_chan][position];
- uc = (unsigned char *)&u16;
- for (i = 0; i < bytes_per_sample; i++) {
- *dest++ = *uc++;
- }
- }
- }
-}
-
static FLAC__StreamDecoderWriteStatus flacWrite(const flac_decoder *dec,
const FLAC__Frame * frame,
const FLAC__int32 * const buf[],
@@ -239,18 +206,9 @@ static FLAC__StreamDecoderWriteStatus flacWrite(const flac_decoder *dec,
{
FlacData *data = (FlacData *) vdata;
FLAC__uint32 samples = frame->header.blocksize;
- unsigned int c_samp;
- const unsigned int num_channels = frame->header.channels;
- const unsigned int bytes_per_sample = (dc.audio_format.bits / 8);
- const unsigned int bytes_per_channel =
- bytes_per_sample * frame->header.channels;
- const unsigned int max_samples = FLAC_CHUNK_SIZE / bytes_per_channel;
- unsigned int num_samples;
float timeChange;
FLAC__uint64 newPosition = 0;
- assert(dc.audio_format.bits > 0);
-
timeChange = ((float)samples) / frame->header.sample_rate;
data->time += timeChange;
@@ -264,32 +222,7 @@ static FLAC__StreamDecoderWriteStatus flacWrite(const flac_decoder *dec,
}
data->position = newPosition;
- for (c_samp = 0; c_samp < frame->header.blocksize;
- c_samp += num_samples) {
- num_samples = frame->header.blocksize - c_samp;
- if (num_samples > max_samples)
- num_samples = max_samples;
-
- if (num_channels == 2 && bytes_per_sample == 2)
- flac_convert_stereo16(data->chunk,
- buf, c_samp,
- c_samp + num_samples);
- else
- flac_convert(data->chunk,
- num_channels, bytes_per_sample, buf,
- c_samp, c_samp + num_samples);
- data->chunk_length = num_samples * bytes_per_channel;
-
- switch (flacSendChunk(data)) {
- case DC_ACTION_STOP:
- return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
- case DC_ACTION_SEEK:
- return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
- default: break; /* compilers are complainers */
- }
- }
-
- return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
+ return flac_common_write(data, frame, buf);
}
static struct mpd_tag *flacMetadataDup(char *file, int *vorbisCommentFound)