Subversion Repositories Games.Prince of Persia

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
/* libFLAC - Free Lossless Audio Codec library
2
 * Copyright (C) 2000-2009  Josh Coalson
3
 * Copyright (C) 2011-2016  Xiph.Org Foundation
4
 *
5
 * Redistribution and use in source and binary forms, with or without
6
 * modification, are permitted provided that the following conditions
7
 * are met:
8
 *
9
 * - Redistributions of source code must retain the above copyright
10
 * notice, this list of conditions and the following disclaimer.
11
 *
12
 * - Redistributions in binary form must reproduce the above copyright
13
 * notice, this list of conditions and the following disclaimer in the
14
 * documentation and/or other materials provided with the distribution.
15
 *
16
 * - Neither the name of the Xiph.org Foundation nor the names of its
17
 * contributors may be used to endorse or promote products derived from
18
 * this software without specific prior written permission.
19
 *
20
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21
 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
23
 * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
24
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
 */
32
 
33
#ifndef FLAC__STREAM_DECODER_H
34
#define FLAC__STREAM_DECODER_H
35
 
36
#include <stdio.h> /* for FILE */
37
#include "export.h"
38
#include "format.h"
39
 
40
#ifdef __cplusplus
41
extern "C" {
42
#endif
43
 
44
 
45
/** \file include/FLAC/stream_decoder.h
46
 *
47
 *  \brief
48
 *  This module contains the functions which implement the stream
49
 *  decoder.
50
 *
51
 *  See the detailed documentation in the
52
 *  \link flac_stream_decoder stream decoder \endlink module.
53
 */
54
 
55
/** \defgroup flac_decoder FLAC/ \*_decoder.h: decoder interfaces
56
 *  \ingroup flac
57
 *
58
 *  \brief
59
 *  This module describes the decoder layers provided by libFLAC.
60
 *
61
 * The stream decoder can be used to decode complete streams either from
62
 * the client via callbacks, or directly from a file, depending on how
63
 * it is initialized.  When decoding via callbacks, the client provides
64
 * callbacks for reading FLAC data and writing decoded samples, and
65
 * handling metadata and errors.  If the client also supplies seek-related
66
 * callback, the decoder function for sample-accurate seeking within the
67
 * FLAC input is also available.  When decoding from a file, the client
68
 * needs only supply a filename or open \c FILE* and write/metadata/error
69
 * callbacks; the rest of the callbacks are supplied internally.  For more
70
 * info see the \link flac_stream_decoder stream decoder \endlink module.
71
 */
72
 
73
/** \defgroup flac_stream_decoder FLAC/stream_decoder.h: stream decoder interface
74
 *  \ingroup flac_decoder
75
 *
76
 *  \brief
77
 *  This module contains the functions which implement the stream
78
 *  decoder.
79
 *
80
 * The stream decoder can decode native FLAC, and optionally Ogg FLAC
81
 * (check FLAC_API_SUPPORTS_OGG_FLAC) streams and files.
82
 *
83
 * The basic usage of this decoder is as follows:
84
 * - The program creates an instance of a decoder using
85
 *   FLAC__stream_decoder_new().
86
 * - The program overrides the default settings using
87
 *   FLAC__stream_decoder_set_*() functions.
88
 * - The program initializes the instance to validate the settings and
89
 *   prepare for decoding using
90
 *   - FLAC__stream_decoder_init_stream() or FLAC__stream_decoder_init_FILE()
91
 *     or FLAC__stream_decoder_init_file() for native FLAC,
92
 *   - FLAC__stream_decoder_init_ogg_stream() or FLAC__stream_decoder_init_ogg_FILE()
93
 *     or FLAC__stream_decoder_init_ogg_file() for Ogg FLAC
94
 * - The program calls the FLAC__stream_decoder_process_*() functions
95
 *   to decode data, which subsequently calls the callbacks.
96
 * - The program finishes the decoding with FLAC__stream_decoder_finish(),
97
 *   which flushes the input and output and resets the decoder to the
98
 *   uninitialized state.
99
 * - The instance may be used again or deleted with
100
 *   FLAC__stream_decoder_delete().
101
 *
102
 * In more detail, the program will create a new instance by calling
103
 * FLAC__stream_decoder_new(), then call FLAC__stream_decoder_set_*()
104
 * functions to override the default decoder options, and call
105
 * one of the FLAC__stream_decoder_init_*() functions.
106
 *
107
 * There are three initialization functions for native FLAC, one for
108
 * setting up the decoder to decode FLAC data from the client via
109
 * callbacks, and two for decoding directly from a FLAC file.
110
 *
111
 * For decoding via callbacks, use FLAC__stream_decoder_init_stream().
112
 * You must also supply several callbacks for handling I/O.  Some (like
113
 * seeking) are optional, depending on the capabilities of the input.
114
 *
115
 * For decoding directly from a file, use FLAC__stream_decoder_init_FILE()
116
 * or FLAC__stream_decoder_init_file().  Then you must only supply an open
117
 * \c FILE* or filename and fewer callbacks; the decoder will handle
118
 * the other callbacks internally.
119
 *
120
 * There are three similarly-named init functions for decoding from Ogg
121
 * FLAC streams.  Check \c FLAC_API_SUPPORTS_OGG_FLAC to find out if the
122
 * library has been built with Ogg support.
123
 *
124
 * Once the decoder is initialized, your program will call one of several
125
 * functions to start the decoding process:
126
 *
127
 * - FLAC__stream_decoder_process_single() - Tells the decoder to process at
128
 *   most one metadata block or audio frame and return, calling either the
129
 *   metadata callback or write callback, respectively, once.  If the decoder
130
 *   loses sync it will return with only the error callback being called.
131
 * - FLAC__stream_decoder_process_until_end_of_metadata() - Tells the decoder
132
 *   to process the stream from the current location and stop upon reaching
133
 *   the first audio frame.  The client will get one metadata, write, or error
134
 *   callback per metadata block, audio frame, or sync error, respectively.
135
 * - FLAC__stream_decoder_process_until_end_of_stream() - Tells the decoder
136
 *   to process the stream from the current location until the read callback
137
 *   returns FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM or
138
 *   FLAC__STREAM_DECODER_READ_STATUS_ABORT.  The client will get one metadata,
139
 *   write, or error callback per metadata block, audio frame, or sync error,
140
 *   respectively.
141
 *
142
 * When the decoder has finished decoding (normally or through an abort),
143
 * the instance is finished by calling FLAC__stream_decoder_finish(), which
144
 * ensures the decoder is in the correct state and frees memory.  Then the
145
 * instance may be deleted with FLAC__stream_decoder_delete() or initialized
146
 * again to decode another stream.
147
 *
148
 * Seeking is exposed through the FLAC__stream_decoder_seek_absolute() method.
149
 * At any point after the stream decoder has been initialized, the client can
150
 * call this function to seek to an exact sample within the stream.
151
 * Subsequently, the first time the write callback is called it will be
152
 * passed a (possibly partial) block starting at that sample.
153
 *
154
 * If the client cannot seek via the callback interface provided, but still
155
 * has another way of seeking, it can flush the decoder using
156
 * FLAC__stream_decoder_flush() and start feeding data from the new position
157
 * through the read callback.
158
 *
159
 * The stream decoder also provides MD5 signature checking.  If this is
160
 * turned on before initialization, FLAC__stream_decoder_finish() will
161
 * report when the decoded MD5 signature does not match the one stored
162
 * in the STREAMINFO block.  MD5 checking is automatically turned off
163
 * (until the next FLAC__stream_decoder_reset()) if there is no signature
164
 * in the STREAMINFO block or when a seek is attempted.
165
 *
166
 * The FLAC__stream_decoder_set_metadata_*() functions deserve special
167
 * attention.  By default, the decoder only calls the metadata_callback for
168
 * the STREAMINFO block.  These functions allow you to tell the decoder
169
 * explicitly which blocks to parse and return via the metadata_callback
170
 * and/or which to skip.  Use a FLAC__stream_decoder_set_metadata_respond_all(),
171
 * FLAC__stream_decoder_set_metadata_ignore() ... or FLAC__stream_decoder_set_metadata_ignore_all(),
172
 * FLAC__stream_decoder_set_metadata_respond() ... sequence to exactly specify
173
 * which blocks to return.  Remember that metadata blocks can potentially
174
 * be big (for example, cover art) so filtering out the ones you don't
175
 * use can reduce the memory requirements of the decoder.  Also note the
176
 * special forms FLAC__stream_decoder_set_metadata_respond_application(id)
177
 * and FLAC__stream_decoder_set_metadata_ignore_application(id) for
178
 * filtering APPLICATION blocks based on the application ID.
179
 *
180
 * STREAMINFO and SEEKTABLE blocks are always parsed and used internally, but
181
 * they still can legally be filtered from the metadata_callback.
182
 *
183
 * \note
184
 * The "set" functions may only be called when the decoder is in the
185
 * state FLAC__STREAM_DECODER_UNINITIALIZED, i.e. after
186
 * FLAC__stream_decoder_new() or FLAC__stream_decoder_finish(), but
187
 * before FLAC__stream_decoder_init_*().  If this is the case they will
188
 * return \c true, otherwise \c false.
189
 *
190
 * \note
191
 * FLAC__stream_decoder_finish() resets all settings to the constructor
192
 * defaults, including the callbacks.
193
 *
194
 * \{
195
 */
196
 
197
 
198
/** State values for a FLAC__StreamDecoder
199
 *
200
 * The decoder's state can be obtained by calling FLAC__stream_decoder_get_state().
201
 */
202
typedef enum {
203
 
204
        FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0,
205
        /**< The decoder is ready to search for metadata. */
206
 
207
        FLAC__STREAM_DECODER_READ_METADATA,
208
        /**< The decoder is ready to or is in the process of reading metadata. */
209
 
210
        FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC,
211
        /**< The decoder is ready to or is in the process of searching for the
212
         * frame sync code.
213
         */
214
 
215
        FLAC__STREAM_DECODER_READ_FRAME,
216
        /**< The decoder is ready to or is in the process of reading a frame. */
217
 
218
        FLAC__STREAM_DECODER_END_OF_STREAM,
219
        /**< The decoder has reached the end of the stream. */
220
 
221
        FLAC__STREAM_DECODER_OGG_ERROR,
222
        /**< An error occurred in the underlying Ogg layer.  */
223
 
224
        FLAC__STREAM_DECODER_SEEK_ERROR,
225
        /**< An error occurred while seeking.  The decoder must be flushed
226
         * with FLAC__stream_decoder_flush() or reset with
227
         * FLAC__stream_decoder_reset() before decoding can continue.
228
         */
229
 
230
        FLAC__STREAM_DECODER_ABORTED,
231
        /**< The decoder was aborted by the read or write callback. */
232
 
233
        FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
234
        /**< An error occurred allocating memory.  The decoder is in an invalid
235
         * state and can no longer be used.
236
         */
237
 
238
        FLAC__STREAM_DECODER_UNINITIALIZED
239
        /**< The decoder is in the uninitialized state; one of the
240
         * FLAC__stream_decoder_init_*() functions must be called before samples
241
         * can be processed.
242
         */
243
 
244
} FLAC__StreamDecoderState;
245
 
246
/** Maps a FLAC__StreamDecoderState to a C string.
247
 *
248
 *  Using a FLAC__StreamDecoderState as the index to this array
249
 *  will give the string equivalent.  The contents should not be modified.
250
 */
251
extern FLAC_API const char * const FLAC__StreamDecoderStateString[];
252
 
253
 
254
/** Possible return values for the FLAC__stream_decoder_init_*() functions.
255
 */
256
typedef enum {
257
 
258
        FLAC__STREAM_DECODER_INIT_STATUS_OK = 0,
259
        /**< Initialization was successful. */
260
 
261
        FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
262
        /**< The library was not compiled with support for the given container
263
         * format.
264
         */
265
 
266
        FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS,
267
        /**< A required callback was not supplied. */
268
 
269
        FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR,
270
        /**< An error occurred allocating memory. */
271
 
272
        FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE,
273
        /**< fopen() failed in FLAC__stream_decoder_init_file() or
274
         * FLAC__stream_decoder_init_ogg_file(). */
275
 
276
        FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED
277
        /**< FLAC__stream_decoder_init_*() was called when the decoder was
278
         * already initialized, usually because
279
         * FLAC__stream_decoder_finish() was not called.
280
         */
281
 
282
} FLAC__StreamDecoderInitStatus;
283
 
284
/** Maps a FLAC__StreamDecoderInitStatus to a C string.
285
 *
286
 *  Using a FLAC__StreamDecoderInitStatus as the index to this array
287
 *  will give the string equivalent.  The contents should not be modified.
288
 */
289
extern FLAC_API const char * const FLAC__StreamDecoderInitStatusString[];
290
 
291
 
292
/** Return values for the FLAC__StreamDecoder read callback.
293
 */
294
typedef enum {
295
 
296
        FLAC__STREAM_DECODER_READ_STATUS_CONTINUE,
297
        /**< The read was OK and decoding can continue. */
298
 
299
        FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM,
300
        /**< The read was attempted while at the end of the stream.  Note that
301
         * the client must only return this value when the read callback was
302
         * called when already at the end of the stream.  Otherwise, if the read
303
         * itself moves to the end of the stream, the client should still return
304
         * the data and \c FLAC__STREAM_DECODER_READ_STATUS_CONTINUE, and then on
305
         * the next read callback it should return
306
         * \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM with a byte count
307
         * of \c 0.
308
         */
309
 
310
        FLAC__STREAM_DECODER_READ_STATUS_ABORT
311
        /**< An unrecoverable error occurred.  The decoder will return from the process call. */
312
 
313
} FLAC__StreamDecoderReadStatus;
314
 
315
/** Maps a FLAC__StreamDecoderReadStatus to a C string.
316
 *
317
 *  Using a FLAC__StreamDecoderReadStatus as the index to this array
318
 *  will give the string equivalent.  The contents should not be modified.
319
 */
320
extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[];
321
 
322
 
323
/** Return values for the FLAC__StreamDecoder seek callback.
324
 */
325
typedef enum {
326
 
327
        FLAC__STREAM_DECODER_SEEK_STATUS_OK,
328
        /**< The seek was OK and decoding can continue. */
329
 
330
        FLAC__STREAM_DECODER_SEEK_STATUS_ERROR,
331
        /**< An unrecoverable error occurred.  The decoder will return from the process call. */
332
 
333
        FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
334
        /**< Client does not support seeking. */
335
 
336
} FLAC__StreamDecoderSeekStatus;
337
 
338
/** Maps a FLAC__StreamDecoderSeekStatus to a C string.
339
 *
340
 *  Using a FLAC__StreamDecoderSeekStatus as the index to this array
341
 *  will give the string equivalent.  The contents should not be modified.
342
 */
343
extern FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[];
344
 
345
 
346
/** Return values for the FLAC__StreamDecoder tell callback.
347
 */
348
typedef enum {
349
 
350
        FLAC__STREAM_DECODER_TELL_STATUS_OK,
351
        /**< The tell was OK and decoding can continue. */
352
 
353
        FLAC__STREAM_DECODER_TELL_STATUS_ERROR,
354
        /**< An unrecoverable error occurred.  The decoder will return from the process call. */
355
 
356
        FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
357
        /**< Client does not support telling the position. */
358
 
359
} FLAC__StreamDecoderTellStatus;
360
 
361
/** Maps a FLAC__StreamDecoderTellStatus to a C string.
362
 *
363
 *  Using a FLAC__StreamDecoderTellStatus as the index to this array
364
 *  will give the string equivalent.  The contents should not be modified.
365
 */
366
extern FLAC_API const char * const FLAC__StreamDecoderTellStatusString[];
367
 
368
 
369
/** Return values for the FLAC__StreamDecoder length callback.
370
 */
371
typedef enum {
372
 
373
        FLAC__STREAM_DECODER_LENGTH_STATUS_OK,
374
        /**< The length call was OK and decoding can continue. */
375
 
376
        FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR,
377
        /**< An unrecoverable error occurred.  The decoder will return from the process call. */
378
 
379
        FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
380
        /**< Client does not support reporting the length. */
381
 
382
} FLAC__StreamDecoderLengthStatus;
383
 
384
/** Maps a FLAC__StreamDecoderLengthStatus to a C string.
385
 *
386
 *  Using a FLAC__StreamDecoderLengthStatus as the index to this array
387
 *  will give the string equivalent.  The contents should not be modified.
388
 */
389
extern FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[];
390
 
391
 
392
/** Return values for the FLAC__StreamDecoder write callback.
393
 */
394
typedef enum {
395
 
396
        FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE,
397
        /**< The write was OK and decoding can continue. */
398
 
399
        FLAC__STREAM_DECODER_WRITE_STATUS_ABORT
400
        /**< An unrecoverable error occurred.  The decoder will return from the process call. */
401
 
402
} FLAC__StreamDecoderWriteStatus;
403
 
404
/** Maps a FLAC__StreamDecoderWriteStatus to a C string.
405
 *
406
 *  Using a FLAC__StreamDecoderWriteStatus as the index to this array
407
 *  will give the string equivalent.  The contents should not be modified.
408
 */
409
extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[];
410
 
411
 
412
/** Possible values passed back to the FLAC__StreamDecoder error callback.
413
 *  \c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC is the generic catch-
414
 *  all.  The rest could be caused by bad sync (false synchronization on
415
 *  data that is not the start of a frame) or corrupted data.  The error
416
 *  itself is the decoder's best guess at what happened assuming a correct
417
 *  sync.  For example \c FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER
418
 *  could be caused by a correct sync on the start of a frame, but some
419
 *  data in the frame header was corrupted.  Or it could be the result of
420
 *  syncing on a point the stream that looked like the starting of a frame
421
 *  but was not.  \c FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM
422
 *  could be because the decoder encountered a valid frame made by a future
423
 *  version of the encoder which it cannot parse, or because of a false
424
 *  sync making it appear as though an encountered frame was generated by
425
 *  a future encoder.
426
 */
427
typedef enum {
428
 
429
        FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC,
430
        /**< An error in the stream caused the decoder to lose synchronization. */
431
 
432
        FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER,
433
        /**< The decoder encountered a corrupted frame header. */
434
 
435
        FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH,
436
        /**< The frame's data did not match the CRC in the footer. */
437
 
438
        FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM
439
        /**< The decoder encountered reserved fields in use in the stream. */
440
 
441
} FLAC__StreamDecoderErrorStatus;
442
 
443
/** Maps a FLAC__StreamDecoderErrorStatus to a C string.
444
 *
445
 *  Using a FLAC__StreamDecoderErrorStatus as the index to this array
446
 *  will give the string equivalent.  The contents should not be modified.
447
 */
448
extern FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[];
449
 
450
 
451
/***********************************************************************
452
 *
453
 * class FLAC__StreamDecoder
454
 *
455
 ***********************************************************************/
456
 
457
struct FLAC__StreamDecoderProtected;
458
struct FLAC__StreamDecoderPrivate;
459
/** The opaque structure definition for the stream decoder type.
460
 *  See the \link flac_stream_decoder stream decoder module \endlink
461
 *  for a detailed description.
462
 */
463
typedef struct {
464
        struct FLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
465
        struct FLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
466
} FLAC__StreamDecoder;
467
 
468
/** Signature for the read callback.
469
 *
470
 *  A function pointer matching this signature must be passed to
471
 *  FLAC__stream_decoder_init*_stream(). The supplied function will be
472
 *  called when the decoder needs more input data.  The address of the
473
 *  buffer to be filled is supplied, along with the number of bytes the
474
 *  buffer can hold.  The callback may choose to supply less data and
475
 *  modify the byte count but must be careful not to overflow the buffer.
476
 *  The callback then returns a status code chosen from
477
 *  FLAC__StreamDecoderReadStatus.
478
 *
479
 * Here is an example of a read callback for stdio streams:
480
 * \code
481
 * FLAC__StreamDecoderReadStatus read_cb(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data)
482
 * {
483
 *   FILE *file = ((MyClientData*)client_data)->file;
484
 *   if(*bytes > 0) {
485
 *     *bytes = fread(buffer, sizeof(FLAC__byte), *bytes, file);
486
 *     if(ferror(file))
487
 *       return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
488
 *     else if(*bytes == 0)
489
 *       return FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM;
490
 *     else
491
 *       return FLAC__STREAM_DECODER_READ_STATUS_CONTINUE;
492
 *   }
493
 *   else
494
 *     return FLAC__STREAM_DECODER_READ_STATUS_ABORT;
495
 * }
496
 * \endcode
497
 *
498
 * \note In general, FLAC__StreamDecoder functions which change the
499
 * state should not be called on the \a decoder while in the callback.
500
 *
501
 * \param  decoder  The decoder instance calling the callback.
502
 * \param  buffer   A pointer to a location for the callee to store
503
 *                  data to be decoded.
504
 * \param  bytes    A pointer to the size of the buffer.  On entry
505
 *                  to the callback, it contains the maximum number
506
 *                  of bytes that may be stored in \a buffer.  The
507
 *                  callee must set it to the actual number of bytes
508
 *                  stored (0 in case of error or end-of-stream) before
509
 *                  returning.
510
 * \param  client_data  The callee's client data set through
511
 *                      FLAC__stream_decoder_init_*().
512
 * \retval FLAC__StreamDecoderReadStatus
513
 *    The callee's return status.  Note that the callback should return
514
 *    \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM if and only if
515
 *    zero bytes were read and there is no more data to be read.
516
 */
517
typedef FLAC__StreamDecoderReadStatus (*FLAC__StreamDecoderReadCallback)(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
518
 
519
/** Signature for the seek callback.
520
 *
521
 *  A function pointer matching this signature may be passed to
522
 *  FLAC__stream_decoder_init*_stream().  The supplied function will be
523
 *  called when the decoder needs to seek the input stream.  The decoder
524
 *  will pass the absolute byte offset to seek to, 0 meaning the
525
 *  beginning of the stream.
526
 *
527
 * Here is an example of a seek callback for stdio streams:
528
 * \code
529
 * FLAC__StreamDecoderSeekStatus seek_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data)
530
 * {
531
 *   FILE *file = ((MyClientData*)client_data)->file;
532
 *   if(file == stdin)
533
 *     return FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED;
534
 *   else if(fseeko(file, (off_t)absolute_byte_offset, SEEK_SET) < 0)
535
 *     return FLAC__STREAM_DECODER_SEEK_STATUS_ERROR;
536
 *   else
537
 *     return FLAC__STREAM_DECODER_SEEK_STATUS_OK;
538
 * }
539
 * \endcode
540
 *
541
 * \note In general, FLAC__StreamDecoder functions which change the
542
 * state should not be called on the \a decoder while in the callback.
543
 *
544
 * \param  decoder  The decoder instance calling the callback.
545
 * \param  absolute_byte_offset  The offset from the beginning of the stream
546
 *                               to seek to.
547
 * \param  client_data  The callee's client data set through
548
 *                      FLAC__stream_decoder_init_*().
549
 * \retval FLAC__StreamDecoderSeekStatus
550
 *    The callee's return status.
551
 */
552
typedef FLAC__StreamDecoderSeekStatus (*FLAC__StreamDecoderSeekCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
553
 
554
/** Signature for the tell callback.
555
 *
556
 *  A function pointer matching this signature may be passed to
557
 *  FLAC__stream_decoder_init*_stream().  The supplied function will be
558
 *  called when the decoder wants to know the current position of the
559
 *  stream.  The callback should return the byte offset from the
560
 *  beginning of the stream.
561
 *
562
 * Here is an example of a tell callback for stdio streams:
563
 * \code
564
 * FLAC__StreamDecoderTellStatus tell_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data)
565
 * {
566
 *   FILE *file = ((MyClientData*)client_data)->file;
567
 *   off_t pos;
568
 *   if(file == stdin)
569
 *     return FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED;
570
 *   else if((pos = ftello(file)) < 0)
571
 *     return FLAC__STREAM_DECODER_TELL_STATUS_ERROR;
572
 *   else {
573
 *     *absolute_byte_offset = (FLAC__uint64)pos;
574
 *     return FLAC__STREAM_DECODER_TELL_STATUS_OK;
575
 *   }
576
 * }
577
 * \endcode
578
 *
579
 * \note In general, FLAC__StreamDecoder functions which change the
580
 * state should not be called on the \a decoder while in the callback.
581
 *
582
 * \param  decoder  The decoder instance calling the callback.
583
 * \param  absolute_byte_offset  A pointer to storage for the current offset
584
 *                               from the beginning of the stream.
585
 * \param  client_data  The callee's client data set through
586
 *                      FLAC__stream_decoder_init_*().
587
 * \retval FLAC__StreamDecoderTellStatus
588
 *    The callee's return status.
589
 */
590
typedef FLAC__StreamDecoderTellStatus (*FLAC__StreamDecoderTellCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
591
 
592
/** Signature for the length callback.
593
 *
594
 *  A function pointer matching this signature may be passed to
595
 *  FLAC__stream_decoder_init*_stream().  The supplied function will be
596
 *  called when the decoder wants to know the total length of the stream
597
 *  in bytes.
598
 *
599
 * Here is an example of a length callback for stdio streams:
600
 * \code
601
 * FLAC__StreamDecoderLengthStatus length_cb(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data)
602
 * {
603
 *   FILE *file = ((MyClientData*)client_data)->file;
604
 *   struct stat filestats;
605
 *
606
 *   if(file == stdin)
607
 *     return FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED;
608
 *   else if(fstat(fileno(file), &filestats) != 0)
609
 *     return FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR;
610
 *   else {
611
 *     *stream_length = (FLAC__uint64)filestats.st_size;
612
 *     return FLAC__STREAM_DECODER_LENGTH_STATUS_OK;
613
 *   }
614
 * }
615
 * \endcode
616
 *
617
 * \note In general, FLAC__StreamDecoder functions which change the
618
 * state should not be called on the \a decoder while in the callback.
619
 *
620
 * \param  decoder  The decoder instance calling the callback.
621
 * \param  stream_length  A pointer to storage for the length of the stream
622
 *                        in bytes.
623
 * \param  client_data  The callee's client data set through
624
 *                      FLAC__stream_decoder_init_*().
625
 * \retval FLAC__StreamDecoderLengthStatus
626
 *    The callee's return status.
627
 */
628
typedef FLAC__StreamDecoderLengthStatus (*FLAC__StreamDecoderLengthCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
629
 
630
/** Signature for the EOF callback.
631
 *
632
 *  A function pointer matching this signature may be passed to
633
 *  FLAC__stream_decoder_init*_stream().  The supplied function will be
634
 *  called when the decoder needs to know if the end of the stream has
635
 *  been reached.
636
 *
637
 * Here is an example of a EOF callback for stdio streams:
638
 * FLAC__bool eof_cb(const FLAC__StreamDecoder *decoder, void *client_data)
639
 * \code
640
 * {
641
 *   FILE *file = ((MyClientData*)client_data)->file;
642
 *   return feof(file)? true : false;
643
 * }
644
 * \endcode
645
 *
646
 * \note In general, FLAC__StreamDecoder functions which change the
647
 * state should not be called on the \a decoder while in the callback.
648
 *
649
 * \param  decoder  The decoder instance calling the callback.
650
 * \param  client_data  The callee's client data set through
651
 *                      FLAC__stream_decoder_init_*().
652
 * \retval FLAC__bool
653
 *    \c true if the currently at the end of the stream, else \c false.
654
 */
655
typedef FLAC__bool (*FLAC__StreamDecoderEofCallback)(const FLAC__StreamDecoder *decoder, void *client_data);
656
 
657
/** Signature for the write callback.
658
 *
659
 *  A function pointer matching this signature must be passed to one of
660
 *  the FLAC__stream_decoder_init_*() functions.
661
 *  The supplied function will be called when the decoder has decoded a
662
 *  single audio frame.  The decoder will pass the frame metadata as well
663
 *  as an array of pointers (one for each channel) pointing to the
664
 *  decoded audio.
665
 *
666
 * \note In general, FLAC__StreamDecoder functions which change the
667
 * state should not be called on the \a decoder while in the callback.
668
 *
669
 * \param  decoder  The decoder instance calling the callback.
670
 * \param  frame    The description of the decoded frame.  See
671
 *                  FLAC__Frame.
672
 * \param  buffer   An array of pointers to decoded channels of data.
673
 *                  Each pointer will point to an array of signed
674
 *                  samples of length \a frame->header.blocksize.
675
 *                  Channels will be ordered according to the FLAC
676
 *                  specification; see the documentation for the
677
 *                  <A HREF="../format.html#frame_header">frame header</A>.
678
 * \param  client_data  The callee's client data set through
679
 *                      FLAC__stream_decoder_init_*().
680
 * \retval FLAC__StreamDecoderWriteStatus
681
 *    The callee's return status.
682
 */
683
typedef FLAC__StreamDecoderWriteStatus (*FLAC__StreamDecoderWriteCallback)(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
684
 
685
/** Signature for the metadata callback.
686
 *
687
 *  A function pointer matching this signature must be passed to one of
688
 *  the FLAC__stream_decoder_init_*() functions.
689
 *  The supplied function will be called when the decoder has decoded a
690
 *  metadata block.  In a valid FLAC file there will always be one
691
 *  \c STREAMINFO block, followed by zero or more other metadata blocks.
692
 *  These will be supplied by the decoder in the same order as they
693
 *  appear in the stream and always before the first audio frame (i.e.
694
 *  write callback).  The metadata block that is passed in must not be
695
 *  modified, and it doesn't live beyond the callback, so you should make
696
 *  a copy of it with FLAC__metadata_object_clone() if you will need it
697
 *  elsewhere.  Since metadata blocks can potentially be large, by
698
 *  default the decoder only calls the metadata callback for the
699
 *  \c STREAMINFO block; you can instruct the decoder to pass or filter
700
 *  other blocks with FLAC__stream_decoder_set_metadata_*() calls.
701
 *
702
 * \note In general, FLAC__StreamDecoder functions which change the
703
 * state should not be called on the \a decoder while in the callback.
704
 *
705
 * \param  decoder  The decoder instance calling the callback.
706
 * \param  metadata The decoded metadata block.
707
 * \param  client_data  The callee's client data set through
708
 *                      FLAC__stream_decoder_init_*().
709
 */
710
typedef void (*FLAC__StreamDecoderMetadataCallback)(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
711
 
712
/** Signature for the error callback.
713
 *
714
 *  A function pointer matching this signature must be passed to one of
715
 *  the FLAC__stream_decoder_init_*() functions.
716
 *  The supplied function will be called whenever an error occurs during
717
 *  decoding.
718
 *
719
 * \note In general, FLAC__StreamDecoder functions which change the
720
 * state should not be called on the \a decoder while in the callback.
721
 *
722
 * \param  decoder  The decoder instance calling the callback.
723
 * \param  status   The error encountered by the decoder.
724
 * \param  client_data  The callee's client data set through
725
 *                      FLAC__stream_decoder_init_*().
726
 */
727
typedef void (*FLAC__StreamDecoderErrorCallback)(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
728
 
729
 
730
/***********************************************************************
731
 *
732
 * Class constructor/destructor
733
 *
734
 ***********************************************************************/
735
 
736
/** Create a new stream decoder instance.  The instance is created with
737
 *  default settings; see the individual FLAC__stream_decoder_set_*()
738
 *  functions for each setting's default.
739
 *
740
 * \retval FLAC__StreamDecoder*
741
 *    \c NULL if there was an error allocating memory, else the new instance.
742
 */
743
FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void);
744
 
745
/** Free a decoder instance.  Deletes the object pointed to by \a decoder.
746
 *
747
 * \param decoder  A pointer to an existing decoder.
748
 * \assert
749
 *    \code decoder != NULL \endcode
750
 */
751
FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder);
752
 
753
 
754
/***********************************************************************
755
 *
756
 * Public class method prototypes
757
 *
758
 ***********************************************************************/
759
 
760
/** Set the serial number for the FLAC stream within the Ogg container.
761
 *  The default behavior is to use the serial number of the first Ogg
762
 *  page.  Setting a serial number here will explicitly specify which
763
 *  stream is to be decoded.
764
 *
765
 * \note
766
 * This does not need to be set for native FLAC decoding.
767
 *
768
 * \default \c use serial number of first page
769
 * \param  decoder        A decoder instance to set.
770
 * \param  serial_number  See above.
771
 * \assert
772
 *    \code decoder != NULL \endcode
773
 * \retval FLAC__bool
774
 *    \c false if the decoder is already initialized, else \c true.
775
 */
776
FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long serial_number);
777
 
778
/** Set the "MD5 signature checking" flag.  If \c true, the decoder will
779
 *  compute the MD5 signature of the unencoded audio data while decoding
780
 *  and compare it to the signature from the STREAMINFO block, if it
781
 *  exists, during FLAC__stream_decoder_finish().
782
 *
783
 *  MD5 signature checking will be turned off (until the next
784
 *  FLAC__stream_decoder_reset()) if there is no signature in the
785
 *  STREAMINFO block or when a seek is attempted.
786
 *
787
 *  Clients that do not use the MD5 check should leave this off to speed
788
 *  up decoding.
789
 *
790
 * \default \c false
791
 * \param  decoder  A decoder instance to set.
792
 * \param  value    Flag value (see above).
793
 * \assert
794
 *    \code decoder != NULL \endcode
795
 * \retval FLAC__bool
796
 *    \c false if the decoder is already initialized, else \c true.
797
 */
798
FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value);
799
 
800
/** Direct the decoder to pass on all metadata blocks of type \a type.
801
 *
802
 * \default By default, only the \c STREAMINFO block is returned via the
803
 *          metadata callback.
804
 * \param  decoder  A decoder instance to set.
805
 * \param  type     See above.
806
 * \assert
807
 *    \code decoder != NULL \endcode
808
 *    \a type is valid
809
 * \retval FLAC__bool
810
 *    \c false if the decoder is already initialized, else \c true.
811
 */
812
FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
813
 
814
/** Direct the decoder to pass on all APPLICATION metadata blocks of the
815
 *  given \a id.
816
 *
817
 * \default By default, only the \c STREAMINFO block is returned via the
818
 *          metadata callback.
819
 * \param  decoder  A decoder instance to set.
820
 * \param  id       See above.
821
 * \assert
822
 *    \code decoder != NULL \endcode
823
 *    \code id != NULL \endcode
824
 * \retval FLAC__bool
825
 *    \c false if the decoder is already initialized, else \c true.
826
 */
827
FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
828
 
829
/** Direct the decoder to pass on all metadata blocks of any type.
830
 *
831
 * \default By default, only the \c STREAMINFO block is returned via the
832
 *          metadata callback.
833
 * \param  decoder  A decoder instance to set.
834
 * \assert
835
 *    \code decoder != NULL \endcode
836
 * \retval FLAC__bool
837
 *    \c false if the decoder is already initialized, else \c true.
838
 */
839
FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder);
840
 
841
/** Direct the decoder to filter out all metadata blocks of type \a type.
842
 *
843
 * \default By default, only the \c STREAMINFO block is returned via the
844
 *          metadata callback.
845
 * \param  decoder  A decoder instance to set.
846
 * \param  type     See above.
847
 * \assert
848
 *    \code decoder != NULL \endcode
849
 *    \a type is valid
850
 * \retval FLAC__bool
851
 *    \c false if the decoder is already initialized, else \c true.
852
 */
853
FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
854
 
855
/** Direct the decoder to filter out all APPLICATION metadata blocks of
856
 *  the given \a id.
857
 *
858
 * \default By default, only the \c STREAMINFO block is returned via the
859
 *          metadata callback.
860
 * \param  decoder  A decoder instance to set.
861
 * \param  id       See above.
862
 * \assert
863
 *    \code decoder != NULL \endcode
864
 *    \code id != NULL \endcode
865
 * \retval FLAC__bool
866
 *    \c false if the decoder is already initialized, else \c true.
867
 */
868
FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
869
 
870
/** Direct the decoder to filter out all metadata blocks of any type.
871
 *
872
 * \default By default, only the \c STREAMINFO block is returned via the
873
 *          metadata callback.
874
 * \param  decoder  A decoder instance to set.
875
 * \assert
876
 *    \code decoder != NULL \endcode
877
 * \retval FLAC__bool
878
 *    \c false if the decoder is already initialized, else \c true.
879
 */
880
FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder);
881
 
882
/** Get the current decoder state.
883
 *
884
 * \param  decoder  A decoder instance to query.
885
 * \assert
886
 *    \code decoder != NULL \endcode
887
 * \retval FLAC__StreamDecoderState
888
 *    The current decoder state.
889
 */
890
FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder);
891
 
892
/** Get the current decoder state as a C string.
893
 *
894
 * \param  decoder  A decoder instance to query.
895
 * \assert
896
 *    \code decoder != NULL \endcode
897
 * \retval const char *
898
 *    The decoder state as a C string.  Do not modify the contents.
899
 */
900
FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder);
901
 
