flac_plugin: revert the performance optimization we did a while ago

the performance optimization was broken for big-endian architectures.
mpd-uclinux is doing using a slightly different optimization to flacWrite()
that we may end up using here in the future.


git-svn-id: https://svn.musicpd.org/mpd/trunk@3753 09075e82-0dd4-0310-85a5-a0d7c8717e4f
This commit is contained in:
Eric Wong 2005-12-31 03:40:03 +00:00
parent 63475b5a68
commit 0153a78906

View File

@ -407,11 +407,12 @@ FLAC__StreamDecoderWriteStatus flacWrite(const FLAC__SeekableStreamDecoder *dec,
{
FlacData * data = (FlacData *)vdata;
FLAC__uint32 samples = frame->header.blocksize;
int c_samp;
int c_chan;
FLAC__uint16 u16;
unsigned char * uc;
int c_samp, c_chan, d_samp;
int i;
float timeChange;
FLAC__uint64 newPosition = 0;
const int bytesPerSample = data->dc->audioFormat.bits/8;
timeChange = ((float)samples)/frame->header.sample_rate;
data->time+= timeChange;
@ -423,27 +424,22 @@ FLAC__StreamDecoderWriteStatus flacWrite(const FLAC__SeekableStreamDecoder *dec,
}
data->position = newPosition;
for(c_samp = 0; c_samp < frame->header.blocksize; c_samp++) {
for(c_chan = 0; c_chan < frame->header.channels; c_chan++) {
#ifdef WORDS_BIGENDIAN
memcpy(data->chunk+data->chunk_length,
&buf[c_chan][c_samp]+4-bytesPerSample,
bytesPerSample);
data->chunk_length+=bytesPerSample;
#else
memcpy(data->chunk+data->chunk_length,
&buf[c_chan][c_samp], bytesPerSample);
data->chunk_length+=bytesPerSample;
#endif
if(FLAC_CHUNK_SIZE-data->chunk_length < bytesPerSample)
{
if(flacSendChunk(data)<0) {
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
}
data->chunk_length = 0;
if(data->dc->seek) {
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
for(c_samp = d_samp = 0; c_samp < frame->header.blocksize; c_samp++) {
for(c_chan = 0; c_chan < frame->header.channels;
c_chan++, d_samp++) {
u16 = buf[c_chan][c_samp];
uc = (unsigned char *)&u16;
for(i=0;i<(data->dc->audioFormat.bits/8);i++) {
if(data->chunk_length>=FLAC_CHUNK_SIZE) {
if(flacSendChunk(data)<0) {
return FLAC__STREAM_DECODER_WRITE_STATUS_ABORT;
}
data->chunk_length = 0;
if(data->dc->seek) {
return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
}
}
data->chunk[data->chunk_length++] = *(uc++);
}
}
}