1 /* libOggFLAC - Free Lossless Audio Codec + Ogg library
2 * Copyright (C) 2002 Josh Coalson
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
20 #ifndef OggFLAC__SEEKABLE_STREAM_DECODER_H
21 #define OggFLAC__SEEKABLE_STREAM_DECODER_H
25 #include "FLAC/seekable_stream_decoder.h"
32 /** \file include/OggFLAC/seekable_stream_decoder.h
35 * This module contains the functions which implement the seekable stream
38 * See the detailed documentation in the
39 * \link oggflac_seekable_stream_decoder seekable stream decoder \endlink module.
42 /** \defgroup oggflac_seekable_stream_decoder OggFLAC/seekable_stream_decoder.h: seekable stream decoder interface
43 * \ingroup oggflac_decoder
46 * This module contains the functions which implement the seekable stream
49 * The interface here is identical to FLAC's seekable stream decoder. See the
50 * defaults, including the callbacks. See the \link flac_seekable_stream_decoder
51 * FLAC seekable stream decoder module \endlink for full documentation.
57 /** State values for an OggFLAC__SeekableStreamDecoder
59 * The decoder's state can be obtained by calling OggFLAC__seekable_stream_decoder_get_state().
63 OggFLAC__SEEKABLE_STREAM_DECODER_OK = 0,
64 /**< The decoder is in the normal OK state. */
66 OggFLAC__SEEKABLE_STREAM_DECODER_FLAC_SEEKABLE_STREAM_DECODER_ERROR,
67 /**< An error occurred in the underlying FLAC seekable stream decoder;
68 * check OggFLAC__seekable_stream_decoder_get_FLAC_seekable_stream_decoder_state().
71 OggFLAC__SEEKABLE_STREAM_DECODER_INVALID_CALLBACK,
72 /**< The decoder was initialized before setting all the required callbacks. */
74 OggFLAC__SEEKABLE_STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
75 /**< Memory allocation failed. */
77 OggFLAC__SEEKABLE_STREAM_DECODER_ALREADY_INITIALIZED,
78 /**< OggFLAC__seekable_stream_decoder_init() was called when the decoder was
79 * already initialized, usually because
80 * OggFLAC__seekable_stream_decoder_finish() was not called.
83 OggFLAC__SEEKABLE_STREAM_DECODER_UNINITIALIZED
84 /**< The decoder is in the uninitialized state. */
86 } OggFLAC__SeekableStreamDecoderState;
88 /** Maps an OggFLAC__SeekableStreamDecoderState to a C string.
90 * Using an OggFLAC__SeekableStreamDecoderState as the index to this array
91 * will give the string equivalent. The contents should not be modified.
93 extern OggFLAC_API const char * const OggFLAC__SeekableStreamDecoderStateString[];
96 /***********************************************************************
98 * class OggFLAC__SeekableStreamDecoder : public FLAC__StreamDecoder
100 ***********************************************************************/
102 struct OggFLAC__SeekableStreamDecoderProtected;
103 struct OggFLAC__SeekableStreamDecoderPrivate;
104 /** The opaque structure definition for the seekable stream decoder type.
106 * \link oggflac_seekable_stream_decoder seekable stream decoder module \endlink
107 * for a detailed description.
110 struct OggFLAC__SeekableStreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
111 struct OggFLAC__SeekableStreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
112 } OggFLAC__SeekableStreamDecoder;
115 typedef FLAC__SeekableStreamDecoderReadStatus (*OggFLAC__SeekableStreamDecoderReadCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
116 typedef FLAC__SeekableStreamDecoderSeekStatus (*OggFLAC__SeekableStreamDecoderSeekCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
117 typedef FLAC__SeekableStreamDecoderTellStatus (*OggFLAC__SeekableStreamDecoderTellCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
118 typedef FLAC__SeekableStreamDecoderLengthStatus (*OggFLAC__SeekableStreamDecoderLengthCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
119 typedef FLAC__bool (*OggFLAC__SeekableStreamDecoderEofCallback)(const OggFLAC__SeekableStreamDecoder *decoder, void *client_data);
120 typedef FLAC__StreamDecoderWriteStatus (*OggFLAC__SeekableStreamDecoderWriteCallback)(const OggFLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
121 typedef void (*OggFLAC__SeekableStreamDecoderMetadataCallback)(const OggFLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
122 typedef void (*OggFLAC__SeekableStreamDecoderErrorCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
125 /***********************************************************************
127 * Class constructor/destructor
129 ***********************************************************************/
131 /** Create a new seekable stream decoder instance. The instance is created
132 * with default settings; see the individual
133 * OggFLAC__seekable_stream_decoder_set_*() functions for each setting's
136 * \retval OggFLAC__SeekableStreamDecoder*
137 * \c NULL if there was an error allocating memory, else the new instance.
139 OggFLAC_API OggFLAC__SeekableStreamDecoder *OggFLAC__seekable_stream_decoder_new();
141 /** Free a decoder instance. Deletes the object pointed to by \a decoder.
143 * \param decoder A pointer to an existing decoder.
145 * \code decoder != NULL \endcode
147 OggFLAC_API void OggFLAC__seekable_stream_decoder_delete(OggFLAC__SeekableStreamDecoder *decoder);
150 /***********************************************************************
152 * Public class method prototypes
154 ***********************************************************************/
156 /*@@@inherit set_serial_number*/
158 /** Set the "MD5 signature checking" flag.
159 * This is inherited from FLAC__SeekableStreamDecoder; see
160 * FLAC__seekable_stream_decoder_set_md5_checking().
163 * \param decoder A decoder instance to set.
164 * \param value Flag value (see above).
166 * \code decoder != NULL \endcode
168 * \c false if the decoder is already initialized, else \c true.
170 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_md5_checking(OggFLAC__SeekableStreamDecoder *decoder, FLAC__bool value);
172 /** Set the read callback.
173 * This is inherited from FLAC__SeekableStreamDecoder; see
174 * FLAC__seekable_stream_decoder_set_read_callback().
177 * The callback is mandatory and must be set before initialization.
180 * \param decoder A decoder instance to set.
181 * \param value See above.
183 * \code decoder != NULL \endcode
184 * \code value != NULL \endcode
186 * \c false if the decoder is already initialized, else \c true.
188 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_read_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderReadCallback value);
190 /** Set the seek callback.
191 * This is inherited from FLAC__SeekableStreamDecoder; see
192 * FLAC__seekable_stream_decoder_set_seek_callback().
195 * The callback is mandatory and must be set before initialization.
198 * \param decoder A decoder instance to set.
199 * \param value See above.
201 * \code decoder != NULL \endcode
202 * \code value != NULL \endcode
204 * \c false if the decoder is already initialized, else \c true.
206 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_seek_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderSeekCallback value);
208 /** Set the tell callback.
209 * This is inherited from FLAC__SeekableStreamDecoder; see
210 * FLAC__seekable_stream_decoder_set_tell_callback().
213 * The callback is mandatory and must be set before initialization.
216 * \param decoder A decoder instance to set.
217 * \param value See above.
219 * \code decoder != NULL \endcode
220 * \code value != NULL \endcode
222 * \c false if the decoder is already initialized, else \c true.
224 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_tell_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderTellCallback value);
226 /** Set the length callback.
227 * This is inherited from FLAC__SeekableStreamDecoder; see
228 * FLAC__seekable_stream_decoder_set_length_callback().
231 * The callback is mandatory and must be set before initialization.
234 * \param decoder A decoder instance to set.
235 * \param value See above.
237 * \code decoder != NULL \endcode
238 * \code value != NULL \endcode
240 * \c false if the decoder is already initialized, else \c true.
242 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_length_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderLengthCallback value);
244 /** Set the eof callback.
245 * This is inherited from FLAC__SeekableStreamDecoder; see
246 * FLAC__seekable_stream_decoder_set_eof_callback().
249 * The callback is mandatory and must be set before initialization.
252 * \param decoder A decoder instance to set.
253 * \param value See above.
255 * \code decoder != NULL \endcode
256 * \code value != NULL \endcode
258 * \c false if the decoder is already initialized, else \c true.
260 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_eof_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderEofCallback value);
262 /** Set the write callback.
263 * This is inherited from FLAC__SeekableStreamDecoder; see
264 * FLAC__seekable_stream_decoder_set_write_callback().
267 * The callback is mandatory and must be set before initialization.
270 * \param decoder A decoder instance to set.
271 * \param value See above.
273 * \code decoder != NULL \endcode
274 * \code value != NULL \endcode
276 * \c false if the decoder is already initialized, else \c true.
278 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_write_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderWriteCallback value);
280 /** Set the metadata callback.
281 * This is inherited from FLAC__SeekableStreamDecoder; see
282 * FLAC__seekable_stream_decoder_set_metadata_callback().
285 * The callback is mandatory and must be set before initialization.
288 * \param decoder A decoder instance to set.
289 * \param value See above.
291 * \code decoder != NULL \endcode
292 * \code value != NULL \endcode
294 * \c false if the decoder is already initialized, else \c true.
296 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderMetadataCallback value);
298 /** Set the error callback.
299 * This is inherited from FLAC__SeekableStreamDecoder; see
300 * FLAC__seekable_stream_decoder_set_error_callback().
303 * The callback is mandatory and must be set before initialization.
306 * \param decoder A decoder instance to set.
307 * \param value See above.
309 * \code decoder != NULL \endcode
310 * \code value != NULL \endcode
312 * \c false if the decoder is already initialized, else \c true.
314 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_error_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderErrorCallback value);
316 /** Set the client data to be passed back to callbacks.
317 * This value will be supplied to callbacks in their \a client_data
321 * \param decoder A decoder instance to set.
322 * \param value See above.
324 * \code decoder != NULL \endcode
326 * \c false if the decoder is already initialized, else \c true.
328 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_client_data(OggFLAC__SeekableStreamDecoder *decoder, void *value);
330 /** This is inherited from FLAC__SeekableStreamDecoder; see
331 * FLAC__seekable_stream_decoder_set_metadata_respond().
333 * \default By default, only the \c STREAMINFO block is returned via the
335 * \param decoder A decoder instance to set.
336 * \param type See above.
338 * \code decoder != NULL \endcode
341 * \c false if the decoder is already initialized, else \c true.
343 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_respond(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__MetadataType type);
345 /** This is inherited from FLAC__SeekableStreamDecoder; see
346 * FLAC__seekable_stream_decoder_set_metadata_respond_application().
348 * \default By default, only the \c STREAMINFO block is returned via the
350 * \param decoder A decoder instance to set.
351 * \param id See above.
353 * \code decoder != NULL \endcode
354 * \code id != NULL \endcode
356 * \c false if the decoder is already initialized, else \c true.
358 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_respond_application(OggFLAC__SeekableStreamDecoder *decoder, const FLAC__byte id[4]);
360 /** This is inherited from FLAC__SeekableStreamDecoder; see
361 * FLAC__seekable_stream_decoder_set_metadata_respond_all().
363 * \default By default, only the \c STREAMINFO block is returned via the
365 * \param decoder A decoder instance to set.
367 * \code decoder != NULL \endcode
369 * \c false if the decoder is already initialized, else \c true.
371 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_respond_all(OggFLAC__SeekableStreamDecoder *decoder);
373 /** This is inherited from FLAC__SeekableStreamDecoder; see
374 * FLAC__seekable_stream_decoder_set_metadata_ignore().
376 * \default By default, only the \c STREAMINFO block is returned via the
378 * \param decoder A decoder instance to set.
379 * \param type See above.
381 * \code decoder != NULL \endcode
384 * \c false if the decoder is already initialized, else \c true.
386 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_ignore(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__MetadataType type);
388 /** This is inherited from FLAC__SeekableStreamDecoder; see
389 * FLAC__seekable_stream_decoder_set_metadata_ignore_application().
391 * \default By default, only the \c STREAMINFO block is returned via the
393 * \param decoder A decoder instance to set.
394 * \param id See above.
396 * \code decoder != NULL \endcode
397 * \code id != NULL \endcode
399 * \c false if the decoder is already initialized, else \c true.
401 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(OggFLAC__SeekableStreamDecoder *decoder, const FLAC__byte id[4]);
403 /** This is inherited from FLAC__SeekableStreamDecoder; see
404 * FLAC__seekable_stream_decoder_set_metadata_ignore_all().
406 * \default By default, only the \c STREAMINFO block is returned via the
408 * \param decoder A decoder instance to set.
410 * \code decoder != NULL \endcode
412 * \c false if the decoder is already initialized, else \c true.
414 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_ignore_all(OggFLAC__SeekableStreamDecoder *decoder);
416 /** Get the current decoder state.
418 * \param decoder A decoder instance to query.
420 * \code decoder != NULL \endcode
421 * \retval OggFLAC__SeekableStreamDecoderState
422 * The current decoder state.
424 OggFLAC_API OggFLAC__SeekableStreamDecoderState OggFLAC__seekable_stream_decoder_get_state(const OggFLAC__SeekableStreamDecoder *decoder);
426 /** Get the state of the underlying FLAC seekable stream decoder.
427 * Useful when the seekable stream decoder state is
428 * \c OggFLAC__SEEKABLE_STREAM_DECODER_FLAC_SEEKABLE_STREAM_DECODER_ERROR.
430 * \param decoder A decoder instance to query.
432 * \code decoder != NULL \endcode
433 * \retval FLAC__SeekableStreamDecoderState
434 * The FLAC seekable stream decoder state.
436 OggFLAC_API FLAC__SeekableStreamDecoderState OggFLAC__seekable_stream_decoder_get_FLAC_seekable_stream_decoder_state(const OggFLAC__SeekableStreamDecoder *decoder);
438 /** Get the state of the underlying FLAC seekable stream decoder's stream decoder.
439 * Useful when the seekable stream decoder state is
440 * \c OggFLAC__SEEKABLE_STREAM_DECODER_FLAC_SEEKABLE_STREAM_DECODER_ERROR and the
441 * FLAC seekable stream decoder state is \c FLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR
443 * \param decoder A decoder instance to query.
445 * \code decoder != NULL \endcode
446 * \retval FLAC__StreamDecoderState
447 * The FLAC stream decoder state.
449 OggFLAC_API FLAC__StreamDecoderState OggFLAC__seekable_stream_decoder_get_FLAC_stream_decoder_state(const OggFLAC__SeekableStreamDecoder *decoder);
451 /** This is inherited from FLAC__SeekableStreamDecoder; see
452 * FLAC__seekable_stream_decoder_get_md5_checking().
454 * \param decoder A decoder instance to query.
456 * \code decoder != NULL \endcode
460 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_get_md5_checking(const OggFLAC__SeekableStreamDecoder *decoder);
462 /** This is inherited from FLAC__SeekableStreamDecoder; see
463 * FLAC__seekable_stream_decoder_get_channels().
465 * \param decoder A decoder instance to query.
467 * \code decoder != NULL \endcode
471 OggFLAC_API unsigned OggFLAC__seekable_stream_decoder_get_channels(const OggFLAC__SeekableStreamDecoder *decoder);
473 /** This is inherited from FLAC__SeekableStreamDecoder; see
474 * FLAC__seekable_stream_decoder_get_channel_assignment().
476 * \param decoder A decoder instance to query.
478 * \code decoder != NULL \endcode
479 * \retval OggFLAC__ChannelAssignment
482 OggFLAC_API OggFLAC__ChannelAssignment OggFLAC__seekable_stream_decoder_get_channel_assignment(const OggFLAC__SeekableStreamDecoder *decoder);
484 /** This is inherited from FLAC__SeekableStreamDecoder; see
485 * FLAC__seekable_stream_decoder_get_bits_per_sample().
487 * \param decoder A decoder instance to query.
489 * \code decoder != NULL \endcode
493 OggFLAC_API unsigned OggFLAC__seekable_stream_decoder_get_bits_per_sample(const OggFLAC__SeekableStreamDecoder *decoder);
495 /** This is inherited from FLAC__SeekableStreamDecoder; see
496 * FLAC__seekable_stream_decoder_get_sample_rate().
498 * \param decoder A decoder instance to query.
500 * \code decoder != NULL \endcode
504 OggFLAC_API unsigned OggFLAC__seekable_stream_decoder_get_sample_rate(const OggFLAC__SeekableStreamDecoder *decoder);
506 /** This is inherited from FLAC__SeekableStreamDecoder; see
507 * FLAC__seekable_stream_decoder_get_blocksize().
509 * \param decoder A decoder instance to query.
511 * \code decoder != NULL \endcode
515 OggFLAC_API unsigned OggFLAC__seekable_stream_decoder_get_blocksize(const OggFLAC__SeekableStreamDecoder *decoder);
517 /** Initialize the decoder instance.
518 * Should be called after OggFLAC__seekable_stream_decoder_new() and
519 * OggFLAC__seekable_stream_decoder_set_*() but before any of the
520 * OggFLAC__seekable_stream_decoder_process_*() functions. Will set and return
521 * the decoder state, which will be OggFLAC__SEEKABLE_STREAM_DECODER_OK
522 * if initialization succeeded.
524 * \param decoder An uninitialized decoder instance.
526 * \code decoder != NULL \endcode
527 * \retval OggFLAC__SeekableStreamDecoderState
528 * \c OggFLAC__SEEKABLE_STREAM_DECODER_OK if initialization was
529 * successful; see OggFLAC__SeekableStreamDecoderState for the meanings
530 * of other return values.
532 OggFLAC_API OggFLAC__SeekableStreamDecoderState OggFLAC__seekable_stream_decoder_init(OggFLAC__SeekableStreamDecoder *decoder);
534 /** Finish the decoding process.
535 * Flushes the decoding buffer, releases resources, resets the decoder
536 * settings to their defaults, and returns the decoder state to
537 * OggFLAC__SEEKABLE_STREAM_DECODER_UNINITIALIZED.
539 * In the event of a prematurely-terminated decode, it is not strictly
540 * necessary to call this immediately before
541 * OggFLAC__seekable_stream_decoder_delete() but it is good practice to match
542 * every OggFLAC__seekable_stream_decoder_init() with a
543 * OggFLAC__seekable_stream_decoder_finish().
545 * \param decoder An uninitialized decoder instance.
547 * \code decoder != NULL \endcode
549 * \c false if MD5 checking is on AND a STREAMINFO block was available
550 * AND the MD5 signature in the STREAMINFO block was non-zero AND the
551 * signature does not match the one computed by the decoder; else
554 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_finish(OggFLAC__SeekableStreamDecoder *decoder);
556 /** This is inherited from FLAC__SeekableStreamDecoder; see
557 * FLAC__seekable_stream_decoder_flush().
559 * \param decoder A decoder instance.
561 * \code decoder != NULL \endcode
563 * \c true if successful, else \c false if a memory allocation
564 * or stream decoder error occurs.
566 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_flush(OggFLAC__SeekableStreamDecoder *decoder);
568 /** This is inherited from FLAC__SeekableStreamDecoder; see
569 * FLAC__seekable_stream_decoder_reset().
571 * \param decoder A decoder instance.
573 * \code decoder != NULL \endcode
575 * \c true if successful, else \c false if a memory allocation
576 * or stream decoder error occurs.
578 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_reset(OggFLAC__SeekableStreamDecoder *decoder);
580 /** This is inherited from FLAC__SeekableStreamDecoder; see
581 * FLAC__seekable_stream_decoder_process_single().
583 * \param decoder A decoder instance.
585 * \code decoder != NULL \endcode
589 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_process_single(OggFLAC__SeekableStreamDecoder *decoder);
591 /** This is inherited from FLAC__SeekableStreamDecoder; see
592 * FLAC__seekable_stream_decoder_process_until_end_of_metadata().
594 * \param decoder A decoder instance.
596 * \code decoder != NULL \endcode
600 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_process_until_end_of_metadata(OggFLAC__SeekableStreamDecoder *decoder);
602 /** This is inherited from FLAC__SeekableStreamDecoder; see
603 * FLAC__seekable_stream_decoder_process_until_end_of_stream().
605 * \param decoder A decoder instance.
607 * \code decoder != NULL \endcode
611 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_process_until_end_of_stream(OggFLAC__SeekableStreamDecoder *decoder);
613 /** This is inherited from FLAC__SeekableStreamDecoder; see
614 * FLAC__seekable_stream_decoder_seek_absolute().
616 * \param decoder A decoder instance.
617 * \param sample The target sample number to seek to.
619 * \code decoder != NULL \endcode
621 * \c true if successful, else \c false.
623 OggFLAC_API FLAC__bool OggFLAC__seekable_stream_decoder_seek_absolute(OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 sample);