902
/** Get the "MD5 signature checking" flag.
903
 *  This is the value of the setting, not whether or not the decoder is
904
 *  currently checking the MD5 (remember, it can be turned off automatically
905
 *  by a seek).  When the decoder is reset the flag will be restored to the
906
 *  value returned by this function.
907
 *
908
 * \param  decoder  A decoder instance to query.
909
 * \assert
910
 *    \code decoder != NULL \endcode
911
 * \retval FLAC__bool
912
 *    See above.
913
 */
914
FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder);
915
 
916
/** Get the total number of samples in the stream being decoded.
917
 *  Will only be valid after decoding has started and will contain the
918
 *  value from the \c STREAMINFO block.  A value of \c 0 means "unknown".
919
 *
920
 * \param  decoder  A decoder instance to query.
921
 * \assert
922
 *    \code decoder != NULL \endcode
923
 * \retval unsigned
924
 *    See above.
925
 */
926
FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder);
927
 
928
/** Get the current number of channels in the stream being decoded.
929
 *  Will only be valid after decoding has started and will contain the
930
 *  value from the most recently decoded frame header.
931
 *
932
 * \param  decoder  A decoder instance to query.
933
 * \assert
934
 *    \code decoder != NULL \endcode
935
 * \retval unsigned
936
 *    See above.
937
 */
