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

Windows CE

开发平台:

C/C++

  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. #ifndef FLAC__STREAM_DECODER_H
  32. #define FLAC__STREAM_DECODER_H
  33. #include "export.h"
  34. #include "format.h"
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38. /** file include/FLAC/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 flac_stream_decoder stream decoder endlink module.
  46.  */
  47. /** defgroup flac_decoder FLAC/ *_decoder.h: decoder interfaces
  48.  *  ingroup flac
  49.  *
  50.  *  brief
  51.  *  This module describes the three decoder layers provided by libFLAC.
  52.  *
  53.  * For decoding FLAC streams, libFLAC provides three layers of access.  The
  54.  * lowest layer is non-seekable stream-level decoding, the next is seekable
  55.  * stream-level decoding, and the highest layer is file-level decoding.  The
  56.  * interfaces are described in the link flac_stream_decoder stream decoder
  57.  * endlink, link flac_seekable_stream_decoder seekable stream decoder
  58.  * endlink, and link flac_file_decoder file decoder endlink modules
  59.  * respectively.  Typically you will choose the highest layer that your input
  60.  * source will support.
  61.  *
  62.  * The stream decoder relies on callbacks for all input and output and has no
  63.  * provisions for seeking.  The seekable stream decoder wraps the stream
  64.  * decoder and exposes functions for seeking.  However, you must provide
  65.  * extra callbacks for seek-related operations on your stream, like seek and
  66.  * tell.  The file decoder wraps the seekable stream decoder and supplies
  67.  * most of the callbacks internally, simplifying the processing of standard
  68.  * files.
  69.  */
  70. /** defgroup flac_stream_decoder FLAC/stream_decoder.h: stream decoder interface
  71.  *  ingroup flac_decoder
  72.  *
  73.  *  brief
  74.  *  This module contains the functions which implement the stream
  75.  *  decoder.
  76.  *
  77.  * The basic usage of this decoder is as follows:
  78.  * - The program creates an instance of a decoder using
  79.  *   FLAC__stream_decoder_new().
  80.  * - The program overrides the default settings and sets callbacks for
  81.  *   reading, writing, error reporting, and metadata reporting using
  82.  *   FLAC__stream_decoder_set_*() functions.
  83.  * - The program initializes the instance to validate the settings and
  84.  *   prepare for decoding using FLAC__stream_decoder_init().
  85.  * - The program calls the FLAC__stream_decoder_process_*() functions
  86.  *   to decode data, which subsequently calls the callbacks.
  87.  * - The program finishes the decoding with FLAC__stream_decoder_finish(),
  88.  *   which flushes the input and output and resets the decoder to the
  89.  *   uninitialized state.
  90.  * - The instance may be used again or deleted with
  91.  *   FLAC__stream_decoder_delete().
  92.  *
  93.  * In more detail, the program will create a new instance by calling
  94.  * FLAC__stream_decoder_new(), then call FLAC__stream_decoder_set_*()
  95.  * functions to set the callbacks and client data, and call
  96.  * FLAC__stream_decoder_init().  The required callbacks are:
  97.  *
  98.  * - Read callback - This function will be called when the decoder needs
  99.  *   more input data.  The address of the buffer to be filled is supplied,
  100.  *   along with the number of bytes the buffer can hold.  The callback may
  101.  *   choose to supply less data and modify the byte count but must be careful
  102.  *   not to overflow the buffer.  The callback then returns a status code
  103.  *   chosen from FLAC__StreamDecoderReadStatus.
  104.  * - Write callback - This function will be called when the decoder has
  105.  *   decoded a single frame of data.  The decoder will pass the frame
  106.  *   metadata as well as an array of pointers (one for each channel)
  107.  *   pointing to the decoded audio.
  108.  * - Metadata callback - This function will be called when the decoder has
  109.  *   decoded a metadata block.  In a valid FLAC file there will always be
  110.  *   one STREAMINFO block, followed by zero or more other metadata
  111.  *   blocks.  These will be supplied by the decoder in the same order as
  112.  *   they appear in the stream and always before the first audio frame
  113.  *   (i.e. write callback).  The metadata block that is passed in must not
  114.  *   be modified, and it doesn't live beyond the callback, so you should
  115.  *   make a copy of it with FLAC__metadata_object_clone() if you will need
  116.  *   it elsewhere.  Since metadata blocks can potentially be large, by
  117.  *   default the decoder only calls the metadata callback for the STREAMINFO
  118.  *   block; you can instruct the decoder to pass or filter other blocks with
  119.  *   FLAC__stream_decoder_set_metadata_*() calls.
  120.  * - Error callback - This function will be called whenever an error occurs
  121.  *   during decoding.
  122.  *
  123.  * Once the decoder is initialized, your program will call one of several
  124.  * functions to start the decoding process:
  125.  *
  126.  * - FLAC__stream_decoder_process_single() - Tells the decoder to process at
  127.  *   most one metadata block or audio frame and return, calling either the
  128.  *   metadata callback or write callback, respectively, once.  If the decoder
  129.  *   loses sync it will return with only the error callback being called.
  130.  * - FLAC__stream_decoder_process_until_end_of_metadata() - Tells the decoder
  131.  *   to process the stream from the current location and stop upon reaching
  132.  *   the first audio frame.  The user will get one metadata, write, or error
  133.  *   callback per metadata block, audio frame, or sync error, respectively.
  134.  * - FLAC__stream_decoder_process_until_end_of_stream() - Tells the decoder
  135.  *   to process the stream from the current location until the read callback
  136.  *   returns FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM or
  137.  *   FLAC__STREAM_DECODER_READ_STATUS_ABORT.  The user will get one metadata,
  138.  *   write, or error callback per metadata block, audio frame, or sync error,
  139.  *   respectively.
  140.  *
  141.  * When the decoder has finished decoding (normally or through an abort),
  142.  * the instance is finished by calling FLAC__stream_decoder_finish(), which
  143.  * ensures the decoder is in the correct state and frees memory.  Then the
  144.  * instance may be deleted with FLAC__stream_decoder_delete() or initialized
  145.  * again to decode another stream.
  146.  *
  147.  * Note that the stream decoder has no real concept of stream position, it
  148.  * just converts data.  To seek within a stream the callbacks have only to
  149.  * flush the decoder using FLAC__stream_decoder_flush() and start feeding
  150.  * data from the new position through the read callback.  The seekable
  151.  * stream decoder does just this.
  152.  *
  153.  * The FLAC__stream_decoder_set_metadata_*() functions deserve special
  154.  * attention.  By default, the decoder only calls the metadata_callback for
  155.  * the STREAMINFO block.  These functions allow you to tell the decoder
  156.  * explicitly which blocks to parse and return via the metadata_callback
  157.  * and/or which to skip.  Use a FLAC__stream_decoder_set_metadata_respond_all(),
  158.  * FLAC__stream_decoder_set_metadata_ignore() ... or FLAC__stream_decoder_set_metadata_ignore_all(),
  159.  * FLAC__stream_decoder_set_metadata_respond() ... sequence to exactly specify which
  160.  * blocks to return.  Remember that some metadata blocks can be big so
  161.  * filtering out the ones you don't use can reduce the memory requirements
  162.  * of the decoder.  Also note the special forms
  163.  * FLAC__stream_decoder_set_metadata_respond_application(id) and
  164.  * FLAC__stream_decoder_set_metadata_ignore_application(id) for filtering APPLICATION
  165.  * blocks based on the application ID.
  166.  *
  167.  * STREAMINFO and SEEKTABLE blocks are always parsed and used internally, but
  168.  * they still can legally be filtered from the metadata_callback.
  169.  *
  170.  * note
  171.  * The "set" functions may only be called when the decoder is in the
  172.  * state FLAC__STREAM_DECODER_UNINITIALIZED, i.e. after
  173.  * FLAC__stream_decoder_new() or FLAC__stream_decoder_finish(), but
  174.  * before FLAC__stream_decoder_init().  If this is the case they will
  175.  * return c true, otherwise c false.
  176.  *
  177.  * note
  178.  * FLAC__stream_decoder_finish() resets all settings to the constructor
  179.  * defaults, including the callbacks.
  180.  *
  181.  * {
  182.  */
  183. /** State values for a FLAC__StreamDecoder
  184.  *
  185.  *  The decoder's state can be obtained by calling FLAC__stream_decoder_get_state().
  186.  */
  187. typedef enum {
  188. FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0,
  189. /**< The decoder is ready to search for metadata. */
  190. FLAC__STREAM_DECODER_READ_METADATA,
  191. /**< The decoder is ready to or is in the process of reading metadata. */
  192. FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC,
  193. /**< The decoder is ready to or is in the process of searching for the frame sync code. */
  194. FLAC__STREAM_DECODER_READ_FRAME,
  195. /**< The decoder is ready to or is in the process of reading a frame. */
  196. FLAC__STREAM_DECODER_END_OF_STREAM,
  197. /**< The decoder has reached the end of the stream. */
  198. FLAC__STREAM_DECODER_ABORTED,
  199. /**< The decoder was aborted by the read callback. */
  200. FLAC__STREAM_DECODER_UNPARSEABLE_STREAM,
  201. /**< The decoder encountered reserved fields in use in the stream. */
  202. FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
  203. /**< An error occurred allocating memory. */
  204. FLAC__STREAM_DECODER_ALREADY_INITIALIZED,
  205. /**< FLAC__stream_decoder_init() was called when the decoder was
  206.  * already initialized, usually because
  207.  * FLAC__stream_decoder_finish() was not called.
  208.  */
  209. FLAC__STREAM_DECODER_INVALID_CALLBACK,
  210. /**< FLAC__stream_decoder_init() was called without all callbacks being set. */
  211. FLAC__STREAM_DECODER_UNINITIALIZED
  212. /**< The decoder is in the uninitialized state. */
  213. } FLAC__StreamDecoderState;
  214. /** Maps a FLAC__StreamDecoderState to a C string.
  215.  *
  216.  *  Using a FLAC__StreamDecoderState as the index to this array
  217.  *  will give the string equivalent.  The contents should not be modified.
  218.  */
  219. extern FLAC_API const char * const FLAC__StreamDecoderStateString[];
  220. /** Return values for the FLAC__StreamDecoder read callback.
  221.  */
  222. typedef enum {
  223. FLAC__STREAM_DECODER_READ_STATUS_CONTINUE,
  224. /**< The read was OK and decoding can continue. */
  225. FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM,
  226. /**< The read was attempted at the end of the stream. */
  227. FLAC__STREAM_DECODER_READ_STATUS_ABORT
  228. /**< An unrecoverable error occurred.  The decoder will return from the process call. */
  229. } FLAC__StreamDecoderReadStatus;
  230. /** Maps a FLAC__StreamDecoderReadStatus to a C string.
  231.  *
  232.  *  Using a FLAC__StreamDecoderReadStatus as the index to this array
  233.  *  will give the string equivalent.  The contents should not be modified.
  234.  */
  235. extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[];
  236. /** Return values for the FLAC__StreamDecoder write callback.
  237.  */
  238. typedef enum {
  239. FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE,
  240. /**< The write was OK and decoding can continue. */
  241. FLAC__STREAM_DECODER_WRITE_STATUS_ABORT
  242. /**< An unrecoverable error occurred.  The decoder will return from the process call. */
  243. } FLAC__StreamDecoderWriteStatus;
  244. /** Maps a FLAC__StreamDecoderWriteStatus to a C string.
  245.  *
  246.  *  Using a FLAC__StreamDecoderWriteStatus as the index to this array
  247.  *  will give the string equivalent.  The contents should not be modified.
  248.  */
  249. extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[];
  250. /** Possible values passed in to the FLAC__StreamDecoder error callback.
  251.  */
  252. typedef enum {
  253. FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC,
  254. /**< An error in the stream caused the decoder to lose synchronization. */
  255. FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER,
  256. /**< The decoder encountered a corrupted frame header. */
  257. FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH
  258. /**< The frame's data did not match the CRC in the footer. */
  259. } FLAC__StreamDecoderErrorStatus;
  260. /** Maps a FLAC__StreamDecoderErrorStatus to a C string.
  261.  *
  262.  *  Using a FLAC__StreamDecoderErrorStatus as the index to this array
  263.  *  will give the string equivalent.  The contents should not be modified.
  264.  */
  265. extern FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[];
  266. /***********************************************************************
  267.  *
  268.  * class FLAC__StreamDecoder
  269.  *
  270.  ***********************************************************************/
  271. struct FLAC__StreamDecoderProtected;
  272. struct FLAC__StreamDecoderPrivate;
  273. /** The opaque structure definition for the stream decoder type.
  274.  *  See the link flac_stream_decoder stream decoder module endlink
  275.  *  for a detailed description.
  276.  */
  277. typedef struct {
  278. struct FLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
  279. struct FLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
  280. } FLAC__StreamDecoder;
  281. /** Signature for the read callback.
  282.  *  See FLAC__stream_decoder_set_read_callback() for more info.
  283.  *
  284.  * param  decoder  The decoder instance calling the callback.
  285.  * param  buffer   A pointer to a location for the callee to store
  286.  *                  data to be decoded.
  287.  * param  bytes    A pointer to the size of the buffer.  On entry
  288.  *                  to the callback, it contains the maximum number
  289.  *                  of bytes that may be stored in a buffer.  The
  290.  *                  callee must set it to the actual number of bytes
  291.  *                  stored (0 in case of error or end-of-stream) before
  292.  *                  returning.
  293.  * param  client_data  The callee's client data set through
  294.  *                      FLAC__stream_decoder_set_client_data().
  295.  * retval FLAC__StreamDecoderReadStatus
  296.  *    The callee's return status.
  297.  */
  298. typedef FLAC__StreamDecoderReadStatus (*FLAC__StreamDecoderReadCallback)(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], unsigned *bytes, void *client_data);
  299. /** Signature for the write callback.
  300.  *  See FLAC__stream_decoder_set_write_callback() for more info.
  301.  *
  302.  * param  decoder  The decoder instance calling the callback.
  303.  * param  frame    The description of the decoded frame.  See
  304.  *                  FLAC__Frame.
  305.  * param  buffer   An array of pointers to decoded channels of data.
  306.  *                  Each pointer will point to an array of signed
  307.  *                  samples of length a frame->header.blocksize.
  308.  *                  Currently, the channel order has no meaning
  309.  *                  except for stereo streams; in this case channel
  310.  *                  0 is left and 1 is right.
  311.  * param  client_data  The callee's client data set through
  312.  *                      FLAC__stream_decoder_set_client_data().
  313.  * retval FLAC__StreamDecoderWriteStatus
  314.  *    The callee's return status.
  315.  */
  316. typedef FLAC__StreamDecoderWriteStatus (*FLAC__StreamDecoderWriteCallback)(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
  317. /** Signature for the metadata callback.
  318.  *  See FLAC__stream_decoder_set_metadata_callback() for more info.
  319.  *
  320.  * param  decoder  The decoder instance calling the callback.
  321.  * param  metadata The decoded metadata block.
  322.  * param  client_data  The callee's client data set through
  323.  *                      FLAC__stream_decoder_set_client_data().
  324.  */
  325. typedef void (*FLAC__StreamDecoderMetadataCallback)(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
  326. /** Signature for the error callback.
  327.  *  See FLAC__stream_decoder_set_error_callback() for more info.
  328.  *
  329.  * param  decoder  The decoder instance calling the callback.
  330.  * param  status   The error encountered by the decoder.
  331.  * param  client_data  The callee's client data set through
  332.  *                      FLAC__stream_decoder_set_client_data().
  333.  */
  334. typedef void (*FLAC__StreamDecoderErrorCallback)(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
  335. /***********************************************************************
  336.  *
  337.  * Class constructor/destructor
  338.  *
  339.  ***********************************************************************/
  340. /** Create a new stream decoder instance.  The instance is created with
  341.  *  default settings; see the individual FLAC__stream_decoder_set_*()
  342.  *  functions for each setting's default.
  343.  *
  344.  * retval FLAC__StreamDecoder*
  345.  *    c NULL if there was an error allocating memory, else the new instance.
  346.  */
  347. FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new();
  348. /** Free a decoder instance.  Deletes the object pointed to by a decoder.
  349.  *
  350.  * param decoder  A pointer to an existing decoder.
  351.  * assert
  352.  *    code decoder != NULL endcode
  353.  */
  354. FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder);
  355. /***********************************************************************
  356.  *
  357.  * Public class method prototypes
  358.  *
  359.  ***********************************************************************/
  360. /** Set the read callback.
  361.  *  The supplied function will be called when the decoder needs more input
  362.  *  data.  The address of the buffer to be filled is supplied, along with
  363.  *  the number of bytes the buffer can hold.  The callback may choose to
  364.  *  supply less data and modify the byte count but must be careful not to
  365.  *  overflow the buffer.  The callback then returns a status code chosen
  366.  *  from FLAC__StreamDecoderReadStatus.
  367.  *
  368.  * note
  369.  * The callback is mandatory and must be set before initialization.
  370.  *
  371.  * default c NULL
  372.  * param  decoder  A decoder instance to set.
  373.  * param  value    See above.
  374.  * assert
  375.  *    code decoder != NULL endcode
  376.  *    code value != NULL endcode
  377.  * retval FLAC__bool
  378.  *    c false if the decoder is already initialized, else c true.
  379.  */
  380. FLAC_API FLAC__bool FLAC__stream_decoder_set_read_callback(FLAC__StreamDecoder *decoder, FLAC__StreamDecoderReadCallback value);
  381. /** Set the write callback.
  382.  *  The supplied function will be called when the decoder has decoded a
  383.  *  single frame of data.  The decoder will pass the frame metadata as
  384.  *  well as an array of pointers (one for each channel) pointing to the
  385.  *  decoded audio.
  386.  *
  387.  * note
  388.  * The callback is mandatory and must be set before initialization.
  389.  *
  390.  * default c NULL
  391.  * param  decoder  A decoder instance to set.
  392.  * param  value    See above.
  393.  * assert
  394.  *    code decoder != NULL endcode
  395.  *    code value != NULL endcode
  396.  * retval FLAC__bool
  397.  *    c false if the decoder is already initialized, else c true.
  398.  */
  399. FLAC_API FLAC__bool FLAC__stream_decoder_set_write_callback(FLAC__StreamDecoder *decoder, FLAC__StreamDecoderWriteCallback value);
  400. /** Set the metadata callback.
  401.  *  The supplied function will be called when the decoder has decoded a metadata
  402.  *  block.  In a valid FLAC file there will always be one STREAMINFO block,
  403.  *  followed by zero or more other metadata blocks.  These will be supplied
  404.  *  by the decoder in the same order as they appear in the stream and always
  405.  *  before the first audio frame (i.e. write callback).  The metadata block
  406.  *  that is passed in must not be modified, and it doesn't live beyond the
  407.  *  callback, so you should make a copy of it with
  408.  *  FLAC__metadata_object_clone() if you will need it elsewhere.  Since
  409.  *  metadata blocks can potentially be large, by default the decoder only
  410.  *  calls the metadata callback for the STREAMINFO block; you can instruct
  411.  *  the decoder to pass or filter other blocks with
  412.  *  FLAC__stream_decoder_set_metadata_*() calls.
  413.  *
  414.  * note
  415.  * The callback is mandatory and must be set before initialization.
  416.  *
  417.  * default c NULL
  418.  * param  decoder  A decoder instance to set.
  419.  * param  value    See above.
  420.  * assert
  421.  *    code decoder != NULL endcode
  422.  *    code value != NULL endcode
  423.  * retval FLAC__bool
  424.  *    c false if the decoder is already initialized, else c true.
  425.  */
  426. FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_callback(FLAC__StreamDecoder *decoder, FLAC__StreamDecoderMetadataCallback value);
  427. /** Set the error callback.
  428.  *  The supplied function will be called whenever an error occurs during
  429.  *  decoding.
  430.  *
  431.  * note
  432.  * The callback is mandatory and must be set before initialization.
  433.  *
  434.  * default c NULL
  435.  * param  decoder  A decoder instance to set.
  436.  * param  value    See above.
  437.  * assert
  438.  *    code decoder != NULL endcode
  439.  *    code value != NULL endcode
  440.  * retval FLAC__bool
  441.  *    c false if the decoder is already initialized, else c true.
  442.  */
  443. FLAC_API FLAC__bool FLAC__stream_decoder_set_error_callback(FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorCallback value);
  444. /** Set the client data to be passed back to callbacks.
  445.  *  This value will be supplied to callbacks in their a client_data
  446.  *  argument.
  447.  *
  448.  * default c NULL
  449.  * param  decoder  A decoder instance to set.
  450.  * param  value    See above.
  451.  * assert
  452.  *    code decoder != NULL endcode
  453.  * retval FLAC__bool
  454.  *    c false if the decoder is already initialized, else c true.
  455.  */
  456. FLAC_API FLAC__bool FLAC__stream_decoder_set_client_data(FLAC__StreamDecoder *decoder, void *value);
  457. /** Direct the decoder to pass on all metadata blocks of type a type.
  458.  *
  459.  * default By default, only the c STREAMINFO block is returned via the
  460.  *          metadata callback.
  461.  * param  decoder  A decoder instance to set.
  462.  * param  type     See above.
  463.  * assert
  464.  *    code decoder != NULL endcode
  465.  *    a type is valid
  466.  * retval FLAC__bool
  467.  *    c false if the decoder is already initialized, else c true.
  468.  */
  469. FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
  470. /** Direct the decoder to pass on all APPLICATION metadata blocks of the
  471.  *  given a id.
  472.  *
  473.  * default By default, only the c STREAMINFO block is returned via the
  474.  *          metadata callback.
  475.  * param  decoder  A decoder instance to set.
  476.  * param  id       See above.
  477.  * assert
  478.  *    code decoder != NULL endcode
  479.  *    code id != NULL endcode
  480.  * retval FLAC__bool
  481.  *    c false if the decoder is already initialized, else c true.
  482.  */
  483. FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
  484. /** Direct the decoder to pass on all metadata blocks of any type.
  485.  *
  486.  * default By default, only the c STREAMINFO block is returned via the
  487.  *          metadata callback.
  488.  * param  decoder  A decoder instance to set.
  489.  * assert
  490.  *    code decoder != NULL endcode
  491.  * retval FLAC__bool
  492.  *    c false if the decoder is already initialized, else c true.
  493.  */
  494. FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder);
  495. /** Direct the decoder to filter out all metadata blocks of type a type.
  496.  *
  497.  * default By default, only the c STREAMINFO block is returned via the
  498.  *          metadata callback.
  499.  * param  decoder  A decoder instance to set.
  500.  * param  type     See above.
  501.  * assert
  502.  *    code decoder != NULL endcode
  503.  *    a type is valid
  504.  * retval FLAC__bool
  505.  *    c false if the decoder is already initialized, else c true.
  506.  */
  507. FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
  508. /** Direct the decoder to filter out all APPLICATION metadata blocks of
  509.  *  the given a id.
  510.  *
  511.  * default By default, only the c STREAMINFO block is returned via the
  512.  *          metadata callback.
  513.  * param  decoder  A decoder instance to set.
  514.  * param  id       See above.
  515.  * assert
  516.  *    code decoder != NULL endcode
  517.  *    code id != NULL endcode
  518.  * retval FLAC__bool
  519.  *    c false if the decoder is already initialized, else c true.
  520.  */
  521. FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
  522. /** Direct the decoder to filter out all metadata blocks of any type.
  523.  *
  524.  * default By default, only the c STREAMINFO block is returned via the
  525.  *          metadata callback.
  526.  * param  decoder  A decoder instance to set.
  527.  * assert
  528.  *    code decoder != NULL endcode
  529.  * retval FLAC__bool
  530.  *    c false if the decoder is already initialized, else c true.
  531.  */
  532. FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder);
  533. /** Get the current decoder state.
  534.  *
  535.  * param  decoder  A decoder instance to query.
  536.  * assert
  537.  *    code decoder != NULL endcode
  538.  * retval FLAC__StreamDecoderState
  539.  *    The current decoder state.
  540.  */
  541. FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder);
  542. /** Get the current decoder state as a C string.
  543.  *
  544.  * param  decoder  A decoder instance to query.
  545.  * assert
  546.  *    code decoder != NULL endcode
  547.  * retval const char *
  548.  *    The decoder state as a C string.  Do not modify the contents.
  549.  */
  550. FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder);
  551. /** Get the current number of channels in the stream being decoded.
  552.  *  Will only be valid after decoding has started and will contain the
  553.  *  value from the most recently decoded frame header.
  554.  *
  555.  * param  decoder  A decoder instance to query.
  556.  * assert
  557.  *    code decoder != NULL endcode
  558.  * retval unsigned
  559.  *    See above.
  560.  */
  561. FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder);
  562. /** Get the current channel assignment in the stream being decoded.
  563.  *  Will only be valid after decoding has started and will contain the
  564.  *  value from the most recently decoded frame header.
  565.  *
  566.  * param  decoder  A decoder instance to query.
  567.  * assert
  568.  *    code decoder != NULL endcode
  569.  * retval FLAC__ChannelAssignment
  570.  *    See above.
  571.  */
  572. FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder);
  573. /** Get the current sample resolution in the stream being decoded.
  574.  *  Will only be valid after decoding has started and will contain the
  575.  *  value from the most recently decoded frame header.
  576.  *
  577.  * param  decoder  A decoder instance to query.
  578.  * assert
  579.  *    code decoder != NULL endcode
  580.  * retval unsigned
  581.  *    See above.
  582.  */
  583. FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder);
  584. /** Get the current sample rate in Hz of the stream being decoded.
  585.  *  Will only be valid after decoding has started and will contain the
  586.  *  value from the most recently decoded frame header.
  587.  *
  588.  * param  decoder  A decoder instance to query.
  589.  * assert
  590.  *    code decoder != NULL endcode
  591.  * retval unsigned
  592.  *    See above.
  593.  */
  594. FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder);
  595. /** Get the current blocksize of the stream being decoded.
  596.  *  Will only be valid after decoding has started and will contain the
  597.  *  value from the most recently decoded frame header.
  598.  *
  599.  * param  decoder  A decoder instance to query.
  600.  * assert
  601.  *    code decoder != NULL endcode
  602.  * retval unsigned
  603.  *    See above.
  604.  */
  605. FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder);
  606. /** Initialize the decoder instance.
  607.  *  Should be called after FLAC__stream_decoder_new() and
  608.  *  FLAC__stream_decoder_set_*() but before any of the
  609.  *  FLAC__stream_decoder_process_*() functions.  Will set and return the
  610.  *  decoder state, which will be FLAC__STREAM_DECODER_SEARCH_FOR_METADATA
  611.  *  if initialization succeeded.
  612.  *
  613.  * param  decoder  An uninitialized decoder instance.
  614.  * assert
  615.  *    code decoder != NULL endcode
  616.  * retval FLAC__StreamDecoderState
  617.  *    c FLAC__STREAM_DECODER_SEARCH_FOR_METADATA if initialization was
  618.  *    successful; see FLAC__StreamDecoderState for the meanings of other
  619.  *    return values.
  620.  */
  621. FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_init(FLAC__StreamDecoder *decoder);
  622. /** Finish the decoding process.
  623.  *  Flushes the decoding buffer, releases resources, resets the decoder
  624.  *  settings to their defaults, and returns the decoder state to
  625.  *  FLAC__STREAM_DECODER_UNINITIALIZED.
  626.  *
  627.  *  In the event of a prematurely-terminated decode, it is not strictly
  628.  *  necessary to call this immediately before FLAC__stream_decoder_delete()
  629.  *  but it is good practice to match every FLAC__stream_decoder_init()
  630.  *  with a FLAC__stream_decoder_finish().
  631.  *
  632.  * param  decoder  An uninitialized decoder instance.
  633.  * assert
  634.  *    code decoder != NULL endcode
  635.  */
  636. FLAC_API void FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder);
  637. /** Flush the stream input.
  638.  *  The decoder's input buffer will be cleared and the state set to
  639.  *  c FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC.
  640.  *
  641.  * param  decoder  A decoder instance.
  642.  * assert
  643.  *    code decoder != NULL endcode
  644.  * retval FLAC__bool
  645.  *    c true if successful, else c false if a memory allocation
  646.  *    error occurs.
  647.  */
  648. FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder);
  649. /** Reset the decoding process.
  650.  *  The decoder's input buffer will be cleared and the state set to
  651.  *  c FLAC__STREAM_DECODER_SEARCH_FOR_METADATA.  This is similar to
  652.  *  FLAC__stream_decoder_finish() except that the settings are
  653.  *  preserved; there is no need to call FLAC__stream_decoder_init()
  654.  *  before decoding again.
  655.  *
  656.  * param  decoder  A decoder instance.
  657.  * assert
  658.  *    code decoder != NULL endcode
  659.  * retval FLAC__bool
  660.  *    c true if successful, else c false if a memory allocation
  661.  *    error occurs.
  662.  */
  663. FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder);
  664. /** Decode one metadata block or audio frame.
  665.  *  This version instructs the decoder to decode a either a single metadata
  666.  *  block or a single frame and stop, unless the callbacks return a fatal
  667.  *  error or the read callback returns
  668.  *  c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
  669.  *
  670.  *  As the decoder needs more input it will call the read callback.
  671.  *  Depending on what was decoded, the metadata or write callback will be
  672.  *  called with the decoded metadata block or audio frame, unless an error
  673.  *  occurred.  If the decoder loses sync it will call the error callback
  674.  *  instead.
  675.  *
  676.  *  Unless there is a fatal read error or end of stream, this function
  677.  *  will return once one whole frame is decoded.  In other words, if the
  678.  *  stream is not synchronized or points to a corrupt frame header, the
  679.  *  decoder will continue to try and resync until it gets to a valid
  680.  *  frame, then decode one frame, then return.  If the decoder points to
  681.  *  frame whose frame CRC in the frame footer does not match the
  682.  *  computed frame CRC, this function will issue a
  683.  *  FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH error to the
  684.  *  error callback, and return, having decoded one complete, although
  685.  *  corrupt, frame.  (Such corrupted frames are sent as silence of the
  686.  *  correct length to the write callback.)
  687.  *
  688.  * param  decoder  An initialized decoder instance.
  689.  * assert
  690.  *    code decoder != NULL endcode
  691.  * retval FLAC__bool
  692.  *    c false if any read or write error occurred (except
  693.  *    c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else c true;
  694.  *    in any case, check the decoder state with
  695.  *    FLAC__stream_decoder_get_state() to see what went wrong or to
  696.  *    check for lost synchronization (a sign of stream corruption).
  697.  */
  698. FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder);
  699. /** Decode until the end of the metadata.
  700.  *  This version instructs the decoder to decode from the current position
  701.  *  and continue until all the metadata has been read, or until the
  702.  *  callbacks return a fatal error or the read callback returns
  703.  *  c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
  704.  *
  705.  *  As the decoder needs more input it will call the read callback.
  706.  *  As each metadata block is decoded, the metadata callback will be called
  707.  *  with the decoded metadata.  If the decoder loses sync it will call the
  708.  *  error callback.
  709.  *
  710.  * param  decoder  An initialized decoder instance.
  711.  * assert
  712.  *    code decoder != NULL endcode
  713.  * retval FLAC__bool
  714.  *    c false if any read or write error occurred (except
  715.  *    c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else c true;
  716.  *    in any case, check the decoder state with
  717.  *    FLAC__stream_decoder_get_state() to see what went wrong or to
  718.  *    check for lost synchronization (a sign of stream corruption).
  719.  */
  720. FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder);
  721. /** Decode until the end of the stream.
  722.  *  This version instructs the decoder to decode from the current position
  723.  *  and continue until the end of stream (the read callback returns
  724.  *  c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM), or until the
  725.  *  callbacks return a fatal error.
  726.  *
  727.  *  As the decoder needs more input it will call the read callback.
  728.  *  As each metadata block and frame is decoded, the metadata or write
  729.  *  callback will be called with the decoded metadata or frame.  If the
  730.  *  decoder loses sync it will call the error callback.
  731.  *
  732.  * param  decoder  An initialized decoder instance.
  733.  * assert
  734.  *    code decoder != NULL endcode
  735.  * retval FLAC__bool
  736.  *    c false if any read or write error occurred (except
  737.  *    c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), else c true;
  738.  *    in any case, check the decoder state with
  739.  *    FLAC__stream_decoder_get_state() to see what went wrong or to
  740.  *    check for lost synchronization (a sign of stream corruption).
  741.  */
  742. FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder);
  743. /** Skip one audio frame.
  744.  *  This version instructs the decoder to 'skip' a single frame and stop,
  745.  *  unless the callbacks return a fatal error or the read callback returns
  746.  *  c FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM.
  747.  *
  748.  *  The decoding flow is the same as what occurs when
  749.  *  FLAC__stream_decoder_process_single() is called to process an audio
  750.  *  frame, except that this function does not decode the parsed data into
  751.  *  PCM or call the write callback.  The integrity of the frame is still
  752.  *  checked the same way as in the other process functions.
  753.  *
  754.  *  This function will return once one whole frame is skipped, in the
  755.  *  same way that FLAC__stream_decoder_process_single() will return once
  756.  *  one whole frame is decoded.
  757.  *
  758.  *  This function, when used from the higher FLAC__SeekableStreamDecoder
  759.  *  layer, can be used in more quickly determining FLAC frame boundaries
  760.  *  when decoding of the actual data is not needed, for example when an
  761.  *  application is separating a FLAC stream into frames for editing or
  762.  *  storing in a container.  To do this, the application can use
  763.  *  FLAC__seekable_stream_decoder_skip_single_frame() to quickly advance
  764.  *  to the next frame, then use
  765.  *  FLAC__seekable_stream_decoder_get_decode_position() to find the new
  766.  *  frame boundary.
  767.  *
  768.  *  This function should only be called when the stream has advanced
  769.  *  past all the metadata, otherwise it will return c false.
  770.  *
  771.  * param  decoder  An initialized decoder instance not in a metadata
  772.  *                  state.
  773.  * assert
  774.  *    code decoder != NULL endcode
  775.  * retval FLAC__bool
  776.  *    c false if any read or write error occurred (except
  777.  *    c FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC), or if the decoder
  778.  *    is in the FLAC__STREAM_DECODER_SEARCH_FOR_METADATA or
  779.  *    FLAC__STREAM_DECODER_READ_METADATA state, else c true;
  780.  *    in any case, check the decoder state with
  781.  *    FLAC__stream_decoder_get_state() to see what went wrong or to
  782.  *    check for lost synchronization (a sign of stream corruption).
  783.  */
  784. FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder);
  785. /* } */
  786. #ifdef __cplusplus
  787. }
  788. #endif
  789. #endif