summaryrefslogtreecommitdiff
path: root/src/libFLAC/seekable_stream_encoder.c
diff options
context:
space:
mode:
authorJosh Coalson <jcoalson@users.sourceforce.net>2002-11-08 06:05:23 +0000
committerJosh Coalson <jcoalson@users.sourceforce.net>2002-11-08 06:05:23 +0000
commitd9b6e335cac6580c09b9c80a99bfc54b7f91aeeb (patch)
treea3a3f915cca48c8ff061e3273c67a9b843a3644e /src/libFLAC/seekable_stream_encoder.c
parent1786393e759e8bccdb8825d9dd215fd28f55c163 (diff)
downloadflac-d9b6e335cac6580c09b9c80a99bfc54b7f91aeeb.tar.gz
fix bug in seekpoint calculation in the final frame
Diffstat (limited to 'src/libFLAC/seekable_stream_encoder.c')
-rw-r--r--src/libFLAC/seekable_stream_encoder.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libFLAC/seekable_stream_encoder.c b/src/libFLAC/seekable_stream_encoder.c
index fe666a8c..a7888c0a 100644
--- a/src/libFLAC/seekable_stream_encoder.c
+++ b/src/libFLAC/seekable_stream_encoder.c
@@ -60,6 +60,7 @@ typedef struct FLAC__SeekableStreamEncoderPrivate {
unsigned first_seekpoint_to_check;
FLAC__uint64 stream_offset, seektable_offset;
FLAC__uint64 bytes_written;
+ FLAC__uint64 samples_written;
} FLAC__SeekableStreamEncoderPrivate;
/***********************************************************************
@@ -176,6 +177,7 @@ FLAC_API FLAC__SeekableStreamEncoderState FLAC__seekable_stream_encoder_init(FLA
encoder->private_->stream_offset = 0;
encoder->private_->seektable_offset = 0;
encoder->private_->bytes_written = 0;
+ encoder->private_->samples_written = 0;
FLAC__stream_encoder_set_write_callback(encoder->private_->stream_encoder, write_callback_);
FLAC__stream_encoder_set_metadata_callback(encoder->private_->stream_encoder, metadata_callback_);
@@ -693,9 +695,8 @@ FLAC__StreamEncoderWriteStatus write_callback_(const FLAC__StreamEncoder *encode
* frame yet)
*/
if(0 != seekable_stream_encoder->private_->seek_table && seekable_stream_encoder->private_->stream_offset > 0 && seekable_stream_encoder->private_->seek_table->num_points > 0) {
- /*@@@ WATCHOUT: assumes the encoder is fixed-blocksize, which will be true indefinitely: */
const unsigned blocksize = FLAC__stream_encoder_get_blocksize(encoder);
- const FLAC__uint64 frame_first_sample = (FLAC__uint64)current_frame * (FLAC__uint64)blocksize;
+ const FLAC__uint64 frame_first_sample = seekable_stream_encoder->private_->samples_written;
const FLAC__uint64 frame_last_sample = frame_first_sample + (FLAC__uint64)blocksize - 1;
FLAC__uint64 test_sample;
unsigned i;
@@ -724,8 +725,10 @@ FLAC__StreamEncoderWriteStatus write_callback_(const FLAC__StreamEncoder *encode
status = seekable_stream_encoder->private_->write_callback(seekable_stream_encoder, buffer, bytes, samples, current_frame, seekable_stream_encoder->private_->client_data);
- if(status == FLAC__STREAM_ENCODER_WRITE_STATUS_OK)
+ if(status == FLAC__STREAM_ENCODER_WRITE_STATUS_OK) {
seekable_stream_encoder->private_->bytes_written += bytes;
+ seekable_stream_encoder->private_->samples_written += samples;
+ }
else
seekable_stream_encoder->protected_->state = FLAC__SEEKABLE_STREAM_ENCODER_WRITE_ERROR;