938
FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder);
939
 
940
/** Get the current channel assignment in the stream being decoded.
941
 *  Will only be valid after decoding has started and will contain the
942
 *  value from the most recently decoded frame header.
943
 *
944
 * \param  decoder  A decoder instance to query.
945
 * \assert
946
 *    \code decoder != NULL \endcode
947
 * \retval FLAC__ChannelAssignment
948
 *    See above.
949
 */
950
FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder);
951
 
952
/** Get the current sample resolution in the stream being decoded.
953
 *  Will only be valid after decoding has started and will contain the
954
 *  value from the most recently decoded frame header.
955
 *
956
 * \param  decoder  A decoder instance to query.
957
 * \assert
958
 *    \code decoder != NULL \endcode
959
 * \retval unsigned
960
 *    See above.
961
 */
962
FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder);
963
 
964
/** Get the current sample rate in Hz of the stream being decoded.
965
 *  Will only be valid after decoding has started and will contain the
966
 *  value from the most recently decoded frame header.
967
 *
968
 * \param  decoder  A decoder instance to query.
969
 * \assert
970
 *    \code decoder != NULL \endcode
971
 * \retval unsigned
972
 *    See above.
973
 */
974
FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder);
975
 
976
/** Get the current blocksize of the stream being decoded.
977
 *  Will only be valid after decoding has started and will contain the
978
 *  value from the most recently decoded frame header.
979
 *
980
 * \param  decoder  A decoder instance to query.
981
 * \assert
982
 *    \code decoder != NULL \endcode
983
 * \retval unsigned
984
 *    See above.
985
 */
