summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Bogusz2006-12-24 19:49:56 (GMT)
committercvs2git2012-06-24 12:13:13 (GMT)
commit05eeb3168162d36627f9f867332852f750b0ab61 (patch)
treeced7193cdd98295621bf37220db3dffa97c61b9c
parent2f051b7f85c234fa49817db97f0492a12b3c6b47 (diff)
downloadlibsndfile-05eeb3168162d36627f9f867332852f750b0ab61.zip
libsndfile-05eeb3168162d36627f9f867332852f750b0ab61.tar.gz
- update to flac 1.1.3 API
Changed files: libsndfile-flac.patch -> 1.1
-rw-r--r--libsndfile-flac.patch343
1 files changed, 343 insertions, 0 deletions
diff --git a/libsndfile-flac.patch b/libsndfile-flac.patch
new file mode 100644
index 0000000..dc5f51e
--- /dev/null
+++ b/libsndfile-flac.patch
@@ -0,0 +1,343 @@
+--- 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 ;
+ } ;
+