flac: removed generic sample size support

Support for bit rates except 16 bits (and 8 bits on little endian) has
always been broken.  Since we added optimized functions for 8, 16,
24/32 bits, we can remove the generic flac_convert() function.
Instead of removing it, convert it to a wrapper function for
flac_convert_*().
This commit is contained in:
Max Kellermann 2008-09-23 23:59:55 +02:00
parent 19971be307
commit eeb3011070
1 changed files with 26 additions and 32 deletions

View File

@ -267,18 +267,25 @@ static void flac_convert(unsigned char *dest,
const FLAC__int32 * const buf[],
unsigned int position, unsigned int end)
{
unsigned int c_chan, i;
FLAC__uint16 u16;
unsigned char *uc;
switch (bytes_per_sample) {
case 2:
if (num_channels == 2)
flac_convert_stereo16((int16_t*)dest, buf,
position, end);
else
flac_convert_16((int16_t*)dest, num_channels, buf,
position, end);
break;
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++;
}
}
case 4:
flac_convert_32((int32_t*)dest, num_channels, buf,
position, end);
break;
case 1:
flac_convert_8((int8_t*)dest, num_channels, buf,
position, end);
break;
}
}
@ -295,7 +302,10 @@ flac_common_write(FlacData *data, const FLAC__Frame * frame,
const unsigned int max_samples = FLAC_CHUNK_SIZE / bytes_per_channel;
unsigned int num_samples;
assert(data->audio_format.bits > 0);
if (bytes_per_sample != 1 && bytes_per_sample != 2 &&
bytes_per_sample != 4)
/* exotic unsupported bit rate */
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
for (c_samp = 0; c_samp < frame->header.blocksize;
c_samp += num_samples) {
@ -303,26 +313,10 @@ flac_common_write(FlacData *data, const FLAC__Frame * frame,
if (num_samples > max_samples)
num_samples = max_samples;
if (num_channels == 2 && bytes_per_sample == 2)
flac_convert_stereo16((int16_t*)data->chunk,
buf, c_samp,
c_samp + num_samples);
else if (bytes_per_sample == 2)
flac_convert_16((int16_t*)data->chunk,
num_channels, buf, c_samp,
c_samp + num_samples);
else if (bytes_per_sample == 4)
flac_convert_32((int32_t*)data->chunk,
num_channels, buf, c_samp,
c_samp + num_samples);
else if (bytes_per_sample == 1)
flac_convert_8((int8_t*)data->chunk,
num_channels, buf, c_samp,
c_samp + num_samples);
else
flac_convert(data->chunk,
num_channels, bytes_per_sample, buf,
c_samp, c_samp + num_samples);
flac_convert(data->chunk,
num_channels, bytes_per_sample, buf,
c_samp, c_samp + num_samples);
data->chunk_length = num_samples * bytes_per_channel;
if (flacSendChunk(data) < 0) {