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

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_ENCODER_H
  32. #define OggFLAC__STREAM_ENCODER_H
  33. #include "export.h"
  34. #include "FLAC/stream_encoder.h"
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38. /** file include/OggFLAC/stream_encoder.h
  39.  *
  40.  *  brief
  41.  *  This module contains the functions which implement the stream
  42.  *  encoder.
  43.  *
  44.  *  See the detailed documentation in the
  45.  *  link oggflac_stream_encoder stream encoder endlink module.
  46.  */
  47. /** defgroup oggflac_encoder OggFLAC/ *_encoder.h: encoder interfaces
  48.  *  ingroup oggflac
  49.  *
  50.  *  brief
  51.  *  This module describes the three encoder layers provided by libOggFLAC.
  52.  *
  53.  * libOggFLAC currently provides the same three layers of access as libFLAC;
  54.  * the interfaces are nearly identical, with the addition of a method for
  55.  * specifying the Ogg serial number.  See the link flac_encoder FLAC
  56.  * encoder module endlink for full documentation.
  57.  */
  58. /** defgroup oggflac_stream_encoder OggFLAC/stream_encoder.h: stream encoder interface
  59.  *  ingroup oggflac_encoder
  60.  *
  61.  *  brief
  62.  *  This module contains the functions which implement the stream
  63.  *  encoder.  The Ogg stream encoder is derived
  64.  *  from the FLAC stream encoder.
  65.  *
  66.  * The interface here is nearly identical to FLAC's stream encoder,
  67.  * including the callbacks, with the addition of
  68.  * OggFLAC__stream_encoder_set_serial_number().  See the
  69.  * link flac_stream_encoder FLAC stream encoder module endlink
  70.  * for full documentation.
  71.  *
  72.  * {
  73.  */
  74. /** State values for an OggFLAC__StreamEncoder
  75.  *
  76.  *  The encoder's state can be obtained by calling OggFLAC__stream_encoder_get_state().
  77.  */
  78. typedef enum {
  79. OggFLAC__STREAM_ENCODER_OK = 0,
  80. /**< The encoder is in the normal OK state. */
  81. OggFLAC__STREAM_ENCODER_OGG_ERROR,
  82. /**< An error occurred in the underlying Ogg layer.  */
  83. OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR,
  84. /**< An error occurred in the underlying FLAC stream encoder;
  85.  * check OggFLAC__stream_encoder_get_FLAC_stream_encoder_state().
  86.  */
  87. OggFLAC__STREAM_ENCODER_INVALID_CALLBACK,
  88. /**< The encoder was initialized before setting all the required callbacks. */
  89. OggFLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR,
  90. /**< Memory allocation failed. */
  91. OggFLAC__STREAM_ENCODER_ALREADY_INITIALIZED,
  92. /**< OggFLAC__stream_encoder_init() was called when the encoder was
  93.  * already initialized, usually because
  94.  * OggFLAC__stream_encoder_finish() was not called.
  95.  */
  96. OggFLAC__STREAM_ENCODER_UNINITIALIZED
  97. /**< The encoder is in the uninitialized state. */
  98. } OggFLAC__StreamEncoderState;
  99. /** Maps an OggFLAC__StreamEncoderState to a C string.
  100.  *
  101.  *  Using an OggFLAC__StreamEncoderState as the index to this array
  102.  *  will give the string equivalent.  The contents should not be modified.
  103.  */
  104. extern OggFLAC_API const char * const OggFLAC__StreamEncoderStateString[];
  105. /***********************************************************************
  106.  *
  107.  * class OggFLAC__StreamEncoder
  108.  *
  109.  ***********************************************************************/
  110. struct OggFLAC__StreamEncoderProtected;
  111. struct OggFLAC__StreamEncoderPrivate;
  112. /** The opaque structure definition for the stream encoder type.
  113.  *  See the link oggflac_stream_encoder stream encoder module endlink
  114.  *  for a detailed description.
  115.  */
  116. typedef struct {
  117. struct OggFLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
  118. struct OggFLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
  119. } OggFLAC__StreamEncoder;
  120. /** Signature for the write callback.
  121.  *  See OggFLAC__stream_encoder_set_write_callback()
  122.  *  and FLAC__StreamEncoderWriteCallback for more info.
  123.  *
  124.  * param  encoder  The encoder instance calling the callback.
  125.  * param  buffer   An array of encoded data of length a bytes.
  126.  * param  bytes    The byte length of a buffer.
  127.  * param  samples  The number of samples encoded by a buffer.
  128.  *                  c 0 has a special meaning; see
  129.  *                  OggFLAC__stream_encoder_set_write_callback().
  130.  * param  current_frame  The number of current frame being encoded.
  131.  * param  client_data  The callee's client data set through
  132.  *                      OggFLAC__stream_encoder_set_client_data().
  133.  * retval FLAC__StreamEncoderWriteStatus
  134.  *    The callee's return status.
  135.  */
  136. typedef FLAC__StreamEncoderWriteStatus (*OggFLAC__StreamEncoderWriteCallback)(const OggFLAC__StreamEncoder *encoder, const FLAC__byte buffer[], unsigned bytes, unsigned samples, unsigned current_frame, void *client_data);
  137. /** Signature for the metadata callback.
  138.  *  See OggFLAC__stream_encoder_set_metadata_callback()
  139.  *  and FLAC__stream_encoder_set_metadata_callback() for more info.
  140.  *
  141.  * param  encoder      The encoder instance calling the callback.
  142.  * param  metadata     The final populated STREAMINFO block.
  143.  * param  client_data  The callee's client data set through
  144.  *                      FLAC__stream_encoder_set_client_data().
  145.  */
  146. typedef void (*OggFLAC__StreamEncoderMetadataCallback)(const OggFLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data);
  147. /***********************************************************************
  148.  *
  149.  * Class constructor/destructor
  150.  *
  151.  ***********************************************************************/
  152. /** Create a new stream encoder instance.  The instance is created with
  153.  *  default settings; see the individual OggFLAC__stream_encoder_set_*()
  154.  *  functions for each setting's default.
  155.  *
  156.  * retval OggFLAC__StreamEncoder*
  157.  *    c NULL if there was an error allocating memory, else the new instance.
  158.  */
  159. OggFLAC_API OggFLAC__StreamEncoder *OggFLAC__stream_encoder_new();
  160. /** Free an encoder instance.  Deletes the object pointed to by a encoder.
  161.  *
  162.  * param encoder  A pointer to an existing encoder.
  163.  * assert
  164.  *    code encoder != NULL endcode
  165.  */
  166. OggFLAC_API void OggFLAC__stream_encoder_delete(OggFLAC__StreamEncoder *encoder);
  167. /***********************************************************************
  168.  *
  169.  * Public class method prototypes
  170.  *
  171.  ***********************************************************************/
  172. /** Set the serial number for the FLAC stream.
  173.  *
  174.  * note
  175.  * It is recommended to set a serial number explicitly as the default of '0'
  176.  * may collide with other streams.
  177.  *
  178.  * default c 0
  179.  * param  encoder        An encoder instance to set.
  180.  * param  serial_number  See above.
  181.  * assert
  182.  *    code encoder != NULL endcode
  183.  * retval FLAC__bool
  184.  *    c false if the encoder is already initialized, else c true.
  185.  */
  186. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_serial_number(OggFLAC__StreamEncoder *encoder, long serial_number);
  187. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_verify()
  188.  *
  189.  * default c false
  190.  * param  encoder  An encoder instance to set.
  191.  * param  value    Flag value (see above).
  192.  * assert
  193.  *    code encoder != NULL endcode
  194.  * retval FLAC__bool
  195.  *    c false if the encoder is already initialized, else c true.
  196.  */
  197. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_verify(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
  198. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_streamable_subset()
  199.  *
  200.  * default c true
  201.  * param  encoder  An encoder instance to set.
  202.  * param  value    Flag value (see above).
  203.  * assert
  204.  *    code encoder != NULL endcode
  205.  * retval FLAC__bool
  206.  *    c false if the encoder is already initialized, else c true.
  207.  */
  208. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_streamable_subset(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
  209. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_do_mid_side_stereo()
  210.  *
  211.  * default c false
  212.  * param  encoder  An encoder instance to set.
  213.  * param  value    Flag value (see above).
  214.  * assert
  215.  *    code encoder != NULL endcode
  216.  * retval FLAC__bool
  217.  *    c false if the encoder is already initialized, else c true.
  218.  */
  219. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_do_mid_side_stereo(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
  220. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_loose_mid_side_stereo()
  221.  *
  222.  * default c false
  223.  * param  encoder  An encoder instance to set.
  224.  * param  value    Flag value (see above).
  225.  * assert
  226.  *    code encoder != NULL endcode
  227.  * retval FLAC__bool
  228.  *    c false if the encoder is already initialized, else c true.
  229.  */
  230. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_loose_mid_side_stereo(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
  231. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_channels()
  232.  *
  233.  * default c 2
  234.  * param  encoder  An encoder instance to set.
  235.  * param  value    See above.
  236.  * assert
  237.  *    code encoder != NULL endcode
  238.  * retval FLAC__bool
  239.  *    c false if the encoder is already initialized, else c true.
  240.  */
  241. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_channels(OggFLAC__StreamEncoder *encoder, unsigned value);
  242. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_bits_per_sample()
  243.  *
  244.  * default c 16
  245.  * param  encoder  An encoder instance to set.
  246.  * param  value    See above.
  247.  * assert
  248.  *    code encoder != NULL endcode
  249.  * retval FLAC__bool
  250.  *    c false if the encoder is already initialized, else c true.
  251.  */
  252. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_bits_per_sample(OggFLAC__StreamEncoder *encoder, unsigned value);
  253. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_sample_rate()
  254.  *
  255.  * default c 44100
  256.  * param  encoder  An encoder instance to set.
  257.  * param  value    See above.
  258.  * assert
  259.  *    code encoder != NULL endcode
  260.  * retval FLAC__bool
  261.  *    c false if the encoder is already initialized, else c true.
  262.  */
  263. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_sample_rate(OggFLAC__StreamEncoder *encoder, unsigned value);
  264. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_blocksize()
  265.  *
  266.  * default c 1152
  267.  * param  encoder  An encoder instance to set.
  268.  * param  value    See above.
  269.  * assert
  270.  *    code encoder != NULL endcode
  271.  * retval FLAC__bool
  272.  *    c false if the encoder is already initialized, else c true.
  273.  */
  274. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_blocksize(OggFLAC__StreamEncoder *encoder, unsigned value);
  275. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_max_lpc_order()
  276.  *
  277.  * default c 0
  278.  * param  encoder  An encoder instance to set.
  279.  * param  value    See above.
  280.  * assert
  281.  *    code encoder != NULL endcode
  282.  * retval FLAC__bool
  283.  *    c false if the encoder is already initialized, else c true.
  284.  */
  285. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_max_lpc_order(OggFLAC__StreamEncoder *encoder, unsigned value);
  286. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_qlp_coeff_precision()
  287.  *
  288.  * default c 0
  289.  * param  encoder  An encoder instance to set.
  290.  * param  value    See above.
  291.  * assert
  292.  *    code encoder != NULL endcode
  293.  * retval FLAC__bool
  294.  *    c false if the encoder is already initialized, else c true.
  295.  */
  296. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_qlp_coeff_precision(OggFLAC__StreamEncoder *encoder, unsigned value);
  297. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_qlp_coeff_prec_search()
  298.  *
  299.  * default c false
  300.  * param  encoder  An encoder instance to set.
  301.  * param  value    See above.
  302.  * assert
  303.  *    code encoder != NULL endcode
  304.  * retval FLAC__bool
  305.  *    c false if the encoder is already initialized, else c true.
  306.  */
  307. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_do_qlp_coeff_prec_search(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
  308. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_do_escape_coding()
  309.  *
  310.  * default c false
  311.  * param  encoder  An encoder instance to set.
  312.  * param  value    See above.
  313.  * assert
  314.  *    code encoder != NULL endcode
  315.  * retval FLAC__bool
  316.  *    c false if the encoder is already initialized, else c true.
  317.  */
  318. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_do_escape_coding(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
  319. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_do_exhaustive_model_search()
  320.  *
  321.  * default c false
  322.  * param  encoder  An encoder instance to set.
  323.  * param  value    See above.
  324.  * assert
  325.  *    code encoder != NULL endcode
  326.  * retval FLAC__bool
  327.  *    c false if the encoder is already initialized, else c true.
  328.  */
  329. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_do_exhaustive_model_search(OggFLAC__StreamEncoder *encoder, FLAC__bool value);
  330. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_min_residual_partition_order()
  331.  *
  332.  * default c 0
  333.  * param  encoder  An encoder instance to set.
  334.  * param  value    See above.
  335.  * assert
  336.  *    code encoder != NULL endcode
  337.  * retval FLAC__bool
  338.  *    c false if the encoder is already initialized, else c true.
  339.  */
  340. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_min_residual_partition_order(OggFLAC__StreamEncoder *encoder, unsigned value);
  341. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_max_residual_partition_order()
  342.  *
  343.  * default c 0
  344.  * param  encoder  An encoder instance to set.
  345.  * param  value    See above.
  346.  * assert
  347.  *    code encoder != NULL endcode
  348.  * retval FLAC__bool
  349.  *    c false if the encoder is already initialized, else c true.
  350.  */
  351. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_max_residual_partition_order(OggFLAC__StreamEncoder *encoder, unsigned value);
  352. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_rice_parameter_search_dist()
  353.  *
  354.  * default c 0
  355.  * param  encoder  An encoder instance to set.
  356.  * param  value    See above.
  357.  * assert
  358.  *    code encoder != NULL endcode
  359.  * retval FLAC__bool
  360.  *    c false if the encoder is already initialized, else c true.
  361.  */
  362. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_rice_parameter_search_dist(OggFLAC__StreamEncoder *encoder, unsigned value);
  363. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_total_samples_estimate()
  364.  *
  365.  * default c 0
  366.  * param  encoder  An encoder instance to set.
  367.  * param  value    See above.
  368.  * assert
  369.  *    code encoder != NULL endcode
  370.  * retval FLAC__bool
  371.  *    c false if the encoder is already initialized, else c true.
  372.  */
  373. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_total_samples_estimate(OggFLAC__StreamEncoder *encoder, FLAC__uint64 value);
  374. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_set_metadata()
  375.  *
  376.  * note The Ogg FLAC mapping requires that the VORBIS_COMMENT block be
  377.  * the second metadata block of the stream.  The encoder already supplies
  378.  * the STREAMINFO block automatically.  If a metadata does not contain a
  379.  * VORBIS_COMMENT block, the encoder will supply that too.  Otherwise, if
  380.  * a metadata does contain a VORBIS_COMMENT block and it is not the
  381.  * first, this function will reorder a metadata by moving the
  382.  * VORBIS_COMMENT block to the front; the relative ordering of the other
  383.  * blocks will remain as they were.
  384.  *
  385.  * note The Ogg FLAC mapping limits the number of metadata blocks per
  386.  * stream to c 65535.  If a num_blocks exceeds this the function will
  387.  * return c false.
  388.  *
  389.  * default c NULL, 0
  390.  * param  encoder     An encoder instance to set.
  391.  * param  metadata    See above.
  392.  * param  num_blocks  See above.
  393.  * assert
  394.  *    code encoder != NULL endcode
  395.  * retval FLAC__bool
  396.  *    c false if the encoder is already initialized, or if
  397.  *    a num_blocks > 65535, else c true.
  398.  */
  399. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_metadata(OggFLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
  400. /** Set the write callback.
  401.  *  This is inherited from FLAC__StreamEncoder; see
  402.  *  FLAC__stream_encoder_set_write_callback().
  403.  *
  404.  * note
  405.  * Unlike the FLAC stream encoder write callback, the Ogg stream
  406.  * encoder write callback will be called twice when writing audio
  407.  * frames; once for the page header, and once for the page body.
  408.  * When writing the page header, the a samples argument to the
  409.  * write callback will be c 0.
  410.  *
  411.  * note
  412.  * The callback is mandatory and must be set before initialization.
  413.  *
  414.  * default c NULL
  415.  * param  encoder  An encoder instance to set.
  416.  * param  value    See above.
  417.  * assert
  418.  *    code encoder != NULL endcode
  419.  *    code value != NULL endcode
  420.  * retval FLAC__bool
  421.  *    c false if the encoder is already initialized, else c true.
  422.  */
  423. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_write_callback(OggFLAC__StreamEncoder *encoder, OggFLAC__StreamEncoderWriteCallback value);
  424. /** Set the metadata callback.
  425.  *  This is inherited from FLAC__StreamEncoder; see
  426.  *  FLAC__stream_encoder_set_metadata_callback().
  427.  *
  428.  * note
  429.  * The callback is mandatory and must be set before initialization.
  430.  *
  431.  * default c NULL
  432.  * param  encoder  An encoder instance to set.
  433.  * param  value    See above.
  434.  * assert
  435.  *    code encoder != NULL endcode
  436.  *    code value != NULL endcode
  437.  * retval FLAC__bool
  438.  *    c false if the encoder is already initialized, else c true.
  439.  */
  440. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_metadata_callback(OggFLAC__StreamEncoder *encoder, OggFLAC__StreamEncoderMetadataCallback value);
  441. /** Set the client data to be passed back to callbacks.
  442.  *  This value will be supplied to callbacks in their a client_data
  443.  *  argument.
  444.  *
  445.  * default c NULL
  446.  * param  encoder  An encoder instance to set.
  447.  * param  value    See above.
  448.  * assert
  449.  *    code encoder != NULL endcode
  450.  * retval FLAC__bool
  451.  *    c false if the encoder is already initialized, else c true.
  452.  */
  453. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_set_client_data(OggFLAC__StreamEncoder *encoder, void *value);
  454. /** Get the current encoder state.
  455.  *
  456.  * param  encoder  An encoder instance to query.
  457.  * assert
  458.  *    code encoder != NULL endcode
  459.  * retval OggFLAC__StreamEncoderState
  460.  *    The current encoder state.
  461.  */
  462. OggFLAC_API OggFLAC__StreamEncoderState OggFLAC__stream_encoder_get_state(const OggFLAC__StreamEncoder *encoder);
  463. /** Get the state of the underlying FLAC stream encoder.
  464.  *  Useful when the stream encoder state is
  465.  *  c OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR.
  466.  *
  467.  * param  encoder  An encoder instance to query.
  468.  * assert
  469.  *    code encoder != NULL endcode
  470.  * retval FLAC__StreamEncoderState
  471.  *    The FLAC stream encoder state.
  472.  */
  473. OggFLAC_API FLAC__StreamEncoderState OggFLAC__stream_encoder_get_FLAC_stream_encoder_state(const OggFLAC__StreamEncoder *encoder);
  474. /** Get the state of the underlying FLAC stream encoder's verify decoder.
  475.  *  Useful when the stream encoder state is
  476.  *  c OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR and the
  477.  *  FLAC encoder state is c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.
  478.  *
  479.  * param  encoder  An encoder instance to query.
  480.  * assert
  481.  *    code encoder != NULL endcode
  482.  * retval FLAC__StreamDecoderState
  483.  *    The FLAC verify decoder state.
  484.  */
  485. OggFLAC_API FLAC__StreamDecoderState OggFLAC__stream_encoder_get_verify_decoder_state(const OggFLAC__StreamEncoder *encoder);
  486. /** Get the current encoder state as a C string.
  487.  *  This version automatically resolves
  488.  *  c OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR by getting the
  489.  *  FLAC stream encoder's state.
  490.  *
  491.  * param  encoder  A encoder instance to query.
  492.  * assert
  493.  *    code encoder != NULL endcode
  494.  * retval const char *
  495.  *    The encoder state as a C string.  Do not modify the contents.
  496.  */
  497. OggFLAC_API const char *OggFLAC__stream_encoder_get_resolved_state_string(const OggFLAC__StreamEncoder *encoder);
  498. /** Get relevant values about the nature of a verify decoder error.
  499.  *  Inherited from FLAC__stream_encoder_get_verify_decoder_error_stats().
  500.  *  Useful when the stream encoder state is
  501.  *  c OggFLAC__STREAM_ENCODER_FLAC_STREAM_ENCODER_ERROR and the
  502.  *  FLAC stream encoder state is
  503.  *  c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.
  504.  *
  505.  * param  encoder  An encoder instance to query.
  506.  * param  absolute_sample  The absolute sample number of the mismatch.
  507.  * param  frame_number  The number of the frame in which the mismatch occurred.
  508.  * param  channel       The channel in which the mismatch occurred.
  509.  * param  sample        The number of the sample (relative to the frame) in
  510.  *                       which the mismatch occurred.
  511.  * param  expected      The expected value for the sample in question.
  512.  * param  got           The actual value returned by the decoder.
  513.  * assert
  514.  *    code encoder != NULL endcode
  515.  *    code absolute_sample != NULL endcode
  516.  *    code frame_number != NULL endcode
  517.  *    code channel != NULL endcode
  518.  *    code sample != NULL endcode
  519.  *    code expected != NULL endcode
  520.  */
  521. OggFLAC_API void OggFLAC__stream_encoder_get_verify_decoder_error_stats(const OggFLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got);
  522. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_verify()
  523.  *
  524.  * param  encoder  An encoder instance to query.
  525.  * assert
  526.  *    code encoder != NULL endcode
  527.  * retval FLAC__bool
  528.  *    See OggFLAC__stream_encoder_set_verify().
  529.  */
  530. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_verify(const OggFLAC__StreamEncoder *encoder);
  531. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_streamable_subset()
  532.  *
  533.  * param  encoder  An encoder instance to query.
  534.  * assert
  535.  *    code encoder != NULL endcode
  536.  * retval FLAC__bool
  537.  *    See OggFLAC__stream_encoder_set_streamable_subset().
  538.  */
  539. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_streamable_subset(const OggFLAC__StreamEncoder *encoder);
  540. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_do_mid_side_stereo()
  541.  *
  542.  * param  encoder  An encoder instance to query.
  543.  * assert
  544.  *    code encoder != NULL endcode
  545.  * retval FLAC__bool
  546.  *    See OggFLAC__stream_encoder_get_do_mid_side_stereo().
  547.  */
  548. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_do_mid_side_stereo(const OggFLAC__StreamEncoder *encoder);
  549. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_loose_mid_side_stereo()
  550.  *
  551.  * param  encoder  An encoder instance to query.
  552.  * assert
  553.  *    code encoder != NULL endcode
  554.  * retval FLAC__bool
  555.  *    See OggFLAC__stream_encoder_set_loose_mid_side_stereo().
  556.  */
  557. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_loose_mid_side_stereo(const OggFLAC__StreamEncoder *encoder);
  558. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_channels()
  559.  *
  560.  * param  encoder  An encoder instance to query.
  561.  * assert
  562.  *    code encoder != NULL endcode
  563.  * retval unsigned
  564.  *    See OggFLAC__stream_encoder_set_channels().
  565.  */
  566. OggFLAC_API unsigned OggFLAC__stream_encoder_get_channels(const OggFLAC__StreamEncoder *encoder);
  567. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_bits_per_sample()
  568.  *
  569.  * param  encoder  An encoder instance to query.
  570.  * assert
  571.  *    code encoder != NULL endcode
  572.  * retval unsigned
  573.  *    See OggFLAC__stream_encoder_set_bits_per_sample().
  574.  */
  575. OggFLAC_API unsigned OggFLAC__stream_encoder_get_bits_per_sample(const OggFLAC__StreamEncoder *encoder);
  576. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_sample_rate()
  577.  *
  578.  * param  encoder  An encoder instance to query.
  579.  * assert
  580.  *    code encoder != NULL endcode
  581.  * retval unsigned
  582.  *    See OggFLAC__stream_encoder_set_sample_rate().
  583.  */
  584. OggFLAC_API unsigned OggFLAC__stream_encoder_get_sample_rate(const OggFLAC__StreamEncoder *encoder);
  585. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_blocksize()
  586.  *
  587.  * param  encoder  An encoder instance to query.
  588.  * assert
  589.  *    code encoder != NULL endcode
  590.  * retval unsigned
  591.  *    See OggFLAC__stream_encoder_set_blocksize().
  592.  */
  593. OggFLAC_API unsigned OggFLAC__stream_encoder_get_blocksize(const OggFLAC__StreamEncoder *encoder);
  594. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_max_lpc_order()
  595.  *
  596.  * param  encoder  An encoder instance to query.
  597.  * assert
  598.  *    code encoder != NULL endcode
  599.  * retval unsigned
  600.  *    See OggFLAC__stream_encoder_set_max_lpc_order().
  601.  */
  602. OggFLAC_API unsigned OggFLAC__stream_encoder_get_max_lpc_order(const OggFLAC__StreamEncoder *encoder);
  603. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_qlp_coeff_precision()
  604.  *
  605.  * param  encoder  An encoder instance to query.
  606.  * assert
  607.  *    code encoder != NULL endcode
  608.  * retval unsigned
  609.  *    See OggFLAC__stream_encoder_set_qlp_coeff_precision().
  610.  */
  611. OggFLAC_API unsigned OggFLAC__stream_encoder_get_qlp_coeff_precision(const OggFLAC__StreamEncoder *encoder);
  612. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_do_qlp_coeff_prec_search()
  613.  *
  614.  * param  encoder  An encoder instance to query.
  615.  * assert
  616.  *    code encoder != NULL endcode
  617.  * retval FLAC__bool
  618.  *    See OggFLAC__stream_encoder_set_do_qlp_coeff_prec_search().
  619.  */
  620. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_do_qlp_coeff_prec_search(const OggFLAC__StreamEncoder *encoder);
  621. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_do_escape_coding()
  622.  *
  623.  * param  encoder  An encoder instance to query.
  624.  * assert
  625.  *    code encoder != NULL endcode
  626.  * retval FLAC__bool
  627.  *    See OggFLAC__stream_encoder_set_do_escape_coding().
  628.  */
  629. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_do_escape_coding(const OggFLAC__StreamEncoder *encoder);
  630. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_do_exhaustive_model_search()
  631.  *
  632.  * param  encoder  An encoder instance to query.
  633.  * assert
  634.  *    code encoder != NULL endcode
  635.  * retval FLAC__bool
  636.  *    See OggFLAC__stream_encoder_set_do_exhaustive_model_search().
  637.  */
  638. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_get_do_exhaustive_model_search(const OggFLAC__StreamEncoder *encoder);
  639. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_min_residual_partition_order()
  640.  *
  641.  * param  encoder  An encoder instance to query.
  642.  * assert
  643.  *    code encoder != NULL endcode
  644.  * retval unsigned
  645.  *    See OggFLAC__stream_encoder_set_min_residual_partition_order().
  646.  */
  647. OggFLAC_API unsigned OggFLAC__stream_encoder_get_min_residual_partition_order(const OggFLAC__StreamEncoder *encoder);
  648. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_man_residual_partition_order()
  649.  *
  650.  * param  encoder  An encoder instance to query.
  651.  * assert
  652.  *    code encoder != NULL endcode
  653.  * retval unsigned
  654.  *    See OggFLAC__stream_encoder_set_max_residual_partition_order().
  655.  */
  656. OggFLAC_API unsigned OggFLAC__stream_encoder_get_max_residual_partition_order(const OggFLAC__StreamEncoder *encoder);
  657. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_rice_parameter_search_dist()
  658.  *
  659.  * param  encoder  An encoder instance to query.
  660.  * assert
  661.  *    code encoder != NULL endcode
  662.  * retval unsigned
  663.  *    See OggFLAC__stream_encoder_set_rice_parameter_search_dist().
  664.  */
  665. OggFLAC_API unsigned OggFLAC__stream_encoder_get_rice_parameter_search_dist(const OggFLAC__StreamEncoder *encoder);
  666. /** This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_get_total_samples_estimate()
  667.  *
  668.  * param  encoder  An encoder instance to set.
  669.  * assert
  670.  *    code encoder != NULL endcode
  671.  * retval FLAC__uint64
  672.  *    See OggFLAC__stream_encoder_get_total_samples_estimate().
  673.  */
  674. OggFLAC_API FLAC__uint64 OggFLAC__stream_encoder_get_total_samples_estimate(const OggFLAC__StreamEncoder *encoder);
  675. /** Initialize the encoder instance.
  676.  *  Should be called after OggFLAC__stream_encoder_new() and
  677.  *  OggFLAC__stream_encoder_set_*() but before OggFLAC__stream_encoder_process()
  678.  *  or OggFLAC__stream_encoder_process_interleaved().  Will set and return
  679.  *  the encoder state, which will be OggFLAC__STREAM_ENCODER_OK if
  680.  *  initialization succeeded.
  681.  *
  682.  *  The call to OggFLAC__stream_encoder_init() currently will also immediately
  683.  *  call the write callback several times, once with the c fLaC signature,
  684.  *  and once for each encoded metadata block.
  685.  *
  686.  * param  encoder  An uninitialized encoder instance.
  687.  * assert
  688.  *    code encoder != NULL endcode
  689.  * retval OggFLAC__StreamEncoderState
  690.  *    c OggFLAC__STREAM_ENCODER_OK if initialization was successful; see
  691.  *    OggFLAC__StreamEncoderState for the meanings of other return values.
  692.  */
  693. OggFLAC_API OggFLAC__StreamEncoderState OggFLAC__stream_encoder_init(OggFLAC__StreamEncoder *encoder);
  694. /** Finish the encoding process.
  695.  *  Flushes the encoding buffer, releases resources, resets the encoder
  696.  *  settings to their defaults, and returns the encoder state to
  697.  *  OggFLAC__STREAM_ENCODER_UNINITIALIZED.  Note that this can generate
  698.  *  one or more write callbacks before returning.
  699.  *
  700.  *  In the event of a prematurely-terminated encode, it is not strictly
  701.  *  necessary to call this immediately before OggFLAC__stream_encoder_delete()
  702.  *  but it is good practice to match every OggFLAC__stream_encoder_init()
  703.  *  with an OggFLAC__stream_encoder_finish().
  704.  *
  705.  * param  encoder  An uninitialized encoder instance.
  706.  * assert
  707.  *    code encoder != NULL endcode
  708.  */
  709. OggFLAC_API void OggFLAC__stream_encoder_finish(OggFLAC__StreamEncoder *encoder);
  710. /** Submit data for encoding.
  711.  * This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_process().
  712.  *
  713.  * param  encoder  An initialized encoder instance in the OK state.
  714.  * param  buffer   An array of pointers to each channel's signal.
  715.  * param  samples  The number of samples in one channel.
  716.  * assert
  717.  *    code encoder != NULL endcode
  718.  *    code OggFLAC__stream_encoder_get_state(encoder) == OggFLAC__STREAM_ENCODER_OK endcode
  719.  * retval FLAC__bool
  720.  *    c true if successful, else c false; in this case, check the
  721.  *    encoder state with OggFLAC__stream_encoder_get_state() to see what
  722.  *    went wrong.
  723.  */
  724. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_process(OggFLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
  725. /** Submit data for encoding.
  726.  * This is inherited from FLAC__StreamEncoder; see FLAC__stream_encoder_process_interleaved().
  727.  *
  728.  * param  encoder  An initialized encoder instance in the OK state.
  729.  * param  buffer   An array of channel-interleaved data (see above).
  730.  * param  samples  The number of samples in one channel, the same as for
  731.  *                  OggFLAC__stream_encoder_process().  For example, if
  732.  *                  encoding two channels, c 1000 a samples corresponds
  733.  *                  to a a buffer of 2000 values.
  734.  * assert
  735.  *    code encoder != NULL endcode
  736.  *    code OggFLAC__stream_encoder_get_state(encoder) == OggFLAC__STREAM_ENCODER_OK endcode
  737.  * retval FLAC__bool
  738.  *    c true if successful, else c false; in this case, check the
  739.  *    encoder state with OggFLAC__stream_encoder_get_state() to see what
  740.  *    went wrong.
  741.  */
  742. OggFLAC_API FLAC__bool OggFLAC__stream_encoder_process_interleaved(OggFLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
  743. /* } */
  744. #ifdef __cplusplus
  745. }
  746. #endif
  747. #endif