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:
@@ -267,18 +267,25 @@ static void flac_convert(unsigned char *dest,
|
|||||||
const FLAC__int32 * const buf[],
|
const FLAC__int32 * const buf[],
|
||||||
unsigned int position, unsigned int end)
|
unsigned int position, unsigned int end)
|
||||||
{
|
{
|
||||||
unsigned int c_chan, i;
|
switch (bytes_per_sample) {
|
||||||
FLAC__uint16 u16;
|
case 2:
|
||||||
unsigned char *uc;
|
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) {
|
case 4:
|
||||||
for (c_chan = 0; c_chan < num_channels; c_chan++) {
|
flac_convert_32((int32_t*)dest, num_channels, buf,
|
||||||
u16 = buf[c_chan][position];
|
position, end);
|
||||||
uc = (unsigned char *)&u16;
|
break;
|
||||||
for (i = 0; i < bytes_per_sample; i++) {
|
|
||||||
*dest++ = *uc++;
|
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;
|
const unsigned int max_samples = FLAC_CHUNK_SIZE / bytes_per_channel;
|
||||||
unsigned int num_samples;
|
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;
|
for (c_samp = 0; c_samp < frame->header.blocksize;
|
||||||
c_samp += num_samples) {
|
c_samp += num_samples) {
|
||||||
@@ -303,26 +313,10 @@ flac_common_write(FlacData *data, const FLAC__Frame * frame,
|
|||||||
if (num_samples > max_samples)
|
if (num_samples > max_samples)
|
||||||
num_samples = max_samples;
|
num_samples = max_samples;
|
||||||
|
|
||||||
if (num_channels == 2 && bytes_per_sample == 2)
|
flac_convert(data->chunk,
|
||||||
flac_convert_stereo16((int16_t*)data->chunk,
|
num_channels, bytes_per_sample, buf,
|
||||||
buf, c_samp,
|
c_samp, c_samp + num_samples);
|
||||||
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);
|
|
||||||
data->chunk_length = num_samples * bytes_per_channel;
|
data->chunk_length = num_samples * bytes_per_channel;
|
||||||
|
|
||||||
if (flacSendChunk(data) < 0) {
|
if (flacSendChunk(data) < 0) {
|
||||||
|
Reference in New Issue
Block a user