[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