986
FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder);
987
 
988
/** Returns the decoder's current read position within the stream.
989
 *  The position is the byte offset from the start of the stream.
990
 *  Bytes before this position have been fully decoded.  Note that
991
 *  there may still be undecoded bytes in the decoder's read FIFO.
992
 *  The returned position is correct even after a seek.
993
 *
994
 *  \warning This function currently only works for native FLAC,
995
 *           not Ogg FLAC streams.
996
 *
997
 * \param  decoder   A decoder instance to query.
998
 * \param  position  Address at which to return the desired position.
999
 * \assert
1000
 *    \code decoder != NULL \endcode
1001
 *    \code position != NULL \endcode
1002
 * \retval FLAC__bool
1003
 *    \c true if successful, \c false if the stream is not native FLAC,
1004
 *    or there was an error from the 'tell' callback or it returned
1005
 *    \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED.
1006
 */
1007
FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position);
1008
 
1009
/** Initialize the decoder instance to decode native FLAC streams.
1010
 *
1011
 *  This flavor of initialization sets up the decoder to decode from a
1012
 *  native FLAC stream. I/O is performed via callbacks to the client.
1013
 *  For decoding from a plain file via filename or open FILE*,
1014
 *  FLAC__stream_decoder_init_file() and FLAC__stream_decoder_init_FILE()
1015
 *  provide a simpler interface.
1016
 *
1017
 *  This function should be called after FLAC__stream_decoder_new() and
1018
 *  FLAC__stream_decoder_set_*() but before any of the
1019
 *  FLAC__stream_decoder_process_*() functions.  Will set and return the
1020
 *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
1021
 *  if initialization succeeded.
1022
 *
1023
 * \param  decoder            An uninitialized decoder instance.
1024
 * \param  read_callback      See FLAC__StreamDecoderReadCallback.  This
1025
 *                            pointer must not be \c NULL.
1026
 * \param  seek_callback      See FLAC__StreamDecoderSeekCallback.  This
1027
 *                            pointer may be \c NULL if seeking is not
1028
 *                            supported.  If \a seek_callback is not \c NULL then a
1029
 *                            \a tell_callback, \a length_callback, and \a eof_callback must also be supplied.
1030
 *                            Alternatively, a dummy seek callback that just
1031
 *                            returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
1032
 *                            may also be supplied, all though this is slightly
1033
 *                            less efficient for the decoder.
1034
 * \param  tell_callback      See FLAC__StreamDecoderTellCallback.  This
1035
 *                            pointer may be \c NULL if not supported by the client.  If
1036
 *                            \a seek_callback is not \c NULL then a
1037
 *                            \a tell_callback must also be supplied.
1038
 *                            Alternatively, a dummy tell callback that just
1039
 *                            returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
1040
 *                            may also be supplied, all though this is slightly
1041
 *                            less efficient for the decoder.
1042
 * \param  length_callback    See FLAC__StreamDecoderLengthCallback.  This
1043
 *                            pointer may be \c NULL if not supported by the client.  If
1044
 *                            \a seek_callback is not \c NULL then a
1045
 *                            \a length_callback must also be supplied.
1046
 *                            Alternatively, a dummy length callback that just
1047
 *                            returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
1048
 *                            may also be supplied, all though this is slightly
1049
 *                            less efficient for the decoder.
1050
 * \param  eof_callback       See FLAC__StreamDecoderEofCallback.  This
1051
 *                            pointer may be \c NULL if not supported by the client.  If
1052
 *                            \a seek_callback is not \c NULL then a
1053
 *                            \a eof_callback must also be supplied.
1054
 *                            Alternatively, a dummy length callback that just
1055
 *                            returns \c false
1056
 *                            may also be supplied, all though this is slightly
1057
 *                            less efficient for the decoder.
1058
 * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
1059
 *                            pointer must not be \c NULL.
1060
 * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
1061
 *                            pointer may be \c NULL if the callback is not
1062
 *                            desired.
1063
 * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
1064
 *                            pointer must not be \c NULL.
1065
 * \param  client_data        This value will be supplied to callbacks in their
1066
 *                            \a client_data argument.
1067
 * \assert
1068
 *    \code decoder != NULL \endcode
1069
 * \retval FLAC__StreamDecoderInitStatus
1070
 *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
1071
 *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
1072
 */
