aboutsummaryrefslogtreecommitdiffstats
path: root/src/inputPlugins/oggflac_plugin.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-09-23 23:59:54 +0200
committerEric Wong <normalperson@yhbt.net>2008-09-29 01:50:43 -0700
commita1c420d3f82da922821de8fd85bbea5eae54c3c3 (patch)
treeabc873ac26655b9782d17649d162110ddfa2c3a3 /src/inputPlugins/oggflac_plugin.c
parentcc7fbb61e13ead2b4637f28aaa0c61441aed84a2 (diff)
downloadmpd-a1c420d3f82da922821de8fd85bbea5eae54c3c3.tar.gz
mpd-a1c420d3f82da922821de8fd85bbea5eae54c3c3.tar.xz
mpd-a1c420d3f82da922821de8fd85bbea5eae54c3c3.zip
flac: moved code from flacWrite() to _flac_common.c
There is still a lot of duplicated code in flac_plugin.c and oggflac_plugin.c. Move code from flac_plugin.c to _flac_common.c, and use the new function flac_common_write() also in oggflac_plugin.c, porting lots of optimizations over to it.
Diffstat (limited to 'src/inputPlugins/oggflac_plugin.c')
-rw-r--r--src/inputPlugins/oggflac_plugin.c44
1 files changed, 1 insertions, 43 deletions
diff --git a/src/inputPlugins/oggflac_plugin.c b/src/inputPlugins/oggflac_plugin.c
index 841030481..49da3dd39 100644
--- a/src/inputPlugins/oggflac_plugin.c
+++ b/src/inputPlugins/oggflac_plugin.c
@@ -162,51 +162,12 @@ static FLAC__StreamDecoderWriteStatus oggflacWrite(mpd_unused const
{
FlacData *data = (FlacData *) vdata;
FLAC__uint32 samples = frame->header.blocksize;
- FLAC__uint16 u16;
- unsigned char *uc;
- unsigned int c_samp, c_chan;
- int i;
float timeChange;
timeChange = ((float)samples) / frame->header.sample_rate;
data->time += timeChange;
- /* ogg123 uses a complicated method of calculating bitrate
- * with averaging which I'm not too fond of.
- * (waste of memory/CPU cycles, especially given this is _lossless_)
- * a get_decode_position() is not available in OggFLAC, either
- *
- * this does not give an accurate bitrate:
- * (bytes_last_read was set in the read callback)
- data->bitRate = ((8.0 * data->bytes_last_read *
- frame->header.sample_rate)
- /((float)samples * 1000)) + 0.5;
- */
-
- for (c_samp = 0; c_samp < frame->header.blocksize; c_samp++) {
- for (c_chan = 0; c_chan < frame->header.channels;
- c_chan++) {
- u16 = buf[c_chan][c_samp];
- uc = (unsigned char *)&u16;
- for (i = 0; i < (dc.audio_format.bits / 8); i++) {
- if (data->chunk_length >= FLAC_CHUNK_SIZE) {
- /* FIXME: line wrapping */
- 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:
- /* compilers are complainers */
- break;
- }
- }
- data->chunk[data->chunk_length++] = *(uc++);
- }
- }
- }
-
- return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE;
+ return flac_common_write(data, frame, buf);
}
/* used by TagDup */
@@ -380,9 +341,6 @@ static int oggflac_decode(InputStream * inStream)
(OggFLAC__seekable_stream_decoder_get_state(decoder));
OggFLAC__seekable_stream_decoder_finish(decoder);
}
- /* send last little bit */
- if (data.chunk_length > 0 && !dc_intr())
- flacSendChunk(&data);
fail:
oggflac_cleanup(&data, decoder);