stream_decoder.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:24k
源码类别:

Windows CE

开发平台:

C/C++

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