1073
FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
1074
        FLAC__StreamDecoder *decoder,
1075
        FLAC__StreamDecoderReadCallback read_callback,
1076
        FLAC__StreamDecoderSeekCallback seek_callback,
1077
        FLAC__StreamDecoderTellCallback tell_callback,
1078
        FLAC__StreamDecoderLengthCallback length_callback,
1079
        FLAC__StreamDecoderEofCallback eof_callback,
1080
        FLAC__StreamDecoderWriteCallback write_callback,
1081
        FLAC__StreamDecoderMetadataCallback metadata_callback,
1082
        FLAC__StreamDecoderErrorCallback error_callback,
1083
        void *client_data
1084
);
1085
 
1086
/** Initialize the decoder instance to decode Ogg FLAC streams.
1087
 *
1088
 *  This flavor of initialization sets up the decoder to decode from a
1089
 *  FLAC stream in an Ogg container. I/O is performed via callbacks to the
1090
 *  client.  For decoding from a plain file via filename or open FILE*,
1091
 *  FLAC__stream_decoder_init_ogg_file() and FLAC__stream_decoder_init_ogg_FILE()
1092
 *  provide a simpler interface.
1093
 *
1094
 *  This function should be called after FLAC__stream_decoder_new() and
1095
 *  FLAC__stream_decoder_set_*() but before any of the
1096
 *  FLAC__stream_decoder_process_*() functions.  Will set and return the
1097
 *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
1098
 *  if initialization succeeded.
1099
 *
1100
 *  \note Support for Ogg FLAC in the library is optional.  If this
1101
 *  library has been built without support for Ogg FLAC, this function
1102
 *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
1103
 *
1104
 * \param  decoder            An uninitialized decoder instance.
1105
 * \param  read_callback      See FLAC__StreamDecoderReadCallback.  This
1106
 *                            pointer must not be \c NULL.
1107
 * \param  seek_callback      See FLAC__StreamDecoderSeekCallback.  This
1108
 *                            pointer may be \c NULL if seeking is not
1109
 *                            supported.  If \a seek_callback is not \c NULL then a
1110
 *                            \a tell_callback, \a length_callback, and \a eof_callback must also be supplied.
1111
 *                            Alternatively, a dummy seek callback that just
1112
 *                            returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
1113
 *                            may also be supplied, all though this is slightly
1114
 *                            less efficient for the decoder.
1115
 * \param  tell_callback      See FLAC__StreamDecoderTellCallback.  This
1116
 *                            pointer may be \c NULL if not supported by the client.  If
1117
 *                            \a seek_callback is not \c NULL then a
1118
 *                            \a tell_callback must also be supplied.
1119
 *                            Alternatively, a dummy tell callback that just
1120
 *                            returns \c FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
1121
 *                            may also be supplied, all though this is slightly
1122
 *                            less efficient for the decoder.
1123
 * \param  length_callback    See FLAC__StreamDecoderLengthCallback.  This
1124
 *                            pointer may be \c NULL if not supported by the client.  If
1125
 *                            \a seek_callback is not \c NULL then a
1126
 *                            \a length_callback must also be supplied.
1127
 *                            Alternatively, a dummy length callback that just
1128
 *                            returns \c FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
1129
 *                            may also be supplied, all though this is slightly
1130
 *                            less efficient for the decoder.
1131
 * \param  eof_callback       See FLAC__StreamDecoderEofCallback.  This
1132
 *                            pointer may be \c NULL if not supported by the client.  If
1133
 *                            \a seek_callback is not \c NULL then a
1134
 *                            \a eof_callback must also be supplied.
1135
 *                            Alternatively, a dummy length callback that just
1136
 *                            returns \c false
1137
 *                            may also be supplied, all though this is slightly
1138
 *                            less efficient for the decoder.
1139
 * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
1140
 *                            pointer must not be \c NULL.
1141
 * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
1142
 *                            pointer may be \c NULL if the callback is not
1143
 *                            desired.
1144
 * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
1145
 *                            pointer must not be \c NULL.
1146
 * \param  client_data        This value will be supplied to callbacks in their
1147
 *                            \a client_data argument.
1148
 * \assert
1149
 *    \code decoder != NULL \endcode
1150
 * \retval FLAC__StreamDecoderInitStatus
1151
 *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
1152
 *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
1153
 */
