tweaks to build libs as DLLs under windows
[platform/upstream/flac.git] / include / OggFLAC / 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__STREAM_DECODER_H
21 #define OggFLAC__STREAM_DECODER_H
22
23 #include "export.h"
24
25 #include "FLAC/stream_decoder.h"
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31
32 /** \file include/OggFLAC/stream_decoder.h
33  *
34  *  \brief
35  *  This module contains the functions which implement the stream
36  *  decoder.
37  *
38  *  See the detailed documentation in the
39  *  \link oggflac_stream_decoder stream decoder \endlink module.
40  */
41
42 /** \defgroup oggflac_decoder OggFLAC/ *_decoder.h: decoder interfaces
43  *  \ingroup oggflac
44  *
45  *  \brief
46  *  This module describes the decoder layers provided by libOggFLAC.
47  *
48  * libOggFLAC currently provides the same stream layer access as libFLAC;
49  * the interface is identical.  See the \link flac_decoder FLAC
50  * decoder module \endlink for full documentation.
51  */
52
53 /** \defgroup oggflac_stream_decoder OggFLAC/stream_decoder.h: stream decoder interface
54  *  \ingroup oggflac_decoder
55  *
56  *  \brief
57  *  This module contains the functions which implement the stream
58  *  decoder.
59  *
60  * The interface here is identical to FLAC's stream decoder,
61  * including the callbacks.  See the \link flac_stream_decoder
62  * FLAC stream decoder module \endlink for full documentation.
63  *
64  * \{
65  */
66
67
68 /** State values for an OggFLAC__StreamDecoder
69  *
70  *  The decoder's state can be obtained by calling OggFLAC__stream_decoder_get_state().
71  */
72 typedef enum {
73
74         OggFLAC__STREAM_DECODER_OK = 0,
75         /**< The decoder is in the normal OK state. */
76
77         OggFLAC__STREAM_DECODER_OGG_ERROR,
78         /**< An error occurred in the underlying Ogg layer.  */
79
80         OggFLAC__STREAM_DECODER_READ_ERROR,
81         /**< The read callback returned an error. */
82
83         OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR,
84         /**< An error occurred in the underlying FLAC stream decoder;
85          * check OggFLAC__stream_decoder_get_FLAC_stream_decoder_state().
86          */
87
88         OggFLAC__STREAM_DECODER_INVALID_CALLBACK,
89         /**< The decoder was initialized before setting all the required callbacks. */
90
91         OggFLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
92         /**< Memory allocation failed. */
93
94         OggFLAC__STREAM_DECODER_ALREADY_INITIALIZED,
95         /**< OggFLAC__stream_decoder_init() was called when the decoder was
96          * already initialized, usually because
97          * OggFLAC__stream_decoder_finish() was not called.
98          */
99
100         OggFLAC__STREAM_DECODER_UNINITIALIZED
101         /**< The decoder is in the uninitialized state. */
102
103 } OggFLAC__StreamDecoderState;
104
105 /** Maps an OggFLAC__StreamDecoderState to a C string.
106  *
107  *  Using an OggFLAC__StreamDecoderState as the index to this array
108  *  will give the string equivalent.  The contents should not be modified.
109  */
110 extern OggFLAC_API const char * const OggFLAC__StreamDecoderStateString[];
111
112
113 /***********************************************************************
114  *
115  * class OggFLAC__StreamDecoder
116  *
117  ***********************************************************************/
118
119 struct OggFLAC__StreamDecoderProtected;
120 struct OggFLAC__StreamDecoderPrivate;
121 /** The opaque structure definition for the stream decoder type.
122  *  See the \link oggflac_stream_decoder stream decoder module \endlink
123  *  for a detailed description.
124  */
125 typedef struct {
126         struct OggFLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
127         struct OggFLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
128 } OggFLAC__StreamDecoder;
129
130 /** Signature for the read callback.
131  *  See OggFLAC__stream_decoder_set_read_callback()
132  *  and FLAC__StreamDecoderReadCallback for more info.
133  *
134  * \param  decoder  The decoder instance calling the callback.
135  * \param  buffer   A pointer to a location for the callee to store
136  *                  data to be decoded.
137  * \param  bytes    A pointer to the size of the buffer.
138  * \param  client_data  The callee's client data set through
139  *                      OggFLAC__stream_decoder_set_client_data().
140  * \retval FLAC__StreamDecoderReadStatus
141  *    The callee's return status.
142  */
143 typedef FLAC__StreamDecoderReadStatus (*OggFLAC__StreamDecoderReadCallback)(const OggFLAC__StreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
144
145 /** Signature for the write callback.
146  *  See OggFLAC__stream_decoder_set_write_callback()
147  *  and FLAC__StreamDecoderWriteCallback for more info.
148  *
149  * \param  decoder  The decoder instance calling the callback.
150  * \param  frame    The description of the decoded frame.
151  * \param  buffer   An array of pointers to decoded channels of data.
152  * \param  client_data  The callee's client data set through
153  *                      OggFLAC__stream_decoder_set_client_data().
154  * \retval FLAC__StreamDecoderWriteStatus
155  *    The callee's return status.
156  */
157 typedef FLAC__StreamDecoderWriteStatus (*OggFLAC__StreamDecoderWriteCallback)(const OggFLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
158
159 /** Signature for the metadata callback.
160  *  See OggFLAC__stream_decoder_set_metadata_callback()
161  *  and FLAC__StreamDecoderMetadataCallback for more info.
162  *
163  * \param  decoder  The decoder instance calling the callback.
164  * \param  metadata The decoded metadata block.
165  * \param  client_data  The callee's client data set through
166  *                      OggFLAC__stream_decoder_set_client_data().
167  */
168 typedef void (*OggFLAC__StreamDecoderMetadataCallback)(const OggFLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
169
170 /** Signature for the error callback.
171  *  See OggFLAC__stream_decoder_set_error_callback()
172  *  and FLAC__StreamDecoderErrorCallback for more info.
173  *
174  * \param  decoder  The decoder instance calling the callback.
175  * \param  status   The error encountered by the decoder.
176  * \param  client_data  The callee's client data set through
177  *                      OggFLAC__stream_decoder_set_client_data().
178  */
179 typedef void (*OggFLAC__StreamDecoderErrorCallback)(const OggFLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
180
181
182 /***********************************************************************
183  *
184  * Class constructor/destructor
185  *
186  ***********************************************************************/
187
188 /** Create a new stream decoder instance.  The instance is created with
189  *  default settings; see the individual OggFLAC__stream_decoder_set_*()
190  *  functions for each setting's default.
191  *
192  * \retval OggFLAC__StreamDecoder*
193  *    \c NULL if there was an error allocating memory, else the new instance.
194  */
195 OggFLAC_API OggFLAC__StreamDecoder *OggFLAC__stream_decoder_new();
196
197 /** Free a decoder instance.  Deletes the object pointed to by \a decoder.
198  *
199  * \param decoder  A pointer to an existing decoder.
200  * \assert
201  *    \code decoder != NULL \endcode
202  */
203 OggFLAC_API void OggFLAC__stream_decoder_delete(OggFLAC__StreamDecoder *decoder);
204
205
206 /***********************************************************************
207  *
208  * Public class method prototypes
209  *
210  ***********************************************************************/
211
212 /** Set the read callback.
213  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_read_callback()
214  *
215  * \note
216  * The callback is mandatory and must be set before initialization.
217  *
218  * \default \c NULL
219  * \param  decoder  A decoder instance to set.
220  * \param  value    See above.
221  * \assert
222  *    \code decoder != NULL \endcode
223  *    \code value != NULL \endcode
224  * \retval FLAC__bool
225  *    \c false if the decoder is already initialized, else \c true.
226  */
227 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_read_callback(OggFLAC__StreamDecoder *decoder, OggFLAC__StreamDecoderReadCallback value);
228
229 /** Set the write callback.
230  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_write_callback()
231  *
232  * \note
233  * The callback is mandatory and must be set before initialization.
234  *
235  * \default \c NULL
236  * \param  decoder  A decoder instance to set.
237  * \param  value    See above.
238  * \assert
239  *    \code decoder != NULL \endcode
240  *    \code value != NULL \endcode
241  * \retval FLAC__bool
242  *    \c false if the decoder is already initialized, else \c true.
243  */
244 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_write_callback(OggFLAC__StreamDecoder *decoder, OggFLAC__StreamDecoderWriteCallback value);
245
246 /** Set the metadata callback.
247  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_callback()
248  *
249  * \note
250  * The callback is mandatory and must be set before initialization.
251  *
252  * \default \c NULL
253  * \param  decoder  A decoder instance to set.
254  * \param  value    See above.
255  * \assert
256  *    \code decoder != NULL \endcode
257  *    \code value != NULL \endcode
258  * \retval FLAC__bool
259  *    \c false if the decoder is already initialized, else \c true.
260  */
261 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_callback(OggFLAC__StreamDecoder *decoder, OggFLAC__StreamDecoderMetadataCallback value);
262
263 /** Set the error callback.
264  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_error_callback()
265  *
266  * \note
267  * The callback is mandatory and must be set before initialization.
268  *
269  * \default \c NULL
270  * \param  decoder  A decoder instance to set.
271  * \param  value    See above.
272  * \assert
273  *    \code decoder != NULL \endcode
274  *    \code value != NULL \endcode
275  * \retval FLAC__bool
276  *    \c false if the decoder is already initialized, else \c true.
277  */
278 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_error_callback(OggFLAC__StreamDecoder *decoder, OggFLAC__StreamDecoderErrorCallback value);
279
280 /** Set the client data to be passed back to callbacks.
281  *  This value will be supplied to callbacks in their \a client_data
282  *  argument.
283  *
284  * \default \c NULL
285  * \param  decoder  A decoder instance to set.
286  * \param  value    See above.
287  * \assert
288  *    \code decoder != NULL \endcode
289  * \retval FLAC__bool
290  *    \c false if the decoder is already initialized, else \c true.
291  */
292 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_client_data(OggFLAC__StreamDecoder *decoder, void *value);
293
294 /** Set the serial number for the Ogg stream.
295  * The default behavior is to use the serial number of the first Ogg
296  * page.  Setting a serial number here will explicitly define which
297  * stream is to be decoded.
298  *
299  * \default \c use serial number of first page
300  * \param  decoder        A decoder instance to set.
301  * \param  serial_number  See above.
302  * \assert
303  *    \code decoder != NULL \endcode
304  * \retval FLAC__bool
305  *    \c false if the decoder is already initialized, else \c true.
306  */
307 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_serial_number(OggFLAC__StreamDecoder *decoder, long serial_number);
308
309 /** Direct the decoder to pass on all metadata blocks of type \a type.
310  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond()
311  *
312  * \default By default, only the \c STREAMINFO block is returned via the
313  *          metadata callback.
314  * \param  decoder  A decoder instance to set.
315  * \param  type     See above.
316  * \assert
317  *    \code decoder != NULL \endcode
318  *    \a type is valid
319  * \retval FLAC__bool
320  *    \c false if the decoder is already initialized, else \c true.
321  */
322 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond(OggFLAC__StreamDecoder *decoder, FLAC__MetadataType type);
323
324 /** Direct the decoder to pass on all APPLICATION metadata blocks of the
325  *  given \a id.
326  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond_application()
327  *
328  * \default By default, only the \c STREAMINFO block is returned via the
329  *          metadata callback.
330  * \param  decoder  A decoder instance to set.
331  * \param  id       See above.
332  * \assert
333  *    \code decoder != NULL \endcode
334  *    \code id != NULL \endcode
335  * \retval FLAC__bool
336  *    \c false if the decoder is already initialized, else \c true.
337  */
338 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond_application(OggFLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
339
340 /** Direct the decoder to pass on all metadata blocks of any type.
341  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_respond_all()
342  *
343  * \default By default, only the \c STREAMINFO block is returned via the
344  *          metadata callback.
345  * \param  decoder  A decoder instance to set.
346  * \assert
347  *    \code decoder != NULL \endcode
348  * \retval FLAC__bool
349  *    \c false if the decoder is already initialized, else \c true.
350  */
351 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_respond_all(OggFLAC__StreamDecoder *decoder);
352
353 /** Direct the decoder to filter out all metadata blocks of type \a type.
354  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore()
355  *
356  * \default By default, only the \c STREAMINFO block is returned via the
357  *          metadata callback.
358  * \param  decoder  A decoder instance to set.
359  * \param  type     See above.
360  * \assert
361  *    \code decoder != NULL \endcode
362  *    \a type is valid
363  * \retval FLAC__bool
364  *    \c false if the decoder is already initialized, else \c true.
365  */
366 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore(OggFLAC__StreamDecoder *decoder, FLAC__MetadataType type);
367
368 /** Direct the decoder to filter out all APPLICATION metadata blocks of
369  *  the given \a id.
370  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore_application()
371  *
372  * \default By default, only the \c STREAMINFO block is returned via the
373  *          metadata callback.
374  * \param  decoder  A decoder instance to set.
375  * \param  id       See above.
376  * \assert
377  *    \code decoder != NULL \endcode
378  *    \code id != NULL \endcode
379  * \retval FLAC__bool
380  *    \c false if the decoder is already initialized, else \c true.
381  */
382 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore_application(OggFLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
383
384 /** Direct the decoder to filter out all metadata blocks of any type.
385  * This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_set_metadata_ignore_all()
386  *
387  * \default By default, only the \c STREAMINFO block is returned via the
388  *          metadata callback.
389  * \param  decoder  A decoder instance to set.
390  * \assert
391  *    \code decoder != NULL \endcode
392  * \retval FLAC__bool
393  *    \c false if the decoder is already initialized, else \c true.
394  */
395 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_set_metadata_ignore_all(OggFLAC__StreamDecoder *decoder);
396
397 /** Get the current decoder state.
398  *
399  * \param  decoder  A decoder instance to query.
400  * \assert
401  *    \code decoder != NULL \endcode
402  * \retval OggFLAC__StreamDecoderState
403  *    The current decoder state.
404  */
405 OggFLAC_API OggFLAC__StreamDecoderState OggFLAC__stream_decoder_get_state(const OggFLAC__StreamDecoder *decoder);
406
407 /** Get the state of the underlying FLAC stream decoder.
408  *  Useful when the stream decoder state is
409  *  \c OggFLAC__STREAM_DECODER_FLAC_STREAM_DECODER_ERROR.
410  *
411  * \param  decoder  A decoder instance to query.
412  * \assert
413  *    \code decoder != NULL \endcode
414  * \retval FLAC__StreamDecoderState
415  *    The FLAC stream decoder state.
416  */
417 OggFLAC_API FLAC__StreamDecoderState OggFLAC__stream_decoder_get_FLAC_stream_decoder_state(const OggFLAC__StreamDecoder *decoder);
418
419 /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_channels()
420  *
421  * \param  decoder  A decoder instance to query.
422  * \assert
423  *    \code decoder != NULL \endcode
424  * \retval unsigned
425  *    See above.
426  */
427 OggFLAC_API unsigned OggFLAC__stream_decoder_get_channels(const OggFLAC__StreamDecoder *decoder);
428
429 /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_channel_assignment()
430  *
431  * \param  decoder  A decoder instance to query.
432  * \assert
433  *    \code decoder != NULL \endcode
434  * \retval OggFLAC__ChannelAssignment
435  *    See above.
436  */
437 OggFLAC_API FLAC__ChannelAssignment OggFLAC__stream_decoder_get_channel_assignment(const OggFLAC__StreamDecoder *decoder);
438
439 /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_bits_per_sample()
440  *
441  * \param  decoder  A decoder instance to query.
442  * \assert
443  *    \code decoder != NULL \endcode
444  * \retval unsigned
445  *    See above.
446  */
447 OggFLAC_API unsigned OggFLAC__stream_decoder_get_bits_per_sample(const OggFLAC__StreamDecoder *decoder);
448
449 /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_sample_rate()
450  *
451  * \param  decoder  A decoder instance to query.
452  * \assert
453  *    \code decoder != NULL \endcode
454  * \retval unsigned
455  *    See above.
456  */
457 OggFLAC_API unsigned OggFLAC__stream_decoder_get_sample_rate(const OggFLAC__StreamDecoder *decoder);
458
459 /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_get_blocksize()
460  *
461  * \param  decoder  A decoder instance to query.
462  * \assert
463  *    \code decoder != NULL \endcode
464  * \retval unsigned
465  *    See above.
466  */
467 OggFLAC_API unsigned OggFLAC__stream_decoder_get_blocksize(const OggFLAC__StreamDecoder *decoder);
468
469 /** Initialize the decoder instance.
470  *  Should be called after OggFLAC__stream_decoder_new() and
471  *  OggFLAC__stream_decoder_set_*() but before any of the
472  *  OggFLAC__stream_decoder_process_*() functions.  Will set and return the
473  *  decoder state, which will be OggFLAC__STREAM_DECODER_OK
474  *  if initialization succeeded.
475  *
476  * \param  decoder  An uninitialized decoder instance.
477  * \assert
478  *    \code decoder != NULL \endcode
479  * \retval OggFLAC__StreamDecoderState
480  *    \c OggFLAC__STREAM_DECODER_OK if initialization was
481  *    successful; see OggFLAC__StreamDecoderState for the meanings of other
482  *    return values.
483  */
484 OggFLAC_API OggFLAC__StreamDecoderState OggFLAC__stream_decoder_init(OggFLAC__StreamDecoder *decoder);
485
486 /** Finish the decoding process.
487  *  Flushes the decoding buffer, releases resources, resets the decoder
488  *  settings to their defaults, and returns the decoder state to
489  *  OggFLAC__STREAM_DECODER_UNINITIALIZED.
490  *
491  *  In the event of a prematurely-terminated decode, it is not strictly
492  *  necessary to call this immediately before OggFLAC__stream_decoder_delete()
493  *  but it is good practice to match every OggFLAC__stream_decoder_init()
494  *  with an OggFLAC__stream_decoder_finish().
495  *
496  * \param  decoder  An uninitialized decoder instance.
497  * \assert
498  *    \code decoder != NULL \endcode
499  */
500 OggFLAC_API void OggFLAC__stream_decoder_finish(OggFLAC__StreamDecoder *decoder);
501
502 /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_flush()
503  *
504  * \param  decoder  A decoder instance.
505  * \assert
506  *    \code decoder != NULL \endcode
507  * \retval FLAC__bool
508  *    \c true if successful, else \c false if a memory allocation
509  *    error occurs.
510  */
511 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_flush(OggFLAC__StreamDecoder *decoder);
512
513 /** This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_reset()
514  *
515  * \param  decoder  A decoder instance.
516  * \assert
517  *    \code decoder != NULL \endcode
518  * \retval FLAC__bool
519  *    \c true if successful, else \c false if a memory allocation
520  *    error occurs.
521  */
522 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_reset(OggFLAC__StreamDecoder *decoder);
523
524 /** Decode one metadata block or audio frame.
525  *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_single()
526  *
527  * \param  decoder  An initialized decoder instance in the state
528  *                  \c OggFLAC__STREAM_DECODER_OK.
529  * \assert
530  *    \code decoder != NULL \endcode
531  *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
532  * \retval FLAC__bool
533  *    \c false if any read or write error occurred (except
534  *    \c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else \c true;
535  *    in any case, check the decoder state with
536  *    OggFLAC__stream_decoder_get_state() to see what went wrong or to
537  *    check for lost synchronization (a sign of stream corruption).
538  */
539 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_single(OggFLAC__StreamDecoder *decoder);
540
541 /** Decode until the end of the metadata.
542  *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_until_end_of_metadata()
543  *
544  * \param  decoder  An initialized decoder instance in the state
545  *                  \c OggFLAC__STREAM_DECODER_OK.
546  * \assert
547  *    \code decoder != NULL \endcode
548  *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
549  * \retval FLAC__bool
550  *    \c false if any read or write error occurred (except
551  *    \c OggFLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else \c true;
552  *    in any case, check the decoder state with
553  *    OggFLAC__stream_decoder_get_state() to see what went wrong or to
554  *    check for lost synchronization (a sign of stream corruption).
555  */
556 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_until_end_of_metadata(OggFLAC__StreamDecoder *decoder);
557
558 /** Decode until the end of the stream.
559  *  This is inherited from FLAC__StreamDecoder; see FLAC__stream_decoder_process_until_end_of_stream()
560  *
561  * \param  decoder  An initialized decoder instance in the state
562  *                  \c OggFLAC__STREAM_DECODER_OK.
563  * \assert
564  *    \code decoder != NULL \endcode
565  *    \code OggFLAC__stream_decoder_get_state(decoder) == OggFLAC__STREAM_DECODER_OK \endcode
566  * \retval FLAC__bool
567  *    \c false if any read or write error occurred (except
568  *    \c OggFLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else \c true;
569  *    in any case, check the decoder state with
570  *    OggFLAC__stream_decoder_get_state() to see what went wrong or to
571  *    check for lost synchronization (a sign of stream corruption).
572  */
573 OggFLAC_API FLAC__bool OggFLAC__stream_decoder_process_until_end_of_stream(OggFLAC__StreamDecoder *decoder);
574
575 /* \} */
576
577 #ifdef __cplusplus
578 }
579 #endif
580
581 #endif