Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

stream_encoder.h

Go to the documentation of this file.
00001 /* libFLAC - Free Lossless Audio Codec library
00002  * Copyright (C) 2000,2001,2002,2003,2004,2005,2006 Josh Coalson
00003  *
00004  * Redistribution and use in source and binary forms, with or without
00005  * modification, are permitted provided that the following conditions
00006  * are met:
00007  *
00008  * - Redistributions of source code must retain the above copyright
00009  * notice, this list of conditions and the following disclaimer.
00010  *
00011  * - Redistributions in binary form must reproduce the above copyright
00012  * notice, this list of conditions and the following disclaimer in the
00013  * documentation and/or other materials provided with the distribution.
00014  *
00015  * - Neither the name of the Xiph.org Foundation nor the names of its
00016  * contributors may be used to endorse or promote products derived from
00017  * this software without specific prior written permission.
00018  *
00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00020  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00021  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00022  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
00023  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00024  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00025  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00026  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00027  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00028  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00029  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00030  */
00031 
00032 #ifndef FLAC__STREAM_ENCODER_H
00033 #define FLAC__STREAM_ENCODER_H
00034 
00035 #include <stdio.h> /* for FILE */
00036 #include "export.h"
00037 #include "format.h"
00038 #include "stream_decoder.h"
00039 
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043 
00044 
00235 typedef enum {
00236 
00237     FLAC__STREAM_ENCODER_OK = 0,
00240     FLAC__STREAM_ENCODER_UNINITIALIZED,
00246     FLAC__STREAM_ENCODER_OGG_ERROR,
00249     FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
00254     FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
00259     FLAC__STREAM_ENCODER_CLIENT_ERROR,
00262     FLAC__STREAM_ENCODER_IO_ERROR,
00267     FLAC__STREAM_ENCODER_FRAMING_ERROR,
00272     FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR
00275 } FLAC__StreamEncoderState;
00276 
00282 extern FLAC_API const char * const FLAC__StreamEncoderStateString[];
00283 
00284 
00287 typedef enum {
00288 
00289     FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0,
00292     FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR,
00295     FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
00300     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS,
00303     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS,
00306     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE,
00312     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE,
00315     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE,
00318     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER,
00321     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION,
00324     FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER,
00327     FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE,
00330     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA,
00339     FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED
00345 } FLAC__StreamEncoderInitStatus;
00346 
00352 extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[];
00353 
00354 
00357 typedef enum {
00358 
00359     FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE,
00362     FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM,
00365     FLAC__STREAM_ENCODER_READ_STATUS_ABORT,
00368     FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED
00371 } FLAC__StreamEncoderReadStatus;
00372 
00378 extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[];
00379 
00380 
00383 typedef enum {
00384 
00385     FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0,
00388     FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
00391 } FLAC__StreamEncoderWriteStatus;
00392 
00398 extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[];
00399 
00400 
00403 typedef enum {
00404 
00405     FLAC__STREAM_ENCODER_SEEK_STATUS_OK,
00408     FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR,
00411     FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
00414 } FLAC__StreamEncoderSeekStatus;
00415 
00421 extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[];
00422 
00423 
00426 typedef enum {
00427 
00428     FLAC__STREAM_ENCODER_TELL_STATUS_OK,
00431     FLAC__STREAM_ENCODER_TELL_STATUS_ERROR,
00434     FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
00437 } FLAC__StreamEncoderTellStatus;
00438 
00444 extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[];
00445 
00446 
00447 /***********************************************************************
00448  *
00449  * class FLAC__StreamEncoder
00450  *
00451  ***********************************************************************/
00452 
00453 struct FLAC__StreamEncoderProtected;
00454 struct FLAC__StreamEncoderPrivate;
00459 typedef struct {
00460     struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
00461     struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
00462 } FLAC__StreamEncoder;
00463 
00513 typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
00514 
00551 typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data);
00552 
00585 typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data);
00586 
00630 typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
00631 
00649 typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data);
00650 
00672 typedef void (*FLAC__StreamEncoderProgressCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 bytes_written, FLAC__uint64 samples_written, unsigned frames_written, unsigned total_frames_estimate, void *client_data);
00673 
00674 
00675 /***********************************************************************
00676  *
00677  * Class constructor/destructor
00678  *
00679  ***********************************************************************/
00680 
00688 FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new();
00689 
00696 FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder);
00697 
00698 
00699 /***********************************************************************
00700  *
00701  * Public class method prototypes
00702  *
00703  ***********************************************************************/
00704 
00722 FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number);
00723 
00738 FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value);
00739 
00756 FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value);
00757 
00768 FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value);
00769 
00784 FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value);
00785 
00796 FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value);
00797 
00859 FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value);
00860 
00874 FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value);
00875 
00888 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
00889 
00904 FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
00905 
00906 /* @@@@add to unit tests*/
00950 FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification);
00951 
00962 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value);
00963 
00980 FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value);
00981 
00994 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
00995 
01006 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value);
01007 
01020 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
01021 
01043 FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01044 
01066 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01067 
01078 FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value);
01079 
01094 FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value);
01095 
01177 FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
01178 
01187 FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder);
01188 
01199 FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder);
01200 
01212 FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder);
01213 
01231 FLAC_API void FLAC__stream_encoder_get_verify_decoder_error_stats(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_sample, unsigned *frame_number, unsigned *channel, unsigned *sample, FLAC__int32 *expected, FLAC__int32 *got);
01232 
01241 FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder);
01242 
01251 FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder);
01252 
01261 FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder);
01262 
01271 FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder);
01272 
01281 FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder);
01282 
01291 FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder);
01292 
01301 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01302 
01311 FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01312 
01321 FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder);
01322 
01331 FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder);
01332 
01341 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder);
01342 
01351 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder);
01352 
01361 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder);
01362 
01371 FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder);
01372 
01381 FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder);
01382 
01391 FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder);
01392 
01404 FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
01405 
01467 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_stream(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderWriteCallback write_callback, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderTellCallback tell_callback, FLAC__StreamEncoderMetadataCallback metadata_callback, void *client_data);
01468 
01535 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_stream(FLAC__StreamEncoder *encoder, FLAC__StreamEncoderReadCallback read_callback, FLAC__StreamEncoderWriteCallback write_callback, FLAC__StreamEncoderSeekCallback seek_callback, FLAC__StreamEncoderTellCallback tell_callback, FLAC__StreamEncoderMetadataCallback metadata_callback, void *client_data);
01536 
01570 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01571 
01605 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01606 
01637 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01638 
01669 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01670 
01697 FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder);
01698 
01720 FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
01721 
01748 FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
01749 
01750 /* \} */
01751 
01752 #ifdef __cplusplus
01753 }
01754 #endif
01755 
01756 #endif