--- libsndfile-1.0.17/src/flac.c.orig 2006-08-31 11:22:19.000000000 +0200 +++ libsndfile-1.0.17/src/flac.c 2006-12-24 18:01:46.197783626 +0100 @@ -60,8 +60,8 @@ } PFLAC_PCM ; typedef struct -{ FLAC__SeekableStreamDecoder *fsd ; - FLAC__SeekableStreamEncoder *fse ; +{ FLAC__StreamDecoder *fsd ; + FLAC__StreamEncoder *fse ; PFLAC_PCM pcmtype ; void* ptr ; unsigned pos, len, remain ; @@ -108,21 +108,19 @@ static int flac_command (SF_PRIVATE *psf, int command, void *data, int datasize) ; /* Decoder Callbacks */ -static FLAC__SeekableStreamDecoderReadStatus sf_flac_read_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer [], unsigned *bytes, void *client_data) ; -static FLAC__SeekableStreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; -static FLAC__SeekableStreamDecoderTellStatus sf_flac_tell_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; -static FLAC__SeekableStreamDecoderLengthStatus sf_flac_length_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) ; -static FLAC__bool sf_flac_eof_callback (const FLAC__SeekableStreamDecoder *decoder, void *client_data) ; -static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ; -static void sf_flac_meta_callback (const FLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ; -static void sf_flac_error_callback (const FLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ; +static FLAC__StreamDecoderReadStatus sf_flac_read_callback (const FLAC__StreamDecoder *decoder, FLAC__byte buffer [], unsigned *bytes, void *client_data) ; +static FLAC__StreamDecoderSeekStatus sf_flac_seek_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; +static FLAC__StreamDecoderTellStatus sf_flac_tell_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; +static FLAC__StreamDecoderLengthStatus sf_flac_length_callback (const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data) ; +static FLAC__bool sf_flac_eof_callback (const FLAC__StreamDecoder *decoder, void *client_data) ; +static FLAC__StreamDecoderWriteStatus sf_flac_write_callback (const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) ; +static void sf_flac_meta_callback (const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) ; +static void sf_flac_error_callback (const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data) ; /* Encoder Callbacks */ -static FLAC__SeekableStreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; -#ifdef HAVE_FLAC_1_1_1 -static FLAC__SeekableStreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; -#endif -static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder *encoder, const FLAC__byte buffer [], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data) ; +static FLAC__StreamEncoderSeekStatus sf_flac_enc_seek_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data) ; +static FLAC__StreamEncoderTellStatus sf_flac_enc_tell_callback (const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data) ; +static FLAC__StreamEncoderWriteStatus sf_flac_enc_write_callback (const FLAC__StreamEncoder *encoder, const FLAC__byte buffer [], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data) ; static const int legal_sample_rates [] = { 8000, 16000, 22050, 24000, 32000, 44100, 48000, 96000 @@ -283,51 +281,51 @@ } /* flac_buffer_copy */ -static FLAC__SeekableStreamDecoderReadStatus -sf_flac_read_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__byte buffer [], unsigned *bytes, void *client_data) +static FLAC__StreamDecoderReadStatus +sf_flac_read_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__byte buffer [], unsigned *bytes, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; *bytes = psf_fread (buffer, 1, *bytes, psf) ; if (*bytes > 0 && psf->error == 0) - return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_OK ; + return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE ; - return FLAC__SEEKABLE_STREAM_DECODER_READ_STATUS_ERROR ; + return FLAC__STREAM_DECODER_READ_STATUS_ABORT ; } /* sf_flac_read_callback */ -static FLAC__SeekableStreamDecoderSeekStatus -sf_flac_seek_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data) +static FLAC__StreamDecoderSeekStatus +sf_flac_seek_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 absolute_byte_offset, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; psf_fseek (psf, absolute_byte_offset, SEEK_SET) ; if (psf->error) - return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_ERROR ; + return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR ; - return FLAC__SEEKABLE_STREAM_DECODER_SEEK_STATUS_OK ; + return FLAC__STREAM_DECODER_SEEK_STATUS_OK ; } /* sf_flac_seek_callback */ -static FLAC__SeekableStreamDecoderTellStatus -sf_flac_tell_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data) +static FLAC__StreamDecoderTellStatus +sf_flac_tell_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *absolute_byte_offset, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; *absolute_byte_offset = psf_ftell (psf) ; if (psf->error) - return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_ERROR ; + return FLAC__STREAM_DECODER_TELL_STATUS_ERROR ; - return FLAC__SEEKABLE_STREAM_DECODER_TELL_STATUS_OK ; + return FLAC__STREAM_DECODER_TELL_STATUS_OK ; } /* sf_flac_tell_callback */ -static FLAC__SeekableStreamDecoderLengthStatus -sf_flac_length_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data) +static FLAC__StreamDecoderLengthStatus +sf_flac_length_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__uint64 *stream_length, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; if ((*stream_length = psf->filelength) == 0) - return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_ERROR ; + return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR ; - return FLAC__SEEKABLE_STREAM_DECODER_LENGTH_STATUS_OK ; + return FLAC__STREAM_DECODER_LENGTH_STATUS_OK ; } /* sf_flac_length_callback */ static FLAC__bool -sf_flac_eof_callback (const FLAC__SeekableStreamDecoder *UNUSED (decoder), void *client_data) +sf_flac_eof_callback (const FLAC__StreamDecoder *UNUSED (decoder), void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; if (psf_ftell (psf) == psf->filelength) @@ -337,7 +335,7 @@ } /* sf_flac_eof_callback */ static FLAC__StreamDecoderWriteStatus -sf_flac_write_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) +sf_flac_write_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__Frame *frame, const FLAC__int32 * const buffer [], void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ; @@ -353,7 +351,7 @@ } /* sf_flac_write_callback */ static void -sf_flac_meta_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data) +sf_flac_meta_callback (const FLAC__StreamDecoder * UNUSED (decoder), const FLAC__StreamMetadata *metadata, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; switch (metadata->type) @@ -387,7 +385,7 @@ } /* sf_flac_meta_callback */ static void -sf_flac_error_callback (const FLAC__SeekableStreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data) +sf_flac_error_callback (const FLAC__StreamDecoder * UNUSED (decoder), FLAC__StreamDecoderErrorStatus status, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; psf_log_printf (psf, "ERROR : %s\n", FLAC__StreamDecoderErrorStatusString [status]) ; @@ -407,32 +405,30 @@ return ; } /* sf_flac_error_callback */ -static FLAC__SeekableStreamEncoderSeekStatus -sf_flac_enc_seek_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data) +static FLAC__StreamEncoderSeekStatus +sf_flac_enc_seek_callback (const FLAC__StreamEncoder * UNUSED (encoder), FLAC__uint64 absolute_byte_offset, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; psf_fseek (psf, absolute_byte_offset, SEEK_SET) ; if (psf->error) - return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_ERROR ; + return FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR ; - return FLAC__SEEKABLE_STREAM_ENCODER_SEEK_STATUS_OK ; + return FLAC__STREAM_ENCODER_SEEK_STATUS_OK ; } /* sf_flac_enc_seek_callback */ -#ifdef HAVE_FLAC_1_1_1 -static FLAC__SeekableStreamEncoderTellStatus -sf_flac_enc_tell_callback (const FLAC__SeekableStreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data) +static FLAC__StreamEncoderTellStatus +sf_flac_enc_tell_callback (const FLAC__StreamEncoder *UNUSED (encoder), FLAC__uint64 *absolute_byte_offset, void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; *absolute_byte_offset = psf_ftell (psf) ; if (psf->error) - return FLAC__SEEKABLE_STREAM_ENCODER_TELL_STATUS_ERROR ; + return FLAC__STREAM_ENCODER_TELL_STATUS_ERROR ; - return FLAC__SEEKABLE_STREAM_ENCODER_TELL_STATUS_OK ; + return FLAC__STREAM_ENCODER_TELL_STATUS_OK ; } /* sf_flac_enc_tell_callback */ -#endif static FLAC__StreamEncoderWriteStatus -sf_flac_enc_write_callback (const FLAC__SeekableStreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], unsigned bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data) +sf_flac_enc_write_callback (const FLAC__StreamEncoder * UNUSED (encoder), const FLAC__byte buffer [], unsigned bytes, unsigned UNUSED (samples), unsigned UNUSED (current_frame), void *client_data) { SF_PRIVATE *psf = (SF_PRIVATE*) client_data ; if (psf_fwrite (buffer, 1, bytes, psf) == bytes && psf->error == 0) @@ -509,15 +505,15 @@ return 0 ; if (psf->mode == SFM_WRITE) - { FLAC__seekable_stream_encoder_finish (pflac->fse) ; - FLAC__seekable_stream_encoder_delete (pflac->fse) ; + { FLAC__stream_encoder_finish (pflac->fse) ; + FLAC__stream_encoder_delete (pflac->fse) ; if (pflac->encbuffer) free (pflac->encbuffer) ; } ; if (psf->mode == SFM_READ) - { FLAC__seekable_stream_decoder_finish (pflac->fsd) ; - FLAC__seekable_stream_decoder_delete (pflac->fsd) ; + { FLAC__stream_decoder_finish (pflac->fsd) ; + FLAC__stream_decoder_delete (pflac->fsd) ; } ; for (k = 0 ; k < ARRAY_LEN (pflac->rbuffer) ; k++) @@ -546,17 +542,11 @@ return SFE_FLAC_BAD_SAMPLE_RATE ; psf_fseek (psf, 0, SEEK_SET) ; - if ((pflac->fse = FLAC__seekable_stream_encoder_new ()) == NULL) + if ((pflac->fse = FLAC__stream_encoder_new ()) == NULL) return SFE_FLAC_NEW_DECODER ; - FLAC__seekable_stream_encoder_set_write_callback (pflac->fse, sf_flac_enc_write_callback) ; - FLAC__seekable_stream_encoder_set_seek_callback (pflac->fse, sf_flac_enc_seek_callback) ; -#ifdef HAVE_FLAC_1_1_1 - FLAC__seekable_stream_encoder_set_tell_callback (pflac->fse, sf_flac_enc_tell_callback) ; -#endif - FLAC__seekable_stream_encoder_set_client_data (pflac->fse, psf) ; - FLAC__seekable_stream_encoder_set_channels (pflac->fse, psf->sf.channels) ; - FLAC__seekable_stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ; + FLAC__stream_encoder_set_channels (pflac->fse, psf->sf.channels) ; + FLAC__stream_encoder_set_sample_rate (pflac->fse, psf->sf.samplerate) ; switch (psf->sf.format & SF_FORMAT_SUBMASK) { case SF_FORMAT_PCM_S8 : @@ -574,10 +564,15 @@ break ; } ; - FLAC__seekable_stream_encoder_set_bits_per_sample (pflac->fse, bps) ; + FLAC__stream_encoder_set_bits_per_sample (pflac->fse, bps) ; - if ((bps = FLAC__seekable_stream_encoder_init (pflac->fse)) != FLAC__SEEKABLE_STREAM_DECODER_OK) - { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__seekable_stream_encoder_get_resolved_state_string (pflac->fse)) ; + if ((bps = FLAC__stream_encoder_init_stream (pflac->fse, + sf_flac_enc_write_callback, + sf_flac_enc_seek_callback, + sf_flac_enc_tell_callback, + NULL, + psf)) != FLAC__STREAM_ENCODER_INIT_STATUS_OK) + { psf_log_printf (psf, "Error : FLAC encoder init returned error : %s\n", FLAC__stream_encoder_get_resolved_state_string (pflac->fse)) ; return SFE_FLAC_INIT_DECODER ; } ; @@ -593,26 +588,25 @@ { FLAC_PRIVATE* pflac = (FLAC_PRIVATE*) psf->codec_data ; psf_fseek (psf, 0, SEEK_SET) ; - if ((pflac->fsd = FLAC__seekable_stream_decoder_new ()) == NULL) + if ((pflac->fsd = FLAC__stream_decoder_new ()) == NULL) return SFE_FLAC_NEW_DECODER ; - FLAC__seekable_stream_decoder_set_read_callback (pflac->fsd, sf_flac_read_callback) ; - FLAC__seekable_stream_decoder_set_seek_callback (pflac->fsd, sf_flac_seek_callback) ; - FLAC__seekable_stream_decoder_set_tell_callback (pflac->fsd, sf_flac_tell_callback) ; - FLAC__seekable_stream_decoder_set_length_callback (pflac->fsd, sf_flac_length_callback) ; - FLAC__seekable_stream_decoder_set_eof_callback (pflac->fsd, sf_flac_eof_callback) ; - FLAC__seekable_stream_decoder_set_write_callback (pflac->fsd, sf_flac_write_callback) ; - FLAC__seekable_stream_decoder_set_metadata_callback (pflac->fsd, sf_flac_meta_callback) ; - FLAC__seekable_stream_decoder_set_error_callback (pflac->fsd, sf_flac_error_callback) ; - FLAC__seekable_stream_decoder_set_client_data (pflac->fsd, psf) ; - - if (FLAC__seekable_stream_decoder_init (pflac->fsd) != FLAC__SEEKABLE_STREAM_DECODER_OK) + if (FLAC__stream_decoder_init_stream(pflac->fsd, + sf_flac_read_callback, + sf_flac_seek_callback, + sf_flac_tell_callback, + sf_flac_length_callback, + sf_flac_eof_callback, + sf_flac_write_callback, + sf_flac_meta_callback, + sf_flac_error_callback, + psf) != FLAC__STREAM_DECODER_INIT_STATUS_OK) return SFE_FLAC_INIT_DECODER ; - FLAC__seekable_stream_decoder_process_until_end_of_metadata (pflac->fsd) ; + FLAC__stream_decoder_process_until_end_of_metadata (pflac->fsd) ; if (psf->error == 0) { FLAC__uint64 position ; - FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ; + FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ; psf->dataoffset = position ; } ; @@ -676,9 +670,9 @@ flac_buffer_copy (psf) ; while (pflac->pos < pflac->len) - { if (FLAC__seekable_stream_decoder_process_single (pflac->fsd) == 0) + { if (FLAC__stream_decoder_process_single (pflac->fsd) == 0) break ; - if (FLAC__seekable_stream_decoder_get_state (pflac->fsd) != FLAC__SEEKABLE_STREAM_DECODER_OK) + if (FLAC__stream_decoder_get_state (pflac->fsd) == FLAC__STREAM_DECODER_ABORTED) break ; } ; @@ -795,7 +789,7 @@ while (len > 0) { writecount = (len >= bufferlen) ? bufferlen : (int) len ; convert (ptr + total, buffer, writecount) ; - if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) + if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) thiswrite = writecount ; else break ; @@ -837,7 +831,7 @@ while (len > 0) { writecount = (len >= bufferlen) ? bufferlen : (int) len ; convert (ptr + total, buffer, writecount) ; - if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) + if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) thiswrite = writecount ; else break ; @@ -879,7 +873,7 @@ while (len > 0) { writecount = (len >= bufferlen) ? bufferlen : (int) len ; convert (ptr + total, buffer, writecount, psf->norm_float) ; - if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) + if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) thiswrite = writecount ; else break ; @@ -1011,7 +1005,7 @@ while (len > 0) { writecount = (len >= bufferlen) ? bufferlen : (int) len ; convert (ptr + total, buffer, writecount, psf->norm_double) ; - if (FLAC__seekable_stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) + if (FLAC__stream_encoder_process_interleaved (pflac->fse, buffer, writecount/psf->sf.channels)) thiswrite = writecount ; else break ; @@ -1131,8 +1125,8 @@ if (psf->mode == SFM_READ) { FLAC__uint64 position ; - if (FLAC__seekable_stream_decoder_seek_absolute (pflac->fsd, offset)) - { FLAC__seekable_stream_decoder_get_decode_position (pflac->fsd, &position) ; + if (FLAC__stream_decoder_seek_absolute (pflac->fsd, offset)) + { FLAC__stream_decoder_get_decode_position (pflac->fsd, &position) ; return offset ; } ;