1154
FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream(
1155
        FLAC__StreamDecoder *decoder,
1156
        FLAC__StreamDecoderReadCallback read_callback,
1157
        FLAC__StreamDecoderSeekCallback seek_callback,
1158
        FLAC__StreamDecoderTellCallback tell_callback,
1159
        FLAC__StreamDecoderLengthCallback length_callback,
1160
        FLAC__StreamDecoderEofCallback eof_callback,
1161
        FLAC__StreamDecoderWriteCallback write_callback,
1162
        FLAC__StreamDecoderMetadataCallback metadata_callback,
1163
        FLAC__StreamDecoderErrorCallback error_callback,
1164
        void *client_data
1165
);
1166
 
1167
/** Initialize the decoder instance to decode native FLAC files.
1168
 *
1169
 *  This flavor of initialization sets up the decoder to decode from a
1170
 *  plain native FLAC file.  For non-stdio streams, you must use
1171
 *  FLAC__stream_decoder_init_stream() and provide callbacks for the I/O.
1172
 *
1173
 *  This function should be called after FLAC__stream_decoder_new() and
1174
 *  FLAC__stream_decoder_set_*() but before any of the
1175
 *  FLAC__stream_decoder_process_*() functions.  Will set and return the
1176
 *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
1177
 *  if initialization succeeded.
1178
 *
1179
 * \param  decoder            An uninitialized decoder instance.
1180
 * \param  file               An open FLAC file.  The file should have been
1181
 *                            opened with mode \c "rb" and rewound.  The file
1182
 *                            becomes owned by the decoder and should not be
1183
 *                            manipulated by the client while decoding.
1184
 *                            Unless \a file is \c stdin, it will be closed
1185
 *                            when FLAC__stream_decoder_finish() is called.
1186
 *                            Note however that seeking will not work when
1187
 *                            decoding from \c stdout since it is not seekable.
1188
 * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
1189
 *                            pointer must not be \c NULL.
1190
 * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
1191
 *                            pointer may be \c NULL if the callback is not
1192
 *                            desired.
1193
 * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
1194
 *                            pointer must not be \c NULL.
1195
 * \param  client_data        This value will be supplied to callbacks in their
1196
 *                            \a client_data argument.
1197
 * \assert
1198
 *    \code decoder != NULL \endcode
1199
 *    \code file != NULL \endcode
1200
 * \retval FLAC__StreamDecoderInitStatus
1201
 *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
1202
 *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
1203
 */
