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

Windows CE

开发平台:

C/C++

  1. /* libFLAC - Free Lossless Audio Codec 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 FLAC__FILE_ENCODER_H
  32. #define FLAC__FILE_ENCODER_H
  33. #include "export.h"
  34. #include "seekable_stream_encoder.h"
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38. /** file include/FLAC/file_encoder.h
  39.  *
  40.  *  brief
  41.  *  This module contains the functions which implement the file
  42.  *  encoder.
  43.  *
  44.  *  See the detailed documentation in the
  45.  *  link flac_file_encoder file encoder endlink module.
  46.  */
  47. /** defgroup flac_file_encoder FLAC/file_encoder.h: file encoder interface
  48.  *  ingroup flac_encoder
  49.  *
  50.  *  brief
  51.  *  This module contains the functions which implement the file
  52.  *  encoder.
  53.  *
  54.  * The basic usage of this encoder is as follows:
  55.  * - The program creates an instance of an encoder using
  56.  *   FLAC__file_encoder_new().
  57.  * - The program overrides the default settings using
  58.  *   FLAC__file_encoder_set_*() functions.
  59.  * - The program initializes the instance to validate the settings and
  60.  *   prepare for encoding using FLAC__file_encoder_init().
  61.  * - The program calls FLAC__file_encoder_process() or
  62.  *   FLAC__file_encoder_process_interleaved() to encode data, which
  63.  *   subsequently writes data to the output file.
  64.  * - The program finishes the encoding with FLAC__file_encoder_finish(),
  65.  *   which causes the encoder to encode any data still in its input pipe,
  66.  *   rewind and write the STREAMINFO metadata to file, and finally reset
  67.  *   the encoder to the uninitialized state.
  68.  * - The instance may be used again or deleted with
  69.  *   FLAC__file_encoder_delete().
  70.  *
  71.  * The file encoder is a wrapper around the
  72.  * link flac_seekable_stream_encoder seekable stream encoder endlink which supplies all
  73.  * callbacks internally; the user need specify only the filename.
  74.  *
  75.  * Make sure to read the detailed description of the
  76.  * link flac_seekable_stream_encoder seekable stream encoder module endlink since the
  77.  * link flac_stream_encoder stream encoder module endlink since the
  78.  * file encoder inherits much of its behavior from them.
  79.  *
  80.  * note
  81.  * The "set" functions may only be called when the encoder is in the
  82.  * state FLAC__FILE_ENCODER_UNINITIALIZED, i.e. after
  83.  * FLAC__file_encoder_new() or FLAC__file_encoder_finish(), but
  84.  * before FLAC__file_encoder_init().  If this is the case they will
  85.  * return c true, otherwise c false.
  86.  *
  87.  * note
  88.  * FLAC__file_encoder_finish() resets all settings to the constructor
  89.  * defaults.
  90.  *
  91.  * {
  92.  */
  93. /** State values for a FLAC__FileEncoder
  94.  *
  95.  *  The encoder's state can be obtained by calling FLAC__file_encoder_get_state().
  96.  */
  97. typedef enum {
  98. FLAC__FILE_ENCODER_OK = 0,
  99. /**< The encoder is in the normal OK state. */
  100. FLAC__FILE_ENCODER_NO_FILENAME,
  101. /**< FLAC__file_encoder_init() was called without first calling
  102.  * FLAC__file_encoder_set_filename().
  103.  */
  104. FLAC__FILE_ENCODER_SEEKABLE_STREAM_ENCODER_ERROR,
  105. /**< An error occurred in the underlying seekable stream encoder;
  106.  * check FLAC__file_encoder_get_seekable_stream_encoder_state().
  107.  */
  108. FLAC__FILE_ENCODER_FATAL_ERROR_WHILE_WRITING,
  109. /**< A fatal error occurred while writing to the encoded file. */
  110. FLAC__FILE_ENCODER_ERROR_OPENING_FILE,
  111. /**< An error occurred opening the output file for writing. */
  112. FLAC__FILE_ENCODER_MEMORY_ALLOCATION_ERROR,
  113. /**< Memory allocation failed. */
  114. FLAC__FILE_ENCODER_ALREADY_INITIALIZED,
  115. /**< FLAC__file_encoder_init() was called when the encoder was
  116.  * already initialized, usually because
  117.  * FLAC__file_encoder_finish() was not called.
  118.  */
  119. FLAC__FILE_ENCODER_UNINITIALIZED
  120. /**< The encoder is in the uninitialized state. */
  121. } FLAC__FileEncoderState;
  122. /** Maps a FLAC__FileEncoderState to a C string.
  123.  *
  124.  *  Using a FLAC__FileEncoderState as the index to this array
  125.  *  will give the string equivalent.  The contents should not be modified.
  126.  */
  127. extern FLAC_API const char * const FLAC__FileEncoderStateString[];
  128. /***********************************************************************
  129.  *
  130.  * class FLAC__FileEncoder
  131.  *
  132.  ***********************************************************************/
  133. struct FLAC__FileEncoderProtected;
  134. struct FLAC__FileEncoderPrivate;
  135. /** The opaque structure definition for the file encoder type.
  136.  *  See the link flac_file_encoder file encoder module endlink
  137.  *  for a detailed description.
  138.  */
  139. typedef struct {
  140. struct FLAC__FileEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
  141. struct FLAC__FileEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
  142. } FLAC__FileEncoder;
  143. /** Signature for the progress callback.
  144.  *  See FLAC__file_encoder_set_progress_callback() for more info.
  145.  *
  146.  * param  encoder          The encoder instance calling the callback.
  147.  * param  bytes_written    Bytes written so far.
  148.  * param  samples_written  Samples written so far.
  149.  * param  frames_written   Frames written so far.
  150.  * param  total_frames_estimate  The estimate of the total number of
  151.  *                                frames to be written.
  152.  * param  client_data      The callee's client data set through
  153.  *                          FLAC__file_encoder_set_client_data().
  154.  */
  155. typedef void (*FLAC__FileEncoderProgressCallback)(const FLAC__FileEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data);
  156. /***********************************************************************
  157.  *
  158.  * Class constructor/destructor
  159.  *
  160.  ***********************************************************************/
  161. /** Create a new file encoder instance.  The instance is created with
  162.  *  default settings; see the individual FLAC__file_encoder_set_*()
  163.  *  functions for each setting's default.
  164.  *
  165.  * retval FLAC__FileEncoder*
  166.  *    c NULL if there was an error allocating memory, else the new instance.
  167.  */
  168. FLAC_API FLAC__FileEncoder *FLAC__file_encoder_new();
  169. /** Free an encoder instance.  Deletes the object pointed to by a encoder.
  170.  *
  171.  * param encoder  A pointer to an existing encoder.
  172.  * assert
  173.  *    code encoder != NULL endcode
  174.  */
  175. FLAC_API void FLAC__file_encoder_delete(FLAC__FileEncoder *encoder);
  176. /***********************************************************************
  177.  *
  178.  * Public class method prototypes
  179.  *
  180.  ***********************************************************************/
  181. /** This is inherited from FLAC__SeekableStreamEncoder; see
  182.  *  FLAC__seekable_stream_encoder_set_verify().
  183.  *
  184.  * default c true
  185.  * param  encoder  An encoder instance to set.
  186.  * param  value    See above.
  187.  * assert
  188.  *    code encoder != NULL endcode
  189.  * retval FLAC__bool
  190.  *    c false if the encoder is already initialized, else c true.
  191.  */
  192. FLAC_API FLAC__bool FLAC__file_encoder_set_verify(FLAC__FileEncoder *encoder, FLAC__bool value);
  193. /** This is inherited from FLAC__SeekableStreamEncoder; see
  194.  *  FLAC__seekable_stream_encoder_set_streamable_subset().
  195.  *
  196.  * default c true
  197.  * param  encoder  An encoder instance to set.
  198.  * param  value    See above.
  199.  * assert
  200.  *    code encoder != NULL endcode
  201.  * retval FLAC__bool
  202.  *    c false if the encoder is already initialized, else c true.
  203.  */
  204. FLAC_API FLAC__bool FLAC__file_encoder_set_streamable_subset(FLAC__FileEncoder *encoder, FLAC__bool value);
  205. /** This is inherited from FLAC__SeekableStreamEncoder; see
  206.  *  FLAC__seekable_stream_encoder_set_do_mid_side_stereo().
  207.  *
  208.  * default c false
  209.  * param  encoder  An encoder instance to set.
  210.  * param  value    See above.
  211.  * assert
  212.  *    code encoder != NULL endcode
  213.  * retval FLAC__bool
  214.  *    c false if the encoder is already initialized, else c true.
  215.  */
  216. FLAC_API FLAC__bool FLAC__file_encoder_set_do_mid_side_stereo(FLAC__FileEncoder *encoder, FLAC__bool value);
  217. /** This is inherited from FLAC__SeekableStreamEncoder; see
  218.  *  FLAC__seekable_stream_encoder_set_loose_mid_side_stereo().
  219.  *
  220.  * default c false
  221.  * param  encoder  An encoder instance to set.
  222.  * param  value    See above.
  223.  * assert
  224.  *    code encoder != NULL endcode
  225.  * retval FLAC__bool
  226.  *    c false if the encoder is already initialized, else c true.
  227.  */
  228. FLAC_API FLAC__bool FLAC__file_encoder_set_loose_mid_side_stereo(FLAC__FileEncoder *encoder, FLAC__bool value);
  229. /** This is inherited from FLAC__SeekableStreamEncoder; see
  230.  *  FLAC__seekable_stream_encoder_set_channels().
  231.  *
  232.  * default c 2
  233.  * param  encoder  An encoder instance to set.
  234.  * param  value    See above.
  235.  * assert
  236.  *    code encoder != NULL endcode
  237.  * retval FLAC__bool
  238.  *    c false if the encoder is already initialized, else c true.
  239.  */
  240. FLAC_API FLAC__bool FLAC__file_encoder_set_channels(FLAC__FileEncoder *encoder, unsigned value);
  241. /** This is inherited from FLAC__SeekableStreamEncoder; see
  242.  *  FLAC__seekable_stream_encoder_set_bits_per_sample().
  243.  *
  244.  * warning
  245.  * Do not feed the encoder data that is wider than the value you
  246.  * set here or you will generate an invalid stream.
  247.  *
  248.  * default c 16
  249.  * param  encoder  An encoder instance to set.
  250.  * param  value    See above.
  251.  * assert
  252.  *    code encoder != NULL endcode
  253.  * retval FLAC__bool
  254.  *    c false if the encoder is already initialized, else c true.
  255.  */
  256. FLAC_API FLAC__bool FLAC__file_encoder_set_bits_per_sample(FLAC__FileEncoder *encoder, unsigned value);
  257. /** This is inherited from FLAC__SeekableStreamEncoder; see
  258.  *  FLAC__seekable_stream_encoder_set_sample_rate().
  259.  *
  260.  * default c 44100
  261.  * param  encoder  An encoder instance to set.
  262.  * param  value    See above.
  263.  * assert
  264.  *    code encoder != NULL endcode
  265.  * retval FLAC__bool
  266.  *    c false if the encoder is already initialized, else c true.
  267.  */
  268. FLAC_API FLAC__bool FLAC__file_encoder_set_sample_rate(FLAC__FileEncoder *encoder, unsigned value);
  269. /** This is inherited from FLAC__SeekableStreamEncoder; see
  270.  *  FLAC__seekable_stream_encoder_set_blocksize().
  271.  *
  272.  * default c 1152
  273.  * param  encoder  An encoder instance to set.
  274.  * param  value    See above.
  275.  * assert
  276.  *    code encoder != NULL endcode
  277.  * retval FLAC__bool
  278.  *    c false if the encoder is already initialized, else c true.
  279.  */
  280. FLAC_API FLAC__bool FLAC__file_encoder_set_blocksize(FLAC__FileEncoder *encoder, unsigned value);
  281. /** This is inherited from FLAC__SeekableStreamEncoder; see
  282.  *  FLAC__seekable_stream_encoder_set_max_lpc_order().
  283.  *
  284.  * default c 0
  285.  * param  encoder  An encoder instance to set.
  286.  * param  value    See above.
  287.  * assert
  288.  *    code encoder != NULL endcode
  289.  * retval FLAC__bool
  290.  *    c false if the encoder is already initialized, else c true.
  291.  */
  292. FLAC_API FLAC__bool FLAC__file_encoder_set_max_lpc_order(FLAC__FileEncoder *encoder, unsigned value);
  293. /** This is inherited from FLAC__SeekableStreamEncoder; see
  294.  *  FLAC__seekable_stream_encoder_set_qlp_coeff_precision().
  295.  *
  296.  * note
  297.  * In the current implementation, qlp_coeff_precision + bits_per_sample must
  298.  * be less than 32.
  299.  *
  300.  * default c 0
  301.  * param  encoder  An encoder instance to set.
  302.  * param  value    See above.
  303.  * assert
  304.  *    code encoder != NULL endcode
  305.  * retval FLAC__bool
  306.  *    c false if the encoder is already initialized, else c true.
  307.  */
  308. FLAC_API FLAC__bool FLAC__file_encoder_set_qlp_coeff_precision(FLAC__FileEncoder *encoder, unsigned value);
  309. /** This is inherited from FLAC__SeekableStreamEncoder; see
  310.  *  FLAC__seekable_stream_encoder_set_do_qlp_coeff_prec_search().
  311.  *
  312.  * default c false
  313.  * param  encoder  An encoder instance to set.
  314.  * param  value    See above.
  315.  * assert
  316.  *    code encoder != NULL endcode
  317.  * retval FLAC__bool
  318.  *    c false if the encoder is already initialized, else c true.
  319.  */
  320. FLAC_API FLAC__bool FLAC__file_encoder_set_do_qlp_coeff_prec_search(FLAC__FileEncoder *encoder, FLAC__bool value);
  321. /** This is inherited from FLAC__SeekableStreamEncoder; see
  322.  *  FLAC__seekable_stream_encoder_set_do_escape_coding().
  323.  *
  324.  * default c false
  325.  * param  encoder  An encoder instance to set.
  326.  * param  value    See above.
  327.  * assert
  328.  *    code encoder != NULL endcode
  329.  * retval FLAC__bool
  330.  *    c false if the encoder is already initialized, else c true.
  331.  */
  332. FLAC_API FLAC__bool FLAC__file_encoder_set_do_escape_coding(FLAC__FileEncoder *encoder, FLAC__bool value);
  333. /** This is inherited from FLAC__SeekableStreamEncoder; see
  334.  *  FLAC__seekable_stream_encoder_set_do_exhaustive_model_search().
  335.  *
  336.  * default c false
  337.  * param  encoder  An encoder instance to set.
  338.  * param  value    See above.
  339.  * assert
  340.  *    code encoder != NULL endcode
  341.  * retval FLAC__bool
  342.  *    c false if the encoder is already initialized, else c true.
  343.  */
  344. FLAC_API FLAC__bool FLAC__file_encoder_set_do_exhaustive_model_search(FLAC__FileEncoder *encoder, FLAC__bool value);
  345. /** This is inherited from FLAC__SeekableStreamEncoder; see
  346.  *  FLAC__seekable_stream_encoder_set_min_residual_partition_order().
  347.  *
  348.  * default c 0
  349.  * param  encoder  An encoder instance to set.
  350.  * param  value    See above.
  351.  * assert
  352.  *    code encoder != NULL endcode
  353.  * retval FLAC__bool
  354.  *    c false if the encoder is already initialized, else c true.
  355.  */
  356. FLAC_API FLAC__bool FLAC__file_encoder_set_min_residual_partition_order(FLAC__FileEncoder *encoder, unsigned value);
  357. /** This is inherited from FLAC__SeekableStreamEncoder; see
  358.  *  FLAC__seekable_stream_encoder_set_max_residual_partition_order().
  359.  *
  360.  * default c 0
  361.  * param  encoder  An encoder instance to set.
  362.  * param  value    See above.
  363.  * assert
  364.  *    code encoder != NULL endcode
  365.  * retval FLAC__bool
  366.  *    c false if the encoder is already initialized, else c true.
  367.  */
  368. FLAC_API FLAC__bool FLAC__file_encoder_set_max_residual_partition_order(FLAC__FileEncoder *encoder, unsigned value);
  369. /** This is inherited from FLAC__SeekableStreamEncoder; see
  370.  *  FLAC__seekable_stream_encoder_set_rice_parameter_search_dist().
  371.  *
  372.  * default c 0
  373.  * param  encoder  An encoder instance to set.
  374.  * param  value    See above.
  375.  * assert
  376.  *    code encoder != NULL endcode
  377.  * retval FLAC__bool
  378.  *    c false if the encoder is already initialized, else c true.
  379.  */
  380. FLAC_API FLAC__bool FLAC__file_encoder_set_rice_parameter_search_dist(FLAC__FileEncoder *encoder, unsigned value);
  381. /** This is inherited from FLAC__SeekableStreamEncoder; see
  382.  *  FLAC__seekable_stream_encoder_set_total_samples_estimate().
  383.  *
  384.  * default c 0
  385.  * param  encoder  An encoder instance to set.
  386.  * param  value    See above.
  387.  * assert
  388.  *    code encoder != NULL endcode
  389.  * retval FLAC__bool
  390.  *    c false if the encoder is already initialized, else c true.
  391.  */
  392. FLAC_API FLAC__bool FLAC__file_encoder_set_total_samples_estimate(FLAC__FileEncoder *encoder, FLAC__uint64 value);
  393. /** This is inherited from FLAC__SeekableStreamEncoder; see
  394.  *  FLAC__seekable_stream_encoder_set_metadata().
  395.  *
  396.  * default c NULL, 0
  397.  * param  encoder     An encoder instance to set.
  398.  * param  metadata    See above.
  399.  * param  num_blocks  See above.
  400.  * assert
  401.  *    code encoder != NULL endcode
  402.  * retval FLAC__bool
  403.  *    c false if the encoder is already initialized, else c true.
  404.  */
  405. FLAC_API FLAC__bool FLAC__file_encoder_set_metadata(FLAC__FileEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
  406. /** Set the output file name encode to.
  407.  *
  408.  * note
  409.  * The filename is mandatory and must be set before initialization.
  410.  *
  411.  * note
  412.  * Unlike the FLAC__FileDecoder, the filename does not interpret "-" for
  413.  * c stdout; writing to c stdout is not relevant in the file encoder.
  414.  *
  415.  * default c NULL
  416.  * param  encoder  A encoder instance to set.
  417.  * param  value    The output file name.
  418.  * assert
  419.  *    code encoder != NULL endcode
  420.  *    code value != NULL endcode
  421.  * retval FLAC__bool
  422.  *    c false if the encoder is already initialized, or there was a memory
  423.  *    allocation error, else c true.
  424.  */
  425. FLAC_API FLAC__bool FLAC__file_encoder_set_filename(FLAC__FileEncoder *encoder, const char *value);
  426. /** Set the progress callback.
  427.  *  The supplied function will be called when the encoder has finished
  428.  *  writing a frame.  The c total_frames_estimate argument to the callback
  429.  *  will be based on the value from
  430.  *  FLAC__file_encoder_set_total_samples_estimate().
  431.  *
  432.  * note
  433.  * Unlike most other callbacks, the progress callback is b not mandatory
  434.  * and need not be set before initialization.
  435.  *
  436.  * default c NULL
  437.  * param  encoder  An encoder instance to set.
  438.  * param  value    See above.
  439.  * assert
  440.  *    code encoder != NULL endcode
  441.  *    code value != NULL endcode
  442.  * retval FLAC__bool
  443.  *    c false if the encoder is already initialized, else c true.
  444.  */
  445. FLAC_API FLAC__bool FLAC__file_encoder_set_progress_callback(FLAC__FileEncoder *encoder, FLAC__FileEncoderProgressCallback value);
  446. /** Set the client data to be passed back to callbacks.
  447.  *  This value will be supplied to callbacks in their a client_data
  448.  *  argument.
  449.  *
  450.  * default c NULL
  451.  * param  encoder  An encoder instance to set.
  452.  * param  value    See above.
  453.  * assert
  454.  *    code encoder != NULL endcode
  455.  * retval FLAC__bool
  456.  *    c false if the encoder is already initialized, else c true.
  457.  */
  458. FLAC_API FLAC__bool FLAC__file_encoder_set_client_data(FLAC__FileEncoder *encoder, void *value);
  459. /** Get the current encoder state.
  460.  *
  461.  * param  encoder  An encoder instance to query.
  462.  * assert
  463.  *    code encoder != NULL endcode
  464.  * retval FLAC__FileEncoderState
  465.  *    The current encoder state.
  466.  */
  467. FLAC_API FLAC__FileEncoderState FLAC__file_encoder_get_state(const FLAC__FileEncoder *encoder);
  468. /** Get the state of the underlying seekable stream encoder.
  469.  *  Useful when the file encoder state is
  470.  *  c FLAC__FILE_ENCODER_SEEKABLE_STREAM_ENCODER_ERROR.
  471.  *
  472.  * param  encoder  An encoder instance to query.
  473.  * assert
  474.  *    code encoder != NULL endcode
  475.  * retval FLAC__SeekableStreamEncoderState
  476.  *    The seekable stream encoder state.
  477.  */
  478. FLAC_API FLAC__SeekableStreamEncoderState FLAC__file_encoder_get_seekable_stream_encoder_state(const FLAC__FileEncoder *encoder);
  479. /** Get the state of the underlying stream encoder.
  480.  *  Useful when the file encoder state is
  481.  *  c FLAC__FILE_ENCODER_SEEKABLE_STREAM_ENCODER_ERROR and the seekable stream
  482.  *  encoder state is c FLAC__SEEKABLE_STREAM_ENCODER_STREAM_ENCODER_ERROR.
  483.  *
  484.  * param  encoder  An encoder instance to query.
  485.  * assert
  486.  *    code encoder != NULL endcode
  487.  * retval FLAC__StreamEncoderState
  488.  *    The seekable stream encoder state.
  489.  */
  490. FLAC_API FLAC__StreamEncoderState FLAC__file_encoder_get_stream_encoder_state(const FLAC__FileEncoder *encoder);
  491. /** Get the state of the underlying stream encoder's verify decoder.
  492.  *  Useful when the file encoder state is
  493.  *  c FLAC__FILE_ENCODER_SEEKABLE_STREAM_ENCODER_ERROR and the seekable stream
  494.  *  encoder state is c FLAC__SEEKABLE_STREAM_ENCODER_STREAM_ENCODER_ERROR and
  495.  *  the stream encoder state is c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.
  496.  *
  497.  * param  encoder  An encoder instance to query.
  498.  * assert
  499.  *    code encoder != NULL endcode
  500.  * retval FLAC__StreamDecoderState
  501.  *    The stream encoder state.
  502.  */
  503. FLAC_API FLAC__StreamDecoderState FLAC__file_encoder_get_verify_decoder_state(const FLAC__FileEncoder *encoder);
  504. /** Get the current encoder state as a C string.
  505.  *  This version automatically resolves
  506.  *  c FLAC__FILE_ENCODER_SEEKABLE_STREAM_ENCODER_ERROR by getting the
  507.  *  seekable stream encoder's state.
  508.  *
  509.  * param  encoder  A encoder instance to query.
  510.  * assert
  511.  *    code encoder != NULL endcode
  512.  * retval const char *
  513.  *    The encoder state as a C string.  Do not modify the contents.
  514.  */
  515. FLAC_API const char *FLAC__file_encoder_get_resolved_state_string(const FLAC__FileEncoder *encoder);
  516. /** Get relevant values about the nature of a verify decoder error.
  517.  *  Inherited from FLAC__seekable_stream_encoder_get_verify_decoder_error_stats().
  518.  *  Useful when the file encoder state is
  519.  *  c FLAC__FILE_ENCODER_SEEKABLE_STREAM_ENCODER_ERROR and the seekable stream
  520.  *  encoder state is
  521.  *  c FLAC__SEEKABLE_STREAM_ENCODER_STREAM_ENCODER_ERROR and the
  522.  *  stream encoder state is
  523.  *  c FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR.
  524.  *
  525.  * param  encoder  An encoder instance to query.
  526.  * param  absolute_sample  The absolute sample number of the mismatch.
  527.  * param  frame_number  The number of the frame in which the mismatch occurred.
  528.  * param  channel       The channel in which the mismatch occurred.
  529.  * param  sample        The number of the sample (relative to the frame) in
  530.  *                       which the mismatch occurred.
  531.  * param  expected      The expected value for the sample in question.
  532.  * param  got           The actual value returned by the decoder.
  533.  * assert
  534.  *    code encoder != NULL endcode
  535.  */
  536. FLAC_API void FLAC__file_encoder_get_verify_decoder_error_stats(const FLAC__FileEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got);
  537. /** Get the "verify" flag.
  538.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  539.  *  FLAC__seekable_stream_encoder_get_verify().
  540.  *
  541.  * param  encoder  An encoder instance to query.
  542.  * assert
  543.  *    code encoder != NULL endcode
  544.  * retval FLAC__bool
  545.  *    See FLAC__file_encoder_set_verify().
  546.  */
  547. FLAC_API FLAC__bool FLAC__file_encoder_get_verify(const FLAC__FileEncoder *encoder);
  548. /** Get the "streamable subset" flag.
  549.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  550.  *  FLAC__seekable_stream_encoder_get_streamable_subset().
  551.  *
  552.  * param  encoder  An encoder instance to query.
  553.  * assert
  554.  *    code encoder != NULL endcode
  555.  * retval FLAC__bool
  556.  *    See FLAC__file_encoder_set_streamable_subset().
  557.  */
  558. FLAC_API FLAC__bool FLAC__file_encoder_get_streamable_subset(const FLAC__FileEncoder *encoder);
  559. /** Get the "mid/side stereo coding" flag.
  560.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  561.  *  FLAC__seekable_stream_encoder_get_do_mid_side_stereo().
  562.  *
  563.  * param  encoder  An encoder instance to query.
  564.  * assert
  565.  *    code encoder != NULL endcode
  566.  * retval FLAC__bool
  567.  *    See FLAC__file_encoder_get_do_mid_side_stereo().
  568.  */
  569. FLAC_API FLAC__bool FLAC__file_encoder_get_do_mid_side_stereo(const FLAC__FileEncoder *encoder);
  570. /** Get the "adaptive mid/side switching" flag.
  571.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  572.  *  FLAC__seekable_stream_encoder_get_loose_mid_side_stereo().
  573.  *
  574.  * param  encoder  An encoder instance to query.
  575.  * assert
  576.  *    code encoder != NULL endcode
  577.  * retval FLAC__bool
  578.  *    See FLAC__file_encoder_set_loose_mid_side_stereo().
  579.  */
  580. FLAC_API FLAC__bool FLAC__file_encoder_get_loose_mid_side_stereo(const FLAC__FileEncoder *encoder);
  581. /** Get the number of input channels being processed.
  582.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  583.  *  FLAC__seekable_stream_encoder_get_channels().
  584.  *
  585.  * param  encoder  An encoder instance to query.
  586.  * assert
  587.  *    code encoder != NULL endcode
  588.  * retval unsigned
  589.  *    See FLAC__file_encoder_set_channels().
  590.  */
  591. FLAC_API unsigned FLAC__file_encoder_get_channels(const FLAC__FileEncoder *encoder);
  592. /** Get the input sample resolution setting.
  593.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  594.  *  FLAC__seekable_stream_encoder_get_bits_per_sample().
  595.  *
  596.  * param  encoder  An encoder instance to query.
  597.  * assert
  598.  *    code encoder != NULL endcode
  599.  * retval unsigned
  600.  *    See FLAC__file_encoder_set_bits_per_sample().
  601.  */
  602. FLAC_API unsigned FLAC__file_encoder_get_bits_per_sample(const FLAC__FileEncoder *encoder);
  603. /** Get the input sample rate setting.
  604.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  605.  *  FLAC__seekable_stream_encoder_get_sample_rate().
  606.  *
  607.  * param  encoder  An encoder instance to query.
  608.  * assert
  609.  *    code encoder != NULL endcode
  610.  * retval unsigned
  611.  *    See FLAC__file_encoder_set_sample_rate().
  612.  */
  613. FLAC_API unsigned FLAC__file_encoder_get_sample_rate(const FLAC__FileEncoder *encoder);
  614. /** Get the blocksize setting.
  615.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  616.  *  FLAC__seekable_stream_encoder_get_blocksize().
  617.  *
  618.  * param  encoder  An encoder instance to query.
  619.  * assert
  620.  *    code encoder != NULL endcode
  621.  * retval unsigned
  622.  *    See FLAC__file_encoder_set_blocksize().
  623.  */
  624. FLAC_API unsigned FLAC__file_encoder_get_blocksize(const FLAC__FileEncoder *encoder);
  625. /** Get the maximum LPC order setting.
  626.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  627.  *  FLAC__seekable_stream_encoder_get_max_lpc_order().
  628.  *
  629.  * param  encoder  An encoder instance to query.
  630.  * assert
  631.  *    code encoder != NULL endcode
  632.  * retval unsigned
  633.  *    See FLAC__file_encoder_set_max_lpc_order().
  634.  */
  635. FLAC_API unsigned FLAC__file_encoder_get_max_lpc_order(const FLAC__FileEncoder *encoder);
  636. /** Get the quantized linear predictor coefficient precision setting.
  637.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  638.  *  FLAC__seekable_stream_encoder_get_qlp_coeff_precision().
  639.  *
  640.  * param  encoder  An encoder instance to query.
  641.  * assert
  642.  *    code encoder != NULL endcode
  643.  * retval unsigned
  644.  *    See FLAC__file_encoder_set_qlp_coeff_precision().
  645.  */
  646. FLAC_API unsigned FLAC__file_encoder_get_qlp_coeff_precision(const FLAC__FileEncoder *encoder);
  647. /** Get the qlp coefficient precision search flag.
  648.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  649.  *  FLAC__seekable_stream_encoder_get_do_qlp_coeff_prec_search().
  650.  *
  651.  * param  encoder  An encoder instance to query.
  652.  * assert
  653.  *    code encoder != NULL endcode
  654.  * retval FLAC__bool
  655.  *    See FLAC__file_encoder_set_do_qlp_coeff_prec_search().
  656.  */
  657. FLAC_API FLAC__bool FLAC__file_encoder_get_do_qlp_coeff_prec_search(const FLAC__FileEncoder *encoder);
  658. /** Get the "escape coding" flag.
  659.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  660.  *  FLAC__seekable_stream_encoder_get_do_escape_coding().
  661.  *
  662.  * param  encoder  An encoder instance to query.
  663.  * assert
  664.  *    code encoder != NULL endcode
  665.  * retval FLAC__bool
  666.  *    See FLAC__file_encoder_set_do_escape_coding().
  667.  */
  668. FLAC_API FLAC__bool FLAC__file_encoder_get_do_escape_coding(const FLAC__FileEncoder *encoder);
  669. /** Get the exhaustive model search flag.
  670.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  671.  *  FLAC__seekable_stream_encoder_get_do_exhaustive_model_search().
  672.  *
  673.  * param  encoder  An encoder instance to query.
  674.  * assert
  675.  *    code encoder != NULL endcode
  676.  * retval FLAC__bool
  677.  *    See FLAC__file_encoder_set_do_exhaustive_model_search().
  678.  */
  679. FLAC_API FLAC__bool FLAC__file_encoder_get_do_exhaustive_model_search(const FLAC__FileEncoder *encoder);
  680. /** Get the minimum residual partition order setting.
  681.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  682.  *  FLAC__seekable_stream_encoder_get_min_residual_partition_order().
  683.  *
  684.  * param  encoder  An encoder instance to query.
  685.  * assert
  686.  *    code encoder != NULL endcode
  687.  * retval unsigned
  688.  *    See FLAC__file_encoder_set_min_residual_partition_order().
  689.  */
  690. FLAC_API unsigned FLAC__file_encoder_get_min_residual_partition_order(const FLAC__FileEncoder *encoder);
  691. /** Get maximum residual partition order setting.
  692.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  693.  *  FLAC__seekable_stream_encoder_get_max_residual_partition_order().
  694.  *
  695.  * param  encoder  An encoder instance to query.
  696.  * assert
  697.  *    code encoder != NULL endcode
  698.  * retval unsigned
  699.  *    See FLAC__file_encoder_set_max_residual_partition_order().
  700.  */
  701. FLAC_API unsigned FLAC__file_encoder_get_max_residual_partition_order(const FLAC__FileEncoder *encoder);
  702. /** Get the Rice parameter search distance setting.
  703.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  704.  *  FLAC__seekable_stream_encoder_get_rice_parameter_search_dist().
  705.  *
  706.  * param  encoder  An encoder instance to query.
  707.  * assert
  708.  *    code encoder != NULL endcode
  709.  * retval unsigned
  710.  *    See FLAC__file_encoder_set_rice_parameter_search_dist().
  711.  */
  712. FLAC_API unsigned FLAC__file_encoder_get_rice_parameter_search_dist(const FLAC__FileEncoder *encoder);
  713. /** Get the previously set estimate of the total samples to be encoded.
  714.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  715.  *  FLAC__seekable_stream_encoder_get_total_samples_estimate().
  716.  *
  717.  * param  encoder  An encoder instance to query.
  718.  * assert
  719.  *    code encoder != NULL endcode
  720.  * retval FLAC__uint64
  721.  *    See FLAC__file_encoder_set_total_samples_estimate().
  722.  */
  723. FLAC_API FLAC__uint64 FLAC__file_encoder_get_total_samples_estimate(const FLAC__FileEncoder *encoder);
  724. /** Initialize the encoder instance.
  725.  *  Should be called after FLAC__file_encoder_new() and
  726.  *  FLAC__file_encoder_set_*() but before FLAC__file_encoder_process()
  727.  *  or FLAC__file_encoder_process_interleaved().  Will set and return
  728.  *  the encoder state, which will be FLAC__FILE_ENCODER_OK if
  729.  *  initialization succeeded.
  730.  *
  731.  * param  encoder  An uninitialized encoder instance.
  732.  * assert
  733.  *    code encoder != NULL endcode
  734.  * retval FLAC__FileEncoderState
  735.  *    c FLAC__FILE_ENCODER_OK if initialization was successful; see
  736.  *    FLAC__FileEncoderState for the meanings of other return values.
  737.  */
  738. FLAC_API FLAC__FileEncoderState FLAC__file_encoder_init(FLAC__FileEncoder *encoder);
  739. /** Finish the encoding process.
  740.  *  Flushes the encoding buffer, releases resources, resets the encoder
  741.  *  settings to their defaults, and returns the encoder state to
  742.  *  FLAC__FILE_ENCODER_UNINITIALIZED.
  743.  *
  744.  *  In the event of a prematurely-terminated encode, it is not strictly
  745.  *  necessary to call this immediately before FLAC__file_encoder_delete()
  746.  *  but it is good practice to match every FLAC__file_encoder_init()
  747.  *  with a FLAC__file_encoder_finish().
  748.  *
  749.  * param  encoder  An uninitialized encoder instance.
  750.  * assert
  751.  *    code encoder != NULL endcode
  752.  */
  753. FLAC_API void FLAC__file_encoder_finish(FLAC__FileEncoder *encoder);
  754. /** Submit data for encoding.
  755.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  756.  *  FLAC__seekable_stream_encoder_process().
  757.  *
  758.  * param  encoder  An initialized encoder instance in the OK state.
  759.  * param  buffer   An array of pointers to each channel's signal.
  760.  * param  samples  The number of samples in one channel.
  761.  * assert
  762.  *    code encoder != NULL endcode
  763.  *    code FLAC__file_encoder_get_state(encoder) == FLAC__FILE_ENCODER_OK endcode
  764.  * retval FLAC__bool
  765.  *    c true if successful, else c false; in this case, check the
  766.  *    encoder state with FLAC__file_encoder_get_state() to see what
  767.  *    went wrong.
  768.  */
  769. FLAC_API FLAC__bool FLAC__file_encoder_process(FLAC__FileEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
  770. /** Submit data for encoding.
  771.  *  This is inherited from FLAC__SeekableStreamEncoder; see
  772.  *  FLAC__seekable_stream_encoder_process_interleaved().
  773.  *
  774.  * param  encoder  An initialized encoder instance in the OK state.
  775.  * param  buffer   An array of channel-interleaved data (see above).
  776.  * param  samples  The number of samples in one channel, the same as for
  777.  *                  FLAC__file_encoder_process().  For example, if
  778.  *                  encoding two channels, c 1000 a samples corresponds
  779.  *                  to a a buffer of 2000 values.
  780.  * assert
  781.  *    code encoder != NULL endcode
  782.  *    code FLAC__file_encoder_get_state(encoder) == FLAC__FILE_ENCODER_OK endcode
  783.  * retval FLAC__bool
  784.  *    c true if successful, else c false; in this case, check the
  785.  *    encoder state with FLAC__file_encoder_get_state() to see what
  786.  *    went wrong.
  787.  */
  788. FLAC_API FLAC__bool FLAC__file_encoder_process_interleaved(FLAC__FileEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
  789. /* } */
  790. #ifdef __cplusplus
  791. }
  792. #endif
  793. #endif