[Flac-dev] better seeking
Miroslav Lichvar
lichvarm at phoenix.inf.upol.cz
Tue Nov 7 01:25:04 PST 2006
On Mon, Nov 06, 2006 at 08:50:44AM -0800, Josh Coalson wrote:
> ok, tried it out... passes test/test_seeking.sh and my
> "xmms twitch" test, checked in to CVS. thanks!
Thanks!
I see you have changed the channels and bps setting, this doesn't work
when the decoder hasn't decoded a frame. There should be a fallback
for this case.
--
Miroslav Lichvar
-------------- next part --------------
Index: stream_decoder.c
===================================================================
RCS file: /cvsroot/flac/flac/src/libFLAC/stream_decoder.c,v
retrieving revision 1.119
diff -u -r1.119 stream_decoder.c
--- stream_decoder.c 6 Nov 2006 16:48:33 -0000 1.119
+++ stream_decoder.c 7 Nov 2006 09:13:30 -0000
@@ -2935,10 +2935,16 @@
const unsigned max_framesize = decoder->private_->stream_info.data.stream_info.max_framesize;
const unsigned min_framesize = decoder->private_->stream_info.data.stream_info.min_framesize;
/* take these from the current frame in case they've changed mid-stream */
- const unsigned channels = FLAC__stream_decoder_get_channels(decoder);
- const unsigned bps = FLAC__stream_decoder_get_bits_per_sample(decoder);
+ unsigned channels = FLAC__stream_decoder_get_channels(decoder);
+ unsigned bps = FLAC__stream_decoder_get_bits_per_sample(decoder);
const FLAC__StreamMetadata_SeekTable *seek_table = decoder->private_->has_seek_table? &decoder->private_->seek_table.data.seek_table : 0;
+ /* use values from stream info if we didn't decode a frame */
+ if (channels == 0)
+ channels = decoder->private_->stream_info.data.stream_info.channels;
+ if (bps == 0)
+ bps = decoder->private_->stream_info.data.stream_info.bits_per_sample;
+
/* we are just guessing here */
if(max_framesize > 0)
approx_bytes_per_frame = (max_framesize + min_framesize) / 2 + 1;
More information about the Flac-dev
mailing list