1204
FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
1205
        FLAC__StreamDecoder *decoder,
1206
        FILE *file,
1207
        FLAC__StreamDecoderWriteCallback write_callback,
1208
        FLAC__StreamDecoderMetadataCallback metadata_callback,
1209
        FLAC__StreamDecoderErrorCallback error_callback,
1210
        void *client_data
1211
);
1212
 
1213
/** Initialize the decoder instance to decode Ogg FLAC files.
1214
 *
1215
 *  This flavor of initialization sets up the decoder to decode from a
1216
 *  plain Ogg FLAC file.  For non-stdio streams, you must use
1217
 *  FLAC__stream_decoder_init_ogg_stream() and provide callbacks for the I/O.
1218
 *
1219
 *  This function should be called after FLAC__stream_decoder_new() and
1220
 *  FLAC__stream_decoder_set_*() but before any of the
1221
 *  FLAC__stream_decoder_process_*() functions.  Will set and return the
1222
 *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
1223
 *  if initialization succeeded.
1224
 *
1225
 *  \note Support for Ogg FLAC in the library is optional.  If this
1226
 *  library has been built without support for Ogg FLAC, this function
1227
 *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
1228
 *
1229
 * \param  decoder            An uninitialized decoder instance.
1230
 * \param  file               An open FLAC file.  The file should have been
1231
 *                            opened with mode \c "rb" and rewound.  The file
1232
 *                            becomes owned by the decoder and should not be
1233
 *                            manipulated by the client while decoding.
1234
 *                            Unless \a file is \c stdin, it will be closed
1235
 *                            when FLAC__stream_decoder_finish() is called.
1236
 *                            Note however that seeking will not work when
1237
 *                            decoding from \c stdout since it is not seekable.
1238
 * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
1239
 *                            pointer must not be \c NULL.
1240
 * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
1241
 *                            pointer may be \c NULL if the callback is not
1242
 *                            desired.
1243
 * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
1244
 *                            pointer must not be \c NULL.
1245
 * \param  client_data        This value will be supplied to callbacks in their
1246
 *                            \a client_data argument.
1247
 * \assert
1248
 *    \code decoder != NULL \endcode
1249
 *    \code file != NULL \endcode
1250
 * \retval FLAC__StreamDecoderInitStatus
1251
 *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
1252
 *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
1253
 */
1254
FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE(
1255
        FLAC__StreamDecoder *decoder,
1256
        FILE *file,
1257
        FLAC__StreamDecoderWriteCallback write_callback,
1258
        FLAC__StreamDecoderMetadataCallback metadata_callback,
1259
        FLAC__StreamDecoderErrorCallback error_callback,
1260
        void *client_data
1261
);
1262
 
1263
/** Initialize the decoder instance to decode native FLAC files.
1264
 *
1265
 *  This flavor of initialization sets up the decoder to decode from a plain
1266
 *  native FLAC file.  If POSIX fopen() semantics are not sufficient, (for
1267
 *  example, with Unicode filenames on Windows), you must use
1268
 *  FLAC__stream_decoder_init_FILE(), or FLAC__stream_decoder_init_stream()
1269
 *  and provide callbacks for the I/O.
1270
 *
1271
 *  This function should be called after FLAC__stream_decoder_new() and
1272
 *  FLAC__stream_decoder_set_*() but before any of the
1273
 *  FLAC__stream_decoder_process_*() functions.  Will set and return the
1274
 *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
1275
 *  if initialization succeeded.
1276
 *
1277
 * \param  decoder            An uninitialized decoder instance.
1278
 * \param  filename           The name of the file to decode from.  The file will
1279
 *                            be opened with fopen().  Use \c NULL to decode from
1280
 *                            \c stdin.  Note that \c stdin is not seekable.
1281
 * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
1282
 *                            pointer must not be \c NULL.
1283
 * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
1284
 *                            pointer may be \c NULL if the callback is not
1285
 *                            desired.
1286
 * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
1287
 *                            pointer must not be \c NULL.
1288
 * \param  client_data        This value will be supplied to callbacks in their
1289
 *                            \a client_data argument.
1290
 * \assert
1291
 *    \code decoder != NULL \endcode
1292
 * \retval FLAC__StreamDecoderInitStatus
1293
 *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
1294
 *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
1295
 */
1296
FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
1297
        FLAC__StreamDecoder *decoder,
1298
        const char *filename,
1299
        FLAC__StreamDecoderWriteCallback write_callback,
1300
        FLAC__StreamDecoderMetadataCallback metadata_callback,
1301
        FLAC__StreamDecoderErrorCallback error_callback,
1302
        void *client_data
1303
);
1304
 
1305
/** Initialize the decoder instance to decode Ogg FLAC files.
1306
 *
1307
 *  This flavor of initialization sets up the decoder to decode from a plain
1308
 *  Ogg FLAC file.  If POSIX fopen() semantics are not sufficient, (for
1309
 *  example, with Unicode filenames on Windows), you must use
1310
 *  FLAC__stream_decoder_init_ogg_FILE(), or FLAC__stream_decoder_init_ogg_stream()
1311
 *  and provide callbacks for the I/O.
1312
 *
1313
 *  This function should be called after FLAC__stream_decoder_new() and
1314
 *  FLAC__stream_decoder_set_*() but before any of the
1315
 *  FLAC__stream_decoder_process_*() functions.  Will set and return the
1316
 *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
1317
 *  if initialization succeeded.
1318
 *
1319
 *  \note Support for Ogg FLAC in the library is optional.  If this
1320
 *  library has been built without support for Ogg FLAC, this function
1321
 *  will return \c FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER.
1322
 *
1323
 * \param  decoder            An uninitialized decoder instance.
1324
 * \param  filename           The name of the file to decode from.  The file will
1325
 *                            be opened with fopen().  Use \c NULL to decode from
1326
 *                            \c stdin.  Note that \c stdin is not seekable.
1327
 * \param  write_callback     See FLAC__StreamDecoderWriteCallback.  This
1328
 *                            pointer must not be \c NULL.
1329
 * \param  metadata_callback  See FLAC__StreamDecoderMetadataCallback.  This
1330
 *                            pointer may be \c NULL if the callback is not
1331
 *                            desired.
1332
 * \param  error_callback     See FLAC__StreamDecoderErrorCallback.  This
1333
 *                            pointer must not be \c NULL.
1334
 * \param  client_data        This value will be supplied to callbacks in their
1335
 *                            \a client_data argument.
1336
 * \assert
1337
 *    \code decoder != NULL \endcode
1338
 * \retval FLAC__StreamDecoderInitStatus
1339
 *    \c FLAC__STREAM_DECODER_INIT_STATUS_OK if initialization was successful;
1340
 *    see FLAC__StreamDecoderInitStatus for the meanings of other return values.
1341
 */
1342
FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file(
1343
        FLAC__StreamDecoder *decoder,
1344
        const char *filename,
1345
        FLAC__StreamDecoderWriteCallback write_callback,
1346
        FLAC__StreamDecoderMetadataCallback metadata_callback,
1347
        FLAC__StreamDecoderErrorCallback error_callback,
1348
        void *client_data
1349
);
1350
 
1351
/** Finish the decoding process.
1352
 *  Flushes the decoding buffer, releases resources, resets the decoder
1353
 *  settings to their defaults, and returns the decoder state to
1354
 *  FLAC__STREAM_DECODER_UNINITIALIZED.
1355
 *
1356
 *  In the event of a prematurely-terminated decode, it is not strictly
1357
 *  necessary to call this immediately before FLAC__stream_decoder_delete()
1358
 *  but it is good practice to match every FLAC__stream_decoder_init_*()
1359
 *  with a FLAC__stream_decoder_finish().
1360
 *
1361
 * \param  decoder  An uninitialized decoder instance.
1362
 * \assert
1363
 *    \code decoder != NULL \endcode
1364
 * \retval FLAC__bool
1365
 *    \c false if MD5 checking is on AND a STREAMINFO block was available
1366
 *    AND the MD5 signature in the STREAMINFO block was non-zero AND the
1367
 *    signature does not match the one computed by the decoder; else
1368
 *    \c true.
1369
 */
1370
FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder);
1371
 
