vx32

Local 9vx git repository for patches.
git clone git://r-36.net/vx32
Log | Files | Refs

file_decoder.h (24554B)


      1 /* libFLAC - Free Lossless Audio Codec library
      2  * Copyright (C) 2000,2001,2002,2003,2004,2005  Josh Coalson
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * - Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *
     11  * - Redistributions in binary form must reproduce the above copyright
     12  * notice, this list of conditions and the following disclaimer in the
     13  * documentation and/or other materials provided with the distribution.
     14  *
     15  * - Neither the name of the Xiph.org Foundation nor the names of its
     16  * contributors may be used to endorse or promote products derived from
     17  * this software without specific prior written permission.
     18  *
     19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     20  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     21  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     22  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
     23  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     24  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     26  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     27  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     28  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     29  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     30  */
     31 
     32 #ifndef FLAC__FILE_DECODER_H
     33 #define FLAC__FILE_DECODER_H
     34 
     35 #include "export.h"
     36 #include "seekable_stream_decoder.h"
     37 
     38 #ifdef __cplusplus
     39 extern "C" {
     40 #endif
     41 
     42 
     43 /** \file include/FLAC/file_decoder.h
     44  *
     45  *  \brief
     46  *  This module contains the functions which implement the file
     47  *  decoder.
     48  *
     49  *  See the detailed documentation in the
     50  *  \link flac_file_decoder file decoder \endlink module.
     51  */
     52 
     53 /** \defgroup flac_file_decoder FLAC/file_decoder.h: file decoder interface
     54  *  \ingroup flac_decoder
     55  *
     56  *  \brief
     57  *  This module contains the functions which implement the file
     58  *  decoder.
     59  *
     60  * The basic usage of this decoder is as follows:
     61  * - The program creates an instance of a decoder using
     62  *   FLAC__file_decoder_new().
     63  * - The program overrides the default settings and sets callbacks for
     64  *   writing, error reporting, and metadata reporting using
     65  *   FLAC__file_decoder_set_*() functions.
     66  * - The program initializes the instance to validate the settings and
     67  *   prepare for decoding using FLAC__file_decoder_init().
     68  * - The program calls the FLAC__file_decoder_process_*() functions
     69  *   to decode data, which subsequently calls the callbacks.
     70  * - The program finishes the decoding with FLAC__file_decoder_finish(),
     71  *   which flushes the input and output and resets the decoder to the
     72  *   uninitialized state.
     73  * - The instance may be used again or deleted with
     74  *   FLAC__file_decoder_delete().
     75  *
     76  * The file decoder is a trivial wrapper around the
     77  * \link flac_seekable_stream_decoder seekable stream decoder \endlink
     78  * meant to simplfy the process of decoding from a standard file.  The
     79  * file decoder supplies all but the Write/Metadata/Error callbacks.
     80  * The user needs only to provide the path to the file and the file
     81  * decoder handles the rest.
     82  *
     83  * Like the seekable stream decoder, seeking is exposed through the
     84  * FLAC__file_decoder_seek_absolute() method.  At any point after the file
     85  * decoder has been initialized, the user can call this function to seek to
     86  * an exact sample within the file.  Subsequently, the first time the write
     87  * callback is called it will be passed a (possibly partial) block starting
     88  * at that sample.
     89  *
     90  * The file decoder also inherits MD5 signature checking from the seekable
     91  * stream decoder.  If this is turned on before initialization,
     92  * FLAC__file_decoder_finish() will report when the decoded MD5 signature
     93  * does not match the one stored in the STREAMINFO block.  MD5 checking is
     94  * automatically turned off if there is no signature in the STREAMINFO
     95  * block or when a seek is attempted.
     96  *
     97  * Make sure to read the detailed descriptions of the
     98  * \link flac_seekable_stream_decoder seekable stream decoder module \endlink
     99  * and \link flac_stream_decoder stream decoder module \endlink
    100  * since the file decoder inherits much of its behavior from them.
    101  *
    102  * \note
    103  * The "set" functions may only be called when the decoder is in the
    104  * state FLAC__FILE_DECODER_UNINITIALIZED, i.e. after
    105  * FLAC__file_decoder_new() or FLAC__file_decoder_finish(), but
    106  * before FLAC__file_decoder_init().  If this is the case they will
    107  * return \c true, otherwise \c false.
    108  *
    109  * \note
    110  * FLAC__file_decoder_finish() resets all settings to the constructor
    111  * defaults, including the callbacks.
    112  *
    113  * \{
    114  */
    115 
    116 
    117 /** State values for a FLAC__FileDecoder
    118  *
    119  *  The decoder's state can be obtained by calling FLAC__file_decoder_get_state().
    120  */
    121 typedef enum {
    122 
    123 	FLAC__FILE_DECODER_OK = 0,
    124 	/**< The decoder is in the normal OK state. */
    125 
    126 	FLAC__FILE_DECODER_END_OF_FILE,
    127 	/**< The decoder has reached the end of the file. */
    128 
    129 	FLAC__FILE_DECODER_ERROR_OPENING_FILE,
    130 	/**< An error occurred opening the input file. */
    131 
    132 	FLAC__FILE_DECODER_MEMORY_ALLOCATION_ERROR,
    133 	/**< An error occurred allocating memory. */
    134 
    135 	FLAC__FILE_DECODER_SEEK_ERROR,
    136 	/**< An error occurred while seeking. */
    137 
    138 	FLAC__FILE_DECODER_SEEKABLE_STREAM_DECODER_ERROR,
    139 	/**< An error occurred in the underlying seekable stream decoder. */
    140 
    141 	FLAC__FILE_DECODER_ALREADY_INITIALIZED,
    142 	/**< FLAC__file_decoder_init() was called when the decoder was already
    143 	 * initialized, usually because FLAC__file_decoder_finish() was not
    144 	 * called.
    145 	 */
    146 
    147 	FLAC__FILE_DECODER_INVALID_CALLBACK,
    148 	/**< FLAC__file_decoder_init() was called without all callbacks
    149 	 * being set.
    150 	 */
    151 
    152 	FLAC__FILE_DECODER_UNINITIALIZED
    153 	/**< The decoder is in the uninitialized state. */
    154 
    155 } FLAC__FileDecoderState;
    156 
    157 /** Maps a FLAC__FileDecoderState to a C string.
    158  *
    159  *  Using a FLAC__FileDecoderState as the index to this array
    160  *  will give the string equivalent.  The contents should not be modified.
    161  */
    162 extern FLAC_API const char * const FLAC__FileDecoderStateString[];
    163 
    164 
    165 /***********************************************************************
    166  *
    167  * class FLAC__FileDecoder : public FLAC__StreamDecoder
    168  *
    169  ***********************************************************************/
    170 
    171 struct FLAC__FileDecoderProtected;
    172 struct FLAC__FileDecoderPrivate;
    173 /** The opaque structure definition for the file decoder type.  See the
    174  *  \link flac_file_decoder file decoder module \endlink for a detailed
    175  *  description.
    176  */
    177 typedef struct {
    178 	struct FLAC__FileDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
    179 	struct FLAC__FileDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
    180 } FLAC__FileDecoder;
    181 
    182 /** Signature for the write callback.
    183  *  See FLAC__file_decoder_set_write_callback()
    184  *  and FLAC__SeekableStreamDecoderWriteCallback for more info.
    185  *
    186  * \param  decoder  The decoder instance calling the callback.
    187  * \param  frame    The description of the decoded frame.
    188  * \param  buffer   An array of pointers to decoded channels of data.
    189  * \param  client_data  The callee's client data set through
    190  *                      FLAC__file_decoder_set_client_data().
    191  * \retval FLAC__StreamDecoderWriteStatus
    192  *    The callee's return status.
    193  */
    194 typedef FLAC__StreamDecoderWriteStatus (*FLAC__FileDecoderWriteCallback)(const FLAC__FileDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
    195 
    196 /** Signature for the metadata callback.
    197  *  See FLAC__file_decoder_set_metadata_callback()
    198  *  and FLAC__SeekableStreamDecoderMetadataCallback for more info.
    199  *
    200  * \param  decoder  The decoder instance calling the callback.
    201  * \param  metadata The decoded metadata block.
    202  * \param  client_data  The callee's client data set through
    203  *                      FLAC__file_decoder_set_client_data().
    204  */
    205 typedef void (*FLAC__FileDecoderMetadataCallback)(const FLAC__FileDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
    206 
    207 /** Signature for the error callback.
    208  *  See FLAC__file_decoder_set_error_callback()
    209  *  and FLAC__SeekableStreamDecoderErrorCallback for more info.
    210  *
    211  * \param  decoder  The decoder instance calling the callback.
    212  * \param  status   The error encountered by the decoder.
    213  * \param  client_data  The callee's client data set through
    214  *                      FLAC__file_decoder_set_client_data().
    215  */
    216 typedef void (*FLAC__FileDecoderErrorCallback)(const FLAC__FileDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
    217 
    218 
    219 /***********************************************************************
    220  *
    221  * Class constructor/destructor
    222  *
    223  ***********************************************************************/
    224 
    225 /** Create a new file decoder instance.  The instance is created with
    226  *  default settings; see the individual FLAC__file_decoder_set_*()
    227  *  functions for each setting's default.
    228  *
    229  * \retval FLAC__FileDecoder*
    230  *    \c NULL if there was an error allocating memory, else the new instance.
    231  */
    232 FLAC_API FLAC__FileDecoder *FLAC__file_decoder_new();
    233 
    234 /** Free a decoder instance.  Deletes the object pointed to by \a decoder.
    235  *
    236  * \param decoder  A pointer to an existing decoder.
    237  * \assert
    238  *    \code decoder != NULL \endcode
    239  */
    240 FLAC_API void FLAC__file_decoder_delete(FLAC__FileDecoder *decoder);
    241 
    242 
    243 /***********************************************************************
    244  *
    245  * Public class method prototypes
    246  *
    247  ***********************************************************************/
    248 
    249 /** Set the "MD5 signature checking" flag.
    250  *  This is inherited from FLAC__SeekableStreamDecoder; see
    251  *  FLAC__seekable_stream_decoder_set_md5_checking().
    252  *
    253  * \default \c false
    254  * \param  decoder  A decoder instance to set.
    255  * \param  value    See above.
    256  * \assert
    257  *    \code decoder != NULL \endcode
    258  * \retval FLAC__bool
    259  *    \c false if the decoder is already initialized, else \c true.
    260  */
    261 FLAC_API FLAC__bool FLAC__file_decoder_set_md5_checking(FLAC__FileDecoder *decoder, FLAC__bool value);
    262 
    263 /** Set the input file name to decode.
    264  *
    265  * \default \c "-"
    266  * \param  decoder  A decoder instance to set.
    267  * \param  value    The input file name, or "-" for \c stdin.
    268  * \assert
    269  *    \code decoder != NULL \endcode
    270  *    \code value != NULL \endcode
    271  * \retval FLAC__bool
    272  *    \c false if the decoder is already initialized, or there was a memory
    273  *    allocation error, else \c true.
    274  */
    275 FLAC_API FLAC__bool FLAC__file_decoder_set_filename(FLAC__FileDecoder *decoder, const char *value);
    276 
    277 /** Set the write callback.
    278  *  This is inherited from FLAC__SeekableStreamDecoder; see
    279  *  FLAC__seekable_stream_decoder_set_write_callback().
    280  *
    281  * \note
    282  * The callback is mandatory and must be set before initialization.
    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  *    \code value != NULL \endcode
    290  * \retval FLAC__bool
    291  *    \c false if the decoder is already initialized, else \c true.
    292  */
    293 FLAC_API FLAC__bool FLAC__file_decoder_set_write_callback(FLAC__FileDecoder *decoder, FLAC__FileDecoderWriteCallback value);
    294 
    295 /** Set the metadata callback.
    296  *  This is inherited from FLAC__SeekableStreamDecoder; see
    297  *  FLAC__seekable_stream_decoder_set_metadata_callback().
    298  *
    299  * \note
    300  * The callback is mandatory and must be set before initialization.
    301  *
    302  * \default \c NULL
    303  * \param  decoder  A decoder instance to set.
    304  * \param  value    See above.
    305  * \assert
    306  *    \code decoder != NULL \endcode
    307  *    \code value != NULL \endcode
    308  * \retval FLAC__bool
    309  *    \c false if the decoder is already initialized, else \c true.
    310  */
    311 FLAC_API FLAC__bool FLAC__file_decoder_set_metadata_callback(FLAC__FileDecoder *decoder, FLAC__FileDecoderMetadataCallback value);
    312 
    313 /** Set the error callback.
    314  *  This is inherited from FLAC__SeekableStreamDecoder; see
    315  *  FLAC__seekable_stream_decoder_set_error_callback().
    316  *
    317  * \note
    318  * The callback is mandatory and must be set before initialization.
    319  *
    320  * \default \c NULL
    321  * \param  decoder  A decoder instance to set.
    322  * \param  value    See above.
    323  * \assert
    324  *    \code decoder != NULL \endcode
    325  *    \code value != NULL \endcode
    326  * \retval FLAC__bool
    327  *    \c false if the decoder is already initialized, else \c true.
    328  */
    329 FLAC_API FLAC__bool FLAC__file_decoder_set_error_callback(FLAC__FileDecoder *decoder, FLAC__FileDecoderErrorCallback value);
    330 
    331 /** Set the client data to be passed back to callbacks.
    332  *  This value will be supplied to callbacks in their \a client_data
    333  *  argument.
    334  *
    335  * \default \c NULL
    336  * \param  decoder  A decoder instance to set.
    337  * \param  value    See above.
    338  * \assert
    339  *    \code decoder != NULL \endcode
    340  * \retval FLAC__bool
    341  *    \c false if the decoder is already initialized, else \c true.
    342  */
    343 FLAC_API FLAC__bool FLAC__file_decoder_set_client_data(FLAC__FileDecoder *decoder, void *value);
    344 
    345 /** This is inherited from FLAC__SeekableStreamDecoder; see
    346  *  FLAC__seekable_stream_decoder_set_metadata_respond().
    347  *
    348  * \default By default, only the \c STREAMINFO block is returned via the
    349  *          metadata callback.
    350  * \param  decoder  A decoder instance to set.
    351  * \param  type     See above.
    352  * \assert
    353  *    \code decoder != NULL \endcode
    354  *    \a type is valid
    355  * \retval FLAC__bool
    356  *    \c false if the decoder is already initialized, else \c true.
    357  */
    358 FLAC_API FLAC__bool FLAC__file_decoder_set_metadata_respond(FLAC__FileDecoder *decoder, FLAC__MetadataType type);
    359 
    360 /** This is inherited from FLAC__SeekableStreamDecoder; see
    361  *  FLAC__seekable_stream_decoder_set_metadata_respond_application().
    362  *
    363  * \default By default, only the \c STREAMINFO block is returned via the
    364  *          metadata callback.
    365  * \param  decoder  A decoder instance to set.
    366  * \param  id       See above.
    367  * \assert
    368  *    \code decoder != NULL \endcode
    369  *    \code id != NULL \endcode
    370  * \retval FLAC__bool
    371  *    \c false if the decoder is already initialized, else \c true.
    372  */
    373 FLAC_API FLAC__bool FLAC__file_decoder_set_metadata_respond_application(FLAC__FileDecoder *decoder, const FLAC__byte id[4]);
    374 
    375 /** This is inherited from FLAC__SeekableStreamDecoder; see
    376  *  FLAC__seekable_stream_decoder_set_metadata_respond_all().
    377  *
    378  * \default By default, only the \c STREAMINFO block is returned via the
    379  *          metadata callback.
    380  * \param  decoder  A decoder instance to set.
    381  * \assert
    382  *    \code decoder != NULL \endcode
    383  * \retval FLAC__bool
    384  *    \c false if the decoder is already initialized, else \c true.
    385  */
    386 FLAC_API FLAC__bool FLAC__file_decoder_set_metadata_respond_all(FLAC__FileDecoder *decoder);
    387 
    388 /** This is inherited from FLAC__SeekableStreamDecoder; see
    389  *  FLAC__seekable_stream_decoder_set_metadata_ignore().
    390  *
    391  * \default By default, only the \c STREAMINFO block is returned via the
    392  *          metadata callback.
    393  * \param  decoder  A decoder instance to set.
    394  * \param  type     See above.
    395  * \assert
    396  *    \code decoder != NULL \endcode
    397  *    \a type is valid
    398  * \retval FLAC__bool
    399  *    \c false if the decoder is already initialized, else \c true.
    400  */
    401 FLAC_API FLAC__bool FLAC__file_decoder_set_metadata_ignore(FLAC__FileDecoder *decoder, FLAC__MetadataType type);
    402 
    403 /** This is inherited from FLAC__SeekableStreamDecoder; see
    404  *  FLAC__seekable_stream_decoder_set_metadata_ignore_application().
    405  *
    406  * \default By default, only the \c STREAMINFO block is returned via the
    407  *          metadata callback.
    408  * \param  decoder  A decoder instance to set.
    409  * \param  id       See above.
    410  * \assert
    411  *    \code decoder != NULL \endcode
    412  *    \code id != NULL \endcode
    413  * \retval FLAC__bool
    414  *    \c false if the decoder is already initialized, else \c true.
    415  */
    416 FLAC_API FLAC__bool FLAC__file_decoder_set_metadata_ignore_application(FLAC__FileDecoder *decoder, const FLAC__byte id[4]);
    417 
    418 /** This is inherited from FLAC__SeekableStreamDecoder; see
    419  *  FLAC__seekable_stream_decoder_set_metadata_ignore_all().
    420  *
    421  * \default By default, only the \c STREAMINFO block is returned via the
    422  *          metadata callback.
    423  * \param  decoder  A decoder instance to set.
    424  * \assert
    425  *    \code decoder != NULL \endcode
    426  * \retval FLAC__bool
    427  *    \c false if the decoder is already initialized, else \c true.
    428  */
    429 FLAC_API FLAC__bool FLAC__file_decoder_set_metadata_ignore_all(FLAC__FileDecoder *decoder);
    430 
    431 /** Get the current decoder state.
    432  *
    433  * \param  decoder  A decoder instance to query.
    434  * \assert
    435  *    \code decoder != NULL \endcode
    436  * \retval FLAC__FileDecoderState
    437  *    The current decoder state.
    438  */
    439 FLAC_API FLAC__FileDecoderState FLAC__file_decoder_get_state(const FLAC__FileDecoder *decoder);
    440 
    441 /** Get the state of the underlying seekable stream decoder.
    442  *  Useful when the file decoder state is
    443  *  \c FLAC__FILE_DECODER_SEEKABLE_STREAM_DECODER_ERROR.
    444  *
    445  * \param  decoder  A decoder instance to query.
    446  * \assert
    447  *    \code decoder != NULL \endcode
    448  * \retval FLAC__SeekableStreamDecoderState
    449  *    The seekable stream decoder state.
    450  */
    451 FLAC_API FLAC__SeekableStreamDecoderState FLAC__file_decoder_get_seekable_stream_decoder_state(const FLAC__FileDecoder *decoder);
    452 
    453 /** Get the state of the underlying stream decoder.
    454  *  Useful when the file decoder state is
    455  *  \c FLAC__FILE_DECODER_SEEKABLE_STREAM_DECODER_ERROR and the seekable stream
    456  *  decoder state is \c FLAC__SEEKABLE_STREAM_DECODER_STREAM_DECODER_ERROR.
    457  *
    458  * \param  decoder  A decoder instance to query.
    459  * \assert
    460  *    \code decoder != NULL \endcode
    461  * \retval FLAC__StreamDecoderState
    462  *    The seekable stream decoder state.
    463  */
    464 FLAC_API FLAC__StreamDecoderState FLAC__file_decoder_get_stream_decoder_state(const FLAC__FileDecoder *decoder);
    465 
    466 /** Get the current decoder state as a C string.
    467  *  This version automatically resolves
    468  *  \c FLAC__FILE_DECODER_SEEKABLE_STREAM_DECODER_ERROR by getting the
    469  *  seekable stream decoder's state.
    470  *
    471  * \param  decoder  A decoder instance to query.
    472  * \assert
    473  *    \code decoder != NULL \endcode
    474  * \retval const char *
    475  *    The decoder state as a C string.  Do not modify the contents.
    476  */
    477 FLAC_API const char *FLAC__file_decoder_get_resolved_state_string(const FLAC__FileDecoder *decoder);
    478 
    479 /** Get the "MD5 signature checking" flag.
    480  *  This is inherited from FLAC__SeekableStreamDecoder; see
    481  *  FLAC__seekable_stream_decoder_get_md5_checking().
    482  *
    483  * \param  decoder  A decoder instance to query.
    484  * \assert
    485  *    \code decoder != NULL \endcode
    486  * \retval FLAC__bool
    487  *    See above.
    488  */
    489 FLAC_API FLAC__bool FLAC__file_decoder_get_md5_checking(const FLAC__FileDecoder *decoder);
    490 
    491 /** This is inherited from FLAC__SeekableStreamDecoder; see
    492  *  FLAC__seekable_stream_decoder_get_channels().
    493  *
    494  * \param  decoder  A decoder instance to query.
    495  * \assert
    496  *    \code decoder != NULL \endcode
    497  * \retval unsigned
    498  *    See above.
    499  */
    500 FLAC_API unsigned FLAC__file_decoder_get_channels(const FLAC__FileDecoder *decoder);
    501 
    502 /** This is inherited from FLAC__SeekableStreamDecoder; see
    503  *  FLAC__seekable_stream_decoder_get_channel_assignment().
    504  *
    505  * \param  decoder  A decoder instance to query.
    506  * \assert
    507  *    \code decoder != NULL \endcode
    508  * \retval FLAC__ChannelAssignment
    509  *    See above.
    510  */
    511 FLAC_API FLAC__ChannelAssignment FLAC__file_decoder_get_channel_assignment(const FLAC__FileDecoder *decoder);
    512 
    513 /** This is inherited from FLAC__SeekableStreamDecoder; see
    514  *  FLAC__seekable_stream_decoder_get_bits_per_sample().
    515  *
    516  * \param  decoder  A decoder instance to query.
    517  * \assert
    518  *    \code decoder != NULL \endcode
    519  * \retval unsigned
    520  *    See above.
    521  */
    522 FLAC_API unsigned FLAC__file_decoder_get_bits_per_sample(const FLAC__FileDecoder *decoder);
    523 
    524 /** This is inherited from FLAC__SeekableStreamDecoder; see
    525  *  FLAC__seekable_stream_decoder_get_sample_rate().
    526  *
    527  * \param  decoder  A decoder instance to query.
    528  * \assert
    529  *    \code decoder != NULL \endcode
    530  * \retval unsigned
    531  *    See above.
    532  */
    533 FLAC_API unsigned FLAC__file_decoder_get_sample_rate(const FLAC__FileDecoder *decoder);
    534 
    535 /** This is inherited from FLAC__SeekableStreamDecoder; see
    536  *  FLAC__seekable_stream_decoder_get_blocksize().
    537  *
    538  * \param  decoder  A decoder instance to query.
    539  * \assert
    540  *    \code decoder != NULL \endcode
    541  * \retval unsigned
    542  *    See above.
    543  */
    544 FLAC_API unsigned FLAC__file_decoder_get_blocksize(const FLAC__FileDecoder *decoder);
    545 
    546 /** This is inherited from FLAC__SeekableStreamDecoder; see
    547  *  FLAC__seekable_stream_decoder_get_decode_position().
    548  *
    549  * \param  decoder   A decoder instance to query.
    550  * \param  position  Address at which to return the desired position.
    551  * \assert
    552  *    \code decoder != NULL \endcode
    553  *    \code position != NULL \endcode
    554  * \retval FLAC__bool
    555  *    \c true if successful, \c false if there was an error from
    556  *    the 'tell' callback.
    557  */
    558 FLAC_API FLAC__bool FLAC__file_decoder_get_decode_position(const FLAC__FileDecoder *decoder, FLAC__uint64 *position);
    559 
    560 /** Initialize the decoder instance.
    561  *  Should be called after FLAC__file_decoder_new() and
    562  *  FLAC__file_decoder_set_*() but before any of the
    563  *  FLAC__file_decoder_process_*() functions.  Will set and return
    564  *  the decoder state, which will be FLAC__FILE_DECODER_OK if
    565  *  initialization succeeded.
    566  *
    567  * \param  decoder  An uninitialized decoder instance.
    568  * \assert
    569  *    \code decoder != NULL \endcode
    570  * \retval FLAC__FileDecoderState
    571  *    \c FLAC__FILE_DECODER_OK if initialization was successful; see
    572  *    FLAC__FileDecoderState for the meanings of other return values.
    573  */
    574 FLAC_API FLAC__FileDecoderState FLAC__file_decoder_init(FLAC__FileDecoder *decoder);
    575 
    576 /** Finish the decoding process.
    577  *  Flushes the decoding buffer, releases resources, resets the decoder
    578  *  settings to their defaults, and returns the decoder state to
    579  *  FLAC__FILE_DECODER_UNINITIALIZED.
    580  *
    581  *  In the event of a prematurely-terminated decode, it is not strictly
    582  *  necessary to call this immediately before FLAC__file_decoder_delete()
    583  *  but it is good practice to match every FLAC__file_decoder_init() with
    584  *  a FLAC__file_decoder_finish().
    585  *
    586  * \param  decoder  An uninitialized decoder instance.
    587  * \assert
    588  *    \code decoder != NULL \endcode
    589  * \retval FLAC__bool
    590  *    \c false if MD5 checking is on AND a STREAMINFO block was available
    591  *    AND the MD5 signature in the STREAMINFO block was non-zero AND the
    592  *    signature does not match the one computed by the decoder; else
    593  *    \c true.
    594  */
    595 FLAC_API FLAC__bool FLAC__file_decoder_finish(FLAC__FileDecoder *decoder);
    596 
    597 /** This is inherited from FLAC__SeekableStreamDecoder; see
    598  *  FLAC__seekable_stream_decoder_process_single().
    599  *
    600  * \param  decoder  A decoder instance.
    601  * \assert
    602  *    \code decoder != NULL \endcode
    603  * \retval FLAC__bool
    604  *    See above.
    605  */
    606 FLAC_API FLAC__bool FLAC__file_decoder_process_single(FLAC__FileDecoder *decoder);
    607 
    608 /** This is inherited from FLAC__SeekableStreamDecoder; see
    609  *  FLAC__seekable_stream_decoder_process_until_end_of_metadata().
    610  *
    611  * \param  decoder  A decoder instance.
    612  * \assert
    613  *    \code decoder != NULL \endcode
    614  * \retval FLAC__bool
    615  *    See above.
    616  */
    617 FLAC_API FLAC__bool FLAC__file_decoder_process_until_end_of_metadata(FLAC__FileDecoder *decoder);
    618 
    619 /** This is inherited from FLAC__SeekableStreamDecoder; see
    620  *  FLAC__seekable_stream_decoder_process_until_end_of_stream().
    621  *
    622  * \param  decoder  A decoder instance.
    623  * \assert
    624  *    \code decoder != NULL \endcode
    625  * \retval FLAC__bool
    626  *    See above.
    627  */
    628 FLAC_API FLAC__bool FLAC__file_decoder_process_until_end_of_file(FLAC__FileDecoder *decoder);
    629 
    630 /** This is inherited from FLAC__SeekableStreamDecoder; see
    631  *  FLAC__seekable_stream_decoder_skip_single_frame().
    632  *
    633  * \param  decoder  A decoder instance.
    634  * \assert
    635  *    \code decoder != NULL \endcode
    636  * \retval FLAC__bool
    637  *    See above.
    638  */
    639 FLAC_API FLAC__bool FLAC__file_decoder_skip_single_frame(FLAC__FileDecoder *decoder);
    640 
    641 /** Flush the input and seek to an absolute sample.
    642  *  This is inherited from FLAC__SeekableStreamDecoder; see
    643  *  FLAC__seekable_stream_decoder_seek_absolute().
    644  *
    645  * \param  decoder  A decoder instance.
    646  * \param  sample   The target sample number to seek to.
    647  * \assert
    648  *    \code decoder != NULL \endcode
    649  * \retval FLAC__bool
    650  *    \c true if successful, else \c false.
    651  */
    652 FLAC_API FLAC__bool FLAC__file_decoder_seek_absolute(FLAC__FileDecoder *decoder, FLAC__uint64 sample);
    653 
    654 /* \} */
    655 
    656 #ifdef __cplusplus
    657 }
    658 #endif
    659 
    660 #endif