7b5f1056414ebed766b80d9647ef1710480d0a9e
[platform/upstream/flac.git] / include / OggFLAC / seekable_stream_decoder.h
1 /* libOggFLAC - Free Lossless Audio Codec + Ogg library
2  * Copyright (C) 2002  Josh Coalson
3  *
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.
8  *
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.
13  *
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.
18  */
19
20 #ifndef OggFLAC__SEEKABLE_STREAM_DECODER_H
21 #define OggFLAC__SEEKABLE_STREAM_DECODER_H
22
23 #include "FLAC/seekable_stream_decoder.h"
24
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28
29
30 /** \file include/OggFLAC/seekable_stream_decoder.h
31  *
32  *  \brief
33  *  This module contains the functions which implement the seekable stream
34  *  decoder.
35  *
36  *  See the detailed documentation in the
37  *  \link oggflac_seekable_stream_decoder seekable stream decoder \endlink module.
38  */
39
40 /** \defgroup oggflac_seekable_stream_decoder OggFLAC/seekable_stream_decoder.h: seekable stream decoder interface
41  *  \ingroup oggflac_decoder
42  *
43  *  \brief
44  *  This module contains the functions which implement the seekable stream
45  *  decoder.
46  *
47  * The interface here is identical to FLAC's seekable stream decoder.  See the
48  * defaults, including the callbacks.  See the \link flac_seekable_stream_decoder
49  * FLAC seekable stream decoder module \endlink for full documentation.
50  *
51  * \{
52  */
53
54
55 /** State values for an OggFLAC__SeekableStreamDecoder
56  *
57  *  The decoder's state can be obtained by calling OggFLAC__seekable_stream_decoder_get_state().
58  */
59 typedef enum {
60
61         OggFLAC__SEEKABLE_STREAM_DECODER_OK = 0,
62         /**< The decoder is in the normal OK state. */
63
64         OggFLAC__SEEKABLE_STREAM_DECODER_FLAC_SEEKABLE_STREAM_DECODER_ERROR,
65         /**< An error occurred in the underlying FLAC seekable stream decoder;
66          * check OggFLAC__seekable_stream_decoder_get_FLAC_seekable_stream_decoder_state().
67          */
68
69         OggFLAC__SEEKABLE_STREAM_DECODER_INVALID_CALLBACK,
70         /**< The decoder was initialized before setting all the required callbacks. */
71
72         OggFLAC__SEEKABLE_STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
73         /**< Memory allocation failed. */
74
75         OggFLAC__SEEKABLE_STREAM_DECODER_ALREADY_INITIALIZED,
76         /**< OggFLAC__seekable_stream_decoder_init() was called when the decoder was
77          * already initialized, usually because
78          * OggFLAC__seekable_stream_decoder_finish() was not called.
79          */
80
81         OggFLAC__SEEKABLE_STREAM_DECODER_UNINITIALIZED
82         /**< The decoder is in the uninitialized state. */
83
84 } OggFLAC__SeekableStreamDecoderState;
85
86 /** Maps an OggFLAC__SeekableStreamDecoderState to a C string.
87  *
88  *  Using an OggFLAC__SeekableStreamDecoderState as the index to this array
89  *  will give the string equivalent.  The contents should not be modified.
90  */
91 extern const char * const OggFLAC__SeekableStreamDecoderStateString[];
92
93
94 /***********************************************************************
95  *
96  * class OggFLAC__SeekableStreamDecoder : public FLAC__StreamDecoder
97  *
98  ***********************************************************************/
99
100 struct OggFLAC__SeekableStreamDecoderProtected;
101 struct OggFLAC__SeekableStreamDecoderPrivate;
102 /** The opaque structure definition for the seekable stream decoder type.
103  *  See the
104  *  \link oggflac_seekable_stream_decoder seekable stream decoder module \endlink
105  *  for a detailed description.
106  */
107 typedef struct {
108         struct OggFLAC__SeekableStreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
109         struct OggFLAC__SeekableStreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
110 } OggFLAC__SeekableStreamDecoder;
111
112 /*@@@ document */
113 typedef FLAC__SeekableStreamDecoderReadStatus (*OggFLAC__SeekableStreamDecoderReadCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
114 typedef FLAC__SeekableStreamDecoderSeekStatus (*OggFLAC__SeekableStreamDecoderSeekCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
115 typedef FLAC__SeekableStreamDecoderTellStatus (*OggFLAC__SeekableStreamDecoderTellCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
116 typedef FLAC__SeekableStreamDecoderLengthStatus (*OggFLAC__SeekableStreamDecoderLengthCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
117 typedef FLAC__bool (*OggFLAC__SeekableStreamDecoderEofCallback)(const OggFLAC__SeekableStreamDecoder *decoder, void *client_data);
118 typedef FLAC__StreamDecoderWriteStatus (*OggFLAC__SeekableStreamDecoderWriteCallback)(const OggFLAC__SeekableStreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
119 typedef void (*OggFLAC__SeekableStreamDecoderMetadataCallback)(const OggFLAC__SeekableStreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
120 typedef void (*OggFLAC__SeekableStreamDecoderErrorCallback)(const OggFLAC__SeekableStreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
121
122
123 /***********************************************************************
124  *
125  * Class constructor/destructor
126  *
127  ***********************************************************************/
128
129 /** Create a new seekable stream decoder instance.  The instance is created
130  *  with default settings; see the individual
131  *  OggFLAC__seekable_stream_decoder_set_*() functions for each setting's
132  *  default.
133  *
134  * \retval OggFLAC__SeekableStreamDecoder*
135  *    \c NULL if there was an error allocating memory, else the new instance.
136  */
137 OggFLAC__SeekableStreamDecoder *OggFLAC__seekable_stream_decoder_new();
138
139 /** Free a decoder instance.  Deletes the object pointed to by \a decoder.
140  *
141  * \param decoder  A pointer to an existing decoder.
142  * \assert
143  *    \code decoder != NULL \endcode
144  */
145 void OggFLAC__seekable_stream_decoder_delete(OggFLAC__SeekableStreamDecoder *decoder);
146
147
148 /***********************************************************************
149  *
150  * Public class method prototypes
151  *
152  ***********************************************************************/
153
154 /*@@@inherit set_serial_number*/
155
156 /** Set the "MD5 signature checking" flag.
157  *  This is inherited from FLAC__SeekableStreamDecoder; see
158  *  FLAC__seekable_stream_decoder_set_md5_checking().
159  *
160  * \default \c false
161  * \param  decoder  A decoder instance to set.
162  * \param  value    Flag value (see above).
163  * \assert
164  *    \code decoder != NULL \endcode
165  * \retval FLAC__bool
166  *    \c false if the decoder is already initialized, else \c true.
167  */
168 FLAC__bool OggFLAC__seekable_stream_decoder_set_md5_checking(OggFLAC__SeekableStreamDecoder *decoder, FLAC__bool value);
169
170 /** Set the read callback.
171  *  This is inherited from FLAC__SeekableStreamDecoder; see
172  *  FLAC__seekable_stream_decoder_set_read_callback().
173  *
174  * \note
175  * The callback is mandatory and must be set before initialization.
176  *
177  * \default \c NULL
178  * \param  decoder  A decoder instance to set.
179  * \param  value    See above.
180  * \assert
181  *    \code decoder != NULL \endcode
182  *    \code value != NULL \endcode
183  * \retval FLAC__bool
184  *    \c false if the decoder is already initialized, else \c true.
185  */
186 FLAC__bool OggFLAC__seekable_stream_decoder_set_read_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderReadCallback value);
187
188 /** Set the seek callback.
189  *  This is inherited from FLAC__SeekableStreamDecoder; see
190  *  FLAC__seekable_stream_decoder_set_seek_callback().
191  *
192  * \note
193  * The callback is mandatory and must be set before initialization.
194  *
195  * \default \c NULL
196  * \param  decoder  A decoder instance to set.
197  * \param  value    See above.
198  * \assert
199  *    \code decoder != NULL \endcode
200  *    \code value != NULL \endcode
201  * \retval FLAC__bool
202  *    \c false if the decoder is already initialized, else \c true.
203  */
204 FLAC__bool OggFLAC__seekable_stream_decoder_set_seek_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderSeekCallback value);
205
206 /** Set the tell callback.
207  *  This is inherited from FLAC__SeekableStreamDecoder; see
208  *  FLAC__seekable_stream_decoder_set_tell_callback().
209  *
210  * \note
211  * The callback is mandatory and must be set before initialization.
212  *
213  * \default \c NULL
214  * \param  decoder  A decoder instance to set.
215  * \param  value    See above.
216  * \assert
217  *    \code decoder != NULL \endcode
218  *    \code value != NULL \endcode
219  * \retval FLAC__bool
220  *    \c false if the decoder is already initialized, else \c true.
221  */
222 FLAC__bool OggFLAC__seekable_stream_decoder_set_tell_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderTellCallback value);
223
224 /** Set the length callback.
225  *  This is inherited from FLAC__SeekableStreamDecoder; see
226  *  FLAC__seekable_stream_decoder_set_length_callback().
227  *
228  * \note
229  * The callback is mandatory and must be set before initialization.
230  *
231  * \default \c NULL
232  * \param  decoder  A decoder instance to set.
233  * \param  value    See above.
234  * \assert
235  *    \code decoder != NULL \endcode
236  *    \code value != NULL \endcode
237  * \retval FLAC__bool
238  *    \c false if the decoder is already initialized, else \c true.
239  */
240 FLAC__bool OggFLAC__seekable_stream_decoder_set_length_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderLengthCallback value);
241
242 /** Set the eof callback.
243  *  This is inherited from FLAC__SeekableStreamDecoder; see
244  *  FLAC__seekable_stream_decoder_set_eof_callback().
245  *
246  * \note
247  * The callback is mandatory and must be set before initialization.
248  *
249  * \default \c NULL
250  * \param  decoder  A decoder instance to set.
251  * \param  value    See above.
252  * \assert
253  *    \code decoder != NULL \endcode
254  *    \code value != NULL \endcode
255  * \retval FLAC__bool
256  *    \c false if the decoder is already initialized, else \c true.
257  */
258 FLAC__bool OggFLAC__seekable_stream_decoder_set_eof_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderEofCallback value);
259
260 /** Set the write callback.
261  *  This is inherited from FLAC__SeekableStreamDecoder; see
262  *  FLAC__seekable_stream_decoder_set_write_callback().
263  *
264  * \note
265  * The callback is mandatory and must be set before initialization.
266  *
267  * \default \c NULL
268  * \param  decoder  A decoder instance to set.
269  * \param  value    See above.
270  * \assert
271  *    \code decoder != NULL \endcode
272  *    \code value != NULL \endcode
273  * \retval FLAC__bool
274  *    \c false if the decoder is already initialized, else \c true.
275  */
276 FLAC__bool OggFLAC__seekable_stream_decoder_set_write_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderWriteCallback value);
277
278 /** Set the metadata callback.
279  *  This is inherited from FLAC__SeekableStreamDecoder; see
280  *  FLAC__seekable_stream_decoder_set_metadata_callback().
281  *
282  * \note
283  * The callback is mandatory and must be set before initialization.
284  *
285  * \default \c NULL
286  * \param  decoder  A decoder instance to set.
287  * \param  value    See above.
288  * \assert
289  *    \code decoder != NULL \endcode
290  *    \code value != NULL \endcode
291  * \retval FLAC__bool
292  *    \c false if the decoder is already initialized, else \c true.
293  */
294 FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderMetadataCallback value);
295
296 /** Set the error callback.
297  *  This is inherited from FLAC__SeekableStreamDecoder; see
298  *  FLAC__seekable_stream_decoder_set_error_callback().
299  *
300  * \note
301  * The callback is mandatory and must be set before initialization.
302  *
303  * \default \c NULL
304  * \param  decoder  A decoder instance to set.
305  * \param  value    See above.
306  * \assert
307  *    \code decoder != NULL \endcode
308  *    \code value != NULL \endcode
309  * \retval FLAC__bool
310  *    \c false if the decoder is already initialized, else \c true.
311  */
312 FLAC__bool OggFLAC__seekable_stream_decoder_set_error_callback(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__SeekableStreamDecoderErrorCallback value);
313
314 /** Set the client data to be passed back to callbacks.
315  *  This value will be supplied to callbacks in their \a client_data
316  *  argument.
317  *
318  * \default \c NULL
319  * \param  decoder  A decoder instance to set.
320  * \param  value    See above.
321  * \assert
322  *    \code decoder != NULL \endcode
323  * \retval FLAC__bool
324  *    \c false if the decoder is already initialized, else \c true.
325  */
326 FLAC__bool OggFLAC__seekable_stream_decoder_set_client_data(OggFLAC__SeekableStreamDecoder *decoder, void *value);
327
328 /** This is inherited from FLAC__SeekableStreamDecoder; see
329  *  FLAC__seekable_stream_decoder_set_metadata_respond().
330  *
331  * \default By default, only the \c STREAMINFO block is returned via the
332  *          metadata callback.
333  * \param  decoder  A decoder instance to set.
334  * \param  type     See above.
335  * \assert
336  *    \code decoder != NULL \endcode
337  *    \a type is valid
338  * \retval FLAC__bool
339  *    \c false if the decoder is already initialized, else \c true.
340  */
341 FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_respond(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__MetadataType type);
342
343 /** This is inherited from FLAC__SeekableStreamDecoder; see
344  *  FLAC__seekable_stream_decoder_set_metadata_respond_application().
345  *
346  * \default By default, only the \c STREAMINFO block is returned via the
347  *          metadata callback.
348  * \param  decoder  A decoder instance to set.
349  * \param  id       See above.
350  * \assert
351  *    \code decoder != NULL \endcode
352  *    \code id != NULL \endcode
353  * \retval FLAC__bool
354  *    \c false if the decoder is already initialized, else \c true.
355  */
356 FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_respond_application(OggFLAC__SeekableStreamDecoder *decoder, const FLAC__byte id[4]);
357
358 /** This is inherited from FLAC__SeekableStreamDecoder; see
359  *  FLAC__seekable_stream_decoder_set_metadata_respond_all().
360  *
361  * \default By default, only the \c STREAMINFO block is returned via the
362  *          metadata callback.
363  * \param  decoder  A decoder instance to set.
364  * \assert
365  *    \code decoder != NULL \endcode
366  * \retval FLAC__bool
367  *    \c false if the decoder is already initialized, else \c true.
368  */
369 FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_respond_all(OggFLAC__SeekableStreamDecoder *decoder);
370
371 /** This is inherited from FLAC__SeekableStreamDecoder; see
372  *  FLAC__seekable_stream_decoder_set_metadata_ignore().
373  *
374  * \default By default, only the \c STREAMINFO block is returned via the
375  *          metadata callback.
376  * \param  decoder  A decoder instance to set.
377  * \param  type     See above.
378  * \assert
379  *    \code decoder != NULL \endcode
380  *    \a type is valid
381  * \retval FLAC__bool
382  *    \c false if the decoder is already initialized, else \c true.
383  */
384 FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_ignore(OggFLAC__SeekableStreamDecoder *decoder, OggFLAC__MetadataType type);
385
386 /** This is inherited from FLAC__SeekableStreamDecoder; see
387  *  FLAC__seekable_stream_decoder_set_metadata_ignore_application().
388  *
389  * \default By default, only the \c STREAMINFO block is returned via the
390  *          metadata callback.
391  * \param  decoder  A decoder instance to set.
392  * \param  id       See above.
393  * \assert
394  *    \code decoder != NULL \endcode
395  *    \code id != NULL \endcode
396  * \retval FLAC__bool
397  *    \c false if the decoder is already initialized, else \c true.
398  */
399 FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_ignore_application(OggFLAC__SeekableStreamDecoder *decoder, const FLAC__byte id[4]);
400
401 /** This is inherited from FLAC__SeekableStreamDecoder; see
402  *  FLAC__seekable_stream_decoder_set_metadata_ignore_all().
403  *
404  * \default By default, only the \c STREAMINFO block is returned via the
405  *          metadata callback.
406  * \param  decoder  A decoder instance to set.
407  * \assert
408  *    \code decoder != NULL \endcode
409  * \retval FLAC__bool
410  *    \c false if the decoder is already initialized, else \c true.
411  */
412 FLAC__bool OggFLAC__seekable_stream_decoder_set_metadata_ignore_all(OggFLAC__SeekableStreamDecoder *decoder);
413
414 /** Get the current decoder state.
415  *
416  * \param  decoder  A decoder instance to query.
417  * \assert
418  *    \code decoder != NULL \endcode
419  * \retval OggFLAC__SeekableStreamDecoderState
420  *    The current decoder state.
421  */
422 OggFLAC__SeekableStreamDecoderState OggFLAC__seekable_stream_decoder_get_state(const OggFLAC__SeekableStreamDecoder *decoder);
423
424 /** Get the state of the underlying FLAC seekable stream decoder.
425  *  Useful when the seekable stream decoder state is
426  *  \c OggFLAC__SEEKABLE_STREAM_DECODER_FLAC_SEEKABLE_STREAM_DECODER_ERROR.
427  *
428  * \param  decoder  A decoder instance to query.
429  * \assert
430  *    \code decoder != NULL \endcode
431  * \retval FLAC__SeekableStreamDecoderState
432  *    The FLAC seekable stream decoder state.
433  */
434 FLAC__SeekableStreamDecoderState OggFLAC__seekable_stream_decoder_get_FLAC_seekable_stream_decoder_state(const OggFLAC__SeekableStreamDecoder *decoder);
435
436 /** Get the state of the underlying FLAC seekable stream decoder's stream decoder.
437  *  Useful when the seekable stream decoder state is
438  *  \c OggFLAC__SEEKABLE_STREAM_DECODER_FLAC_SEEKABLE_STREAM_DECODER_ERROR and the
439  *  FLAC seekable stream decoder state is \c FLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR
440  *
441  * \param  decoder  A decoder instance to query.
442  * \assert
443  *    \code decoder != NULL \endcode
444  * \retval FLAC__StreamDecoderState
445  *    The FLAC stream decoder state.
446  */
447 FLAC__StreamDecoderState OggFLAC__seekable_stream_decoder_get_FLAC_stream_decoder_state(const OggFLAC__SeekableStreamDecoder *decoder);
448
449 /** This is inherited from FLAC__SeekableStreamDecoder; see
450  *  FLAC__seekable_stream_decoder_get_md5_checking().
451  *
452  * \param  decoder  A decoder instance to query.
453  * \assert
454  *    \code decoder != NULL \endcode
455  * \retval FLAC__bool
456  *    See above.
457  */
458 FLAC__bool OggFLAC__seekable_stream_decoder_get_md5_checking(const OggFLAC__SeekableStreamDecoder *decoder);
459
460 /** This is inherited from FLAC__SeekableStreamDecoder; see
461  *  FLAC__seekable_stream_decoder_get_channels().
462  *
463  * \param  decoder  A decoder instance to query.
464  * \assert
465  *    \code decoder != NULL \endcode
466  * \retval unsigned
467  *    See above.
468  */
469 unsigned OggFLAC__seekable_stream_decoder_get_channels(const OggFLAC__SeekableStreamDecoder *decoder);
470
471 /** This is inherited from FLAC__SeekableStreamDecoder; see
472  *  FLAC__seekable_stream_decoder_get_channel_assignment().
473  *
474  * \param  decoder  A decoder instance to query.
475  * \assert
476  *    \code decoder != NULL \endcode
477  * \retval OggFLAC__ChannelAssignment
478  *    See above.
479  */
480 OggFLAC__ChannelAssignment OggFLAC__seekable_stream_decoder_get_channel_assignment(const OggFLAC__SeekableStreamDecoder *decoder);
481
482 /** This is inherited from FLAC__SeekableStreamDecoder; see
483  *  FLAC__seekable_stream_decoder_get_bits_per_sample().
484  *
485  * \param  decoder  A decoder instance to query.
486  * \assert
487  *    \code decoder != NULL \endcode
488  * \retval unsigned
489  *    See above.
490  */
491 unsigned OggFLAC__seekable_stream_decoder_get_bits_per_sample(const OggFLAC__SeekableStreamDecoder *decoder);
492
493 /** This is inherited from FLAC__SeekableStreamDecoder; see
494  *  FLAC__seekable_stream_decoder_get_sample_rate().
495  *
496  * \param  decoder  A decoder instance to query.
497  * \assert
498  *    \code decoder != NULL \endcode
499  * \retval unsigned
500  *    See above.
501  */
502 unsigned OggFLAC__seekable_stream_decoder_get_sample_rate(const OggFLAC__SeekableStreamDecoder *decoder);
503
504 /** This is inherited from FLAC__SeekableStreamDecoder; see
505  *  FLAC__seekable_stream_decoder_get_blocksize().
506  *
507  * \param  decoder  A decoder instance to query.
508  * \assert
509  *    \code decoder != NULL \endcode
510  * \retval unsigned
511  *    See above.
512  */
513 unsigned OggFLAC__seekable_stream_decoder_get_blocksize(const OggFLAC__SeekableStreamDecoder *decoder);
514
515 /** Initialize the decoder instance.
516  *  Should be called after OggFLAC__seekable_stream_decoder_new() and
517  *  OggFLAC__seekable_stream_decoder_set_*() but before any of the
518  *  OggFLAC__seekable_stream_decoder_process_*() functions.  Will set and return
519  *  the decoder state, which will be OggFLAC__SEEKABLE_STREAM_DECODER_OK
520  *  if initialization succeeded.
521  *
522  * \param  decoder  An uninitialized decoder instance.
523  * \assert
524  *    \code decoder != NULL \endcode
525  * \retval OggFLAC__SeekableStreamDecoderState
526  *    \c OggFLAC__SEEKABLE_STREAM_DECODER_OK if initialization was
527  *    successful; see OggFLAC__SeekableStreamDecoderState for the meanings
528  *    of other return values.
529  */
530 OggFLAC__SeekableStreamDecoderState OggFLAC__seekable_stream_decoder_init(OggFLAC__SeekableStreamDecoder *decoder);
531
532 /** Finish the decoding process.
533  *  Flushes the decoding buffer, releases resources, resets the decoder
534  *  settings to their defaults, and returns the decoder state to
535  *  OggFLAC__SEEKABLE_STREAM_DECODER_UNINITIALIZED.
536  *
537  *  In the event of a prematurely-terminated decode, it is not strictly
538  *  necessary to call this immediately before
539  *  OggFLAC__seekable_stream_decoder_delete() but it is good practice to match
540  *  every OggFLAC__seekable_stream_decoder_init() with a
541  *  OggFLAC__seekable_stream_decoder_finish().
542  *
543  * \param  decoder  An uninitialized decoder instance.
544  * \assert
545  *    \code decoder != NULL \endcode
546  * \retval FLAC__bool
547  *    \c false if MD5 checking is on AND a STREAMINFO block was available
548  *    AND the MD5 signature in the STREAMINFO block was non-zero AND the
549  *    signature does not match the one computed by the decoder; else
550  *    \c true.
551  */
552 FLAC__bool OggFLAC__seekable_stream_decoder_finish(OggFLAC__SeekableStreamDecoder *decoder);
553
554 /** This is inherited from FLAC__SeekableStreamDecoder; see
555  *  FLAC__seekable_stream_decoder_flush().
556  *
557  * \param  decoder  A decoder instance.
558  * \assert
559  *    \code decoder != NULL \endcode
560  * \retval FLAC__bool
561  *    \c true if successful, else \c false if a memory allocation
562  *    or stream decoder error occurs.
563  */
564 FLAC__bool OggFLAC__seekable_stream_decoder_flush(OggFLAC__SeekableStreamDecoder *decoder);
565
566 /** This is inherited from FLAC__SeekableStreamDecoder; see
567  *  FLAC__seekable_stream_decoder_reset().
568  *
569  * \param  decoder  A decoder instance.
570  * \assert
571  *    \code decoder != NULL \endcode
572  * \retval FLAC__bool
573  *    \c true if successful, else \c false if a memory allocation
574  *    or stream decoder error occurs.
575  */
576 FLAC__bool OggFLAC__seekable_stream_decoder_reset(OggFLAC__SeekableStreamDecoder *decoder);
577
578 /** This is inherited from FLAC__SeekableStreamDecoder; see
579  *  FLAC__seekable_stream_decoder_process_single().
580  *
581  * \param  decoder  A decoder instance.
582  * \assert
583  *    \code decoder != NULL \endcode
584  * \retval FLAC__bool
585  *    See above.
586  */
587 FLAC__bool OggFLAC__seekable_stream_decoder_process_single(OggFLAC__SeekableStreamDecoder *decoder);
588
589 /** This is inherited from FLAC__SeekableStreamDecoder; see
590  *  FLAC__seekable_stream_decoder_process_until_end_of_metadata().
591  *
592  * \param  decoder  A decoder instance.
593  * \assert
594  *    \code decoder != NULL \endcode
595  * \retval FLAC__bool
596  *    See above.
597  */
598 FLAC__bool OggFLAC__seekable_stream_decoder_process_until_end_of_metadata(OggFLAC__SeekableStreamDecoder *decoder);
599
600 /** This is inherited from FLAC__SeekableStreamDecoder; see
601  *  FLAC__seekable_stream_decoder_process_until_end_of_stream().
602  *
603  * \param  decoder  A decoder instance.
604  * \assert
605  *    \code decoder != NULL \endcode
606  * \retval FLAC__bool
607  *    See above.
608  */
609 FLAC__bool OggFLAC__seekable_stream_decoder_process_until_end_of_stream(OggFLAC__SeekableStreamDecoder *decoder);
610
611 /** This is inherited from FLAC__SeekableStreamDecoder; see
612  *  FLAC__seekable_stream_decoder_seek_absolute().
613  *
614  * \param  decoder  A decoder instance.
615  * \param  sample   The target sample number to seek to.
616  * \assert
617  *    \code decoder != NULL \endcode
618  * \retval FLAC__bool
619  *    \c true if successful, else \c false.
620  */
621 FLAC__bool OggFLAC__seekable_stream_decoder_seek_absolute(OggFLAC__SeekableStreamDecoder *decoder, FLAC__uint64 sample);
622
623 /* \} */
624
625 #ifdef __cplusplus
626 }
627 #endif
628
629 #endif