1372
/** Flush the stream input.
1373
 *  The decoder's input buffer will be cleared and the state set to
1374
 *  \c FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC.  This will also turn
1375
 *  off MD5 checking.
1376
 *
1377
 * \param  decoder  A decoder instance.
1378
 * \assert
1379
 *    \code decoder != NULL \endcode
1380
 * \retval FLAC__bool
1381
 *    \c true if successful, else \c false if a memory allocation
1382
 *    error occurs (in which case the state will be set to
1383
 *    \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR).
1384
 */
1385
FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder);
1386
 
1387
/** Reset the decoding process.
1388
 *  The decoder's input buffer will be cleared and the state set to
1389
 *  \c FLAC__STREAM_DECODER_SEARCH_FOR_METADATA.  This is similar to
1390
 *  FLAC__stream_decoder_finish() except that the settings are
1391
 *  preserved; there is no need to call FLAC__stream_decoder_init_*()
1392
 *  before decoding again.  MD5 checking will be restored to its original
1393
 *  setting.
1394
 *
1395
 *  If the decoder is seekable, or was initialized with
1396
 *  FLAC__stream_decoder_init*_FILE() or FLAC__stream_decoder_init*_file(),
1397
 *  the decoder will also attempt to seek to the beginning of the file.
1398
 *  If this rewind fails, this function will return \c false.  It follows
1399
 *  that FLAC__stream_decoder_reset() cannot be used when decoding from
1400
 *  \c stdin.
1401
 *
1402
 *  If the decoder was initialized with FLAC__stream_encoder_init*_stream()
1403
 *  and is not seekable (i.e. no seek callback was provided or the seek
1404
 *  callback returns \c FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED), it
1405
 *  is the duty of the client to start feeding data from the beginning of
1406
 *  the stream on the next FLAC__stream_decoder_process() or
1407
 *  FLAC__stream_decoder_process_interleaved() call.
1408
 *
1409
 * \param  decoder  A decoder instance.
1410
 * \assert
1411
 *    \code decoder != NULL \endcode
1412
 * \retval FLAC__bool
1413
 *    \c true if successful, else \c false if a memory allocation occurs
1414
 *    (in which case the state will be set to
1415
 *    \c FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR) or a seek error
1416
 *    occurs (the state will be unchanged).
1417
 */
1418
FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder);
1419
 
1420
/** Decode one metadata block or audio frame.
1421
 *  This version instructs the decoder to decode a either a single metadata
1422
 *  block or a single frame and stop, unless the callbacks return a fatal
1423
 *  error or the read callback returns
1424
 *  \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
1425
 *
1426
 *  As the decoder needs more input it will call the read callback.
1427
 *  Depending on what was decoded, the metadata or write callback will be
1428
 *  called with the decoded metadata block or audio frame.
1429
 *
1430
 *  Unless there is a fatal read error or end of stream, this function
1431
 *  will return once one whole frame is decoded.  In other words, if the
1432
 *  stream is not synchronized or points to a corrupt frame header, the
1433
 *  decoder will continue to try and resync until it gets to a valid
1434
 *  frame, then decode one frame, then return.  If the decoder points to
1435
 *  a frame whose frame CRC in the frame footer does not match the
1436
 *  computed frame CRC, this function will issue a
1437
 *  FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH error to the
1438
 *  error callback, and return, having decoded one complete, although
1439
 *  corrupt, frame.  (Such corrupted frames are sent as silence of the
1440
 *  correct length to the write callback.)
1441
 *
1442
 * \param  decoder  An initialized decoder instance.
1443
 * \assert
1444
 *    \code decoder != NULL \endcode
1445
 * \retval FLAC__bool
1446
 *    \c false if any fatal read, write, or memory allocation error
1447
 *    occurred (meaning decoding must stop), else \c true; for more
1448
 *    information about the decoder, check the decoder state with
1449
 *    FLAC__stream_decoder_get_state().
1450
 */
1451
FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder);
1452
 
1453
/** Decode until the end of the metadata.
1454
 *  This version instructs the decoder to decode from the current position
1455
 *  and continue until all the metadata has been read, or until the
1456
 *  callbacks return a fatal error or the read callback returns
1457
 *  \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
1458
 *
1459
 *  As the decoder needs more input it will call the read callback.
1460
 *  As each metadata block is decoded, the metadata callback will be called
1461
 *  with the decoded metadata.
1462
 *
1463
 * \param  decoder  An initialized decoder instance.
1464
 * \assert
1465
 *    \code decoder != NULL \endcode
1466
 * \retval FLAC__bool
1467
 *    \c false if any fatal read, write, or memory allocation error
1468
 *    occurred (meaning decoding must stop), else \c true; for more
1469
 *    information about the decoder, check the decoder state with
1470
 *    FLAC__stream_decoder_get_state().
1471
 */
1472
FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder);
1473
 
1474
/** Decode until the end of the stream.
1475
 *  This version instructs the decoder to decode from the current position
1476
 *  and continue until the end of stream (the read callback returns
1477
 *  \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM), or until the
1478
 *  callbacks return a fatal error.
1479
 *
1480
 *  As the decoder needs more input it will call the read callback.
1481
 *  As each metadata block and frame is decoded, the metadata or write
1482
 *  callback will be called with the decoded metadata or frame.
1483
 *
1484
 * \param  decoder  An initialized decoder instance.
1485
 * \assert
1486
 *    \code decoder != NULL \endcode
1487
 * \retval FLAC__bool
1488
 *    \c false if any fatal read, write, or memory allocation error
1489
 *    occurred (meaning decoding must stop), else \c true; for more
1490
 *    information about the decoder, check the decoder state with
1491
 *    FLAC__stream_decoder_get_state().
1492
 */
1493
FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder);
1494
 
1495
/** Skip one audio frame.
1496
 *  This version instructs the decoder to 'skip' a single frame and stop,
1497
 *  unless the callbacks return a fatal error or the read callback returns
1498
 *  \c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
1499
 *
1500
 *  The decoding flow is the same as what occurs when
1501
 *  FLAC__stream_decoder_process_single() is called to process an audio
1502
 *  frame, except that this function does not decode the parsed data into
1503
 *  PCM or call the write callback.  The integrity of the frame is still
1504
 *  checked the same way as in the other process functions.
1505
 *
1506
 *  This function will return once one whole frame is skipped, in the
1507
 *  same way that FLAC__stream_decoder_process_single() will return once
1508
 *  one whole frame is decoded.
1509
 *
1510
 *  This function can be used in more quickly determining FLAC frame
1511
 *  boundaries when decoding of the actual data is not needed, for
1512
 *  example when an application is separating a FLAC stream into frames
1513
 *  for editing or storing in a container.  To do this, the application
1514
 *  can use FLAC__stream_decoder_skip_single_frame() to quickly advance
1515
 *  to the next frame, then use
1516
 *  FLAC__stream_decoder_get_decode_position() to find the new frame
1517
 *  boundary.
1518
 *
1519
 *  This function should only be called when the stream has advanced
1520
 *  past all the metadata, otherwise it will return \c false.
1521
 *
1522
 * \param  decoder  An initialized decoder instance not in a metadata
1523
 *                  state.
1524
 * \assert
1525
 *    \code decoder != NULL \endcode
1526
 * \retval FLAC__bool
1527
 *    \c false if any fatal read, write, or memory allocation error
1528
 *    occurred (meaning decoding must stop), or if the decoder
1529
 *    is in the FLAC__STREAM_DECODER_SEARCH_FOR_METADATA or
1530
 *    FLAC__STREAM_DECODER_READ_METADATA state, else \c true; for more
1531
 *    information about the decoder, check the decoder state with
1532
 *    FLAC__stream_decoder_get_state().
1533
 */
1534
FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder);
1535
 
1536
/** Flush the input and seek to an absolute sample.
1537
 *  Decoding will resume at the given sample.  Note that because of
1538
 *  this, the next write callback may contain a partial block.  The
1539
 *  client must support seeking the input or this function will fail
1540
 *  and return \c false.  Furthermore, if the decoder state is
1541
 *  \c FLAC__STREAM_DECODER_SEEK_ERROR, then the decoder must be flushed
1542
 *  with FLAC__stream_decoder_flush() or reset with
1543
 *  FLAC__stream_decoder_reset() before decoding can continue.
1544
 *
1545
 * \param  decoder  A decoder instance.
1546
 * \param  sample   The target sample number to seek to.
1547
 * \assert
1548
 *    \code decoder != NULL \endcode
1549
 * \retval FLAC__bool
1550
 *    \c true if successful, else \c false.
1551
 */
1552
FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample);
1553
 
1554
/* \} */
1555
 
1556
#ifdef __cplusplus
1557
}
1558
#endif
1559
 
1560
#endif