cannam@86: cannam@86: cannam@86: FLAC: include/FLAC/stream_encoder.h Source File cannam@86: cannam@86: cannam@86: cannam@86:
Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members
cannam@86: cannam@86:

stream_encoder.h

Go to the documentation of this file.
00001 /* libFLAC - Free Lossless Audio Codec library
cannam@86: 00002  * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
cannam@86: 00003  *
cannam@86: 00004  * Redistribution and use in source and binary forms, with or without
cannam@86: 00005  * modification, are permitted provided that the following conditions
cannam@86: 00006  * are met:
cannam@86: 00007  *
cannam@86: 00008  * - Redistributions of source code must retain the above copyright
cannam@86: 00009  * notice, this list of conditions and the following disclaimer.
cannam@86: 00010  *
cannam@86: 00011  * - Redistributions in binary form must reproduce the above copyright
cannam@86: 00012  * notice, this list of conditions and the following disclaimer in the
cannam@86: 00013  * documentation and/or other materials provided with the distribution.
cannam@86: 00014  *
cannam@86: 00015  * - Neither the name of the Xiph.org Foundation nor the names of its
cannam@86: 00016  * contributors may be used to endorse or promote products derived from
cannam@86: 00017  * this software without specific prior written permission.
cannam@86: 00018  *
cannam@86: 00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
cannam@86: 00020  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
cannam@86: 00021  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
cannam@86: 00022  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
cannam@86: 00023  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
cannam@86: 00024  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
cannam@86: 00025  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
cannam@86: 00026  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
cannam@86: 00027  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
cannam@86: 00028  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
cannam@86: 00029  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cannam@86: 00030  */
cannam@86: 00031 
cannam@86: 00032 #ifndef FLAC__STREAM_ENCODER_H
cannam@86: 00033 #define FLAC__STREAM_ENCODER_H
cannam@86: 00034 
cannam@86: 00035 #include <stdio.h> /* for FILE */
cannam@86: 00036 #include "export.h"
cannam@86: 00037 #include "format.h"
cannam@86: 00038 #include "stream_decoder.h"
cannam@86: 00039 
cannam@86: 00040 #ifdef __cplusplus
cannam@86: 00041 extern "C" {
cannam@86: 00042 #endif
cannam@86: 00043 
cannam@86: 00044 
cannam@86: 00240 typedef enum {
cannam@86: 00241 
cannam@86: 00242     FLAC__STREAM_ENCODER_OK = 0,
cannam@86: 00245     FLAC__STREAM_ENCODER_UNINITIALIZED,
cannam@86: 00251     FLAC__STREAM_ENCODER_OGG_ERROR,
cannam@86: 00254     FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
cannam@86: 00259     FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
cannam@86: 00264     FLAC__STREAM_ENCODER_CLIENT_ERROR,
cannam@86: 00267     FLAC__STREAM_ENCODER_IO_ERROR,
cannam@86: 00272     FLAC__STREAM_ENCODER_FRAMING_ERROR,
cannam@86: 00277     FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR
cannam@86: 00280 } FLAC__StreamEncoderState;
cannam@86: 00281 
cannam@86: 00287 extern FLAC_API const char * const FLAC__StreamEncoderStateString[];
cannam@86: 00288 
cannam@86: 00289 
cannam@86: 00292 typedef enum {
cannam@86: 00293 
cannam@86: 00294     FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0,
cannam@86: 00297     FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR,
cannam@86: 00300     FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
cannam@86: 00305     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS,
cannam@86: 00308     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS,
cannam@86: 00311     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE,
cannam@86: 00317     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE,
cannam@86: 00320     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE,
cannam@86: 00323     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER,
cannam@86: 00326     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION,
cannam@86: 00329     FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER,
cannam@86: 00332     FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE,
cannam@86: 00335     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA,
cannam@86: 00344     FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED
cannam@86: 00350 } FLAC__StreamEncoderInitStatus;
cannam@86: 00351 
cannam@86: 00357 extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[];
cannam@86: 00358 
cannam@86: 00359 
cannam@86: 00362 typedef enum {
cannam@86: 00363 
cannam@86: 00364     FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE,
cannam@86: 00367     FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM,
cannam@86: 00370     FLAC__STREAM_ENCODER_READ_STATUS_ABORT,
cannam@86: 00373     FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED
cannam@86: 00376 } FLAC__StreamEncoderReadStatus;
cannam@86: 00377 
cannam@86: 00383 extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[];
cannam@86: 00384 
cannam@86: 00385 
cannam@86: 00388 typedef enum {
cannam@86: 00389 
cannam@86: 00390     FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0,
cannam@86: 00393     FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
cannam@86: 00396 } FLAC__StreamEncoderWriteStatus;
cannam@86: 00397 
cannam@86: 00403 extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[];
cannam@86: 00404 
cannam@86: 00405 
cannam@86: 00408 typedef enum {
cannam@86: 00409 
cannam@86: 00410     FLAC__STREAM_ENCODER_SEEK_STATUS_OK,
cannam@86: 00413     FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR,
cannam@86: 00416     FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
cannam@86: 00419 } FLAC__StreamEncoderSeekStatus;
cannam@86: 00420 
cannam@86: 00426 extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[];
cannam@86: 00427 
cannam@86: 00428 
cannam@86: 00431 typedef enum {
cannam@86: 00432 
cannam@86: 00433     FLAC__STREAM_ENCODER_TELL_STATUS_OK,
cannam@86: 00436     FLAC__STREAM_ENCODER_TELL_STATUS_ERROR,
cannam@86: 00439     FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
cannam@86: 00442 } FLAC__StreamEncoderTellStatus;
cannam@86: 00443 
cannam@86: 00449 extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[];
cannam@86: 00450 
cannam@86: 00451 
cannam@86: 00452 /***********************************************************************
cannam@86: 00453  *
cannam@86: 00454  * class FLAC__StreamEncoder
cannam@86: 00455  *
cannam@86: 00456  ***********************************************************************/
cannam@86: 00457 
cannam@86: 00458 struct FLAC__StreamEncoderProtected;
cannam@86: 00459 struct FLAC__StreamEncoderPrivate;
cannam@86: 00464 typedef struct {
cannam@86: 00465     struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
cannam@86: 00466     struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
cannam@86: 00467 } FLAC__StreamEncoder;
cannam@86: 00468 
cannam@86: 00518 typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
cannam@86: 00519 
cannam@86: 00556 typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data);
cannam@86: 00557 
cannam@86: 00590 typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data);
cannam@86: 00591 
cannam@86: 00635 typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
cannam@86: 00636 
cannam@86: 00654 typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data);
cannam@86: 00655 
cannam@86: 00677 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);
cannam@86: 00678 
cannam@86: 00679 
cannam@86: 00680 /***********************************************************************
cannam@86: 00681  *
cannam@86: 00682  * Class constructor/destructor
cannam@86: 00683  *
cannam@86: 00684  ***********************************************************************/
cannam@86: 00685 
cannam@86: 00693 FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void);
cannam@86: 00694 
cannam@86: 00701 FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder);
cannam@86: 00702 
cannam@86: 00703 
cannam@86: 00704 /***********************************************************************
cannam@86: 00705  *
cannam@86: 00706  * Public class method prototypes
cannam@86: 00707  *
cannam@86: 00708  ***********************************************************************/
cannam@86: 00709 
cannam@86: 00727 FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number);
cannam@86: 00728 
cannam@86: 00743 FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value);
cannam@86: 00744 
cannam@86: 00761 FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value);
cannam@86: 00762 
cannam@86: 00773 FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 00774 
cannam@86: 00789 FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 00790 
cannam@86: 00801 FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 00802 
cannam@86: 00864 FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 00865 
cannam@86: 00879 FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 00880 
cannam@86: 00893 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
cannam@86: 00894 
cannam@86: 00909 FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
cannam@86: 00910 
cannam@86: 00954 FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification);
cannam@86: 00955 
cannam@86: 00966 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 00967 
cannam@86: 00984 FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 00985 
cannam@86: 00998 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
cannam@86: 00999 
cannam@86: 01010 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value);
cannam@86: 01011 
cannam@86: 01024 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
cannam@86: 01025 
cannam@86: 01047 FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 01048 
cannam@86: 01070 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 01071 
cannam@86: 01082 FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value);
cannam@86: 01083 
cannam@86: 01098 FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value);
cannam@86: 01099 
cannam@86: 01181 FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
cannam@86: 01182 
cannam@86: 01191 FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder);
cannam@86: 01192 
cannam@86: 01203 FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder);
cannam@86: 01204 
cannam@86: 01216 FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder);
cannam@86: 01217 
cannam@86: 01235 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);
cannam@86: 01236 
cannam@86: 01245 FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder);
cannam@86: 01246 
cannam@86: 01255 FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder);
cannam@86: 01256 
cannam@86: 01265 FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder);
cannam@86: 01266 
cannam@86: 01275 FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder);
cannam@86: 01276 
cannam@86: 01285 FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder);
cannam@86: 01286 
cannam@86: 01295 FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder);
cannam@86: 01296 
cannam@86: 01305 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder);
cannam@86: 01306 
cannam@86: 01315 FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder);
cannam@86: 01316 
cannam@86: 01325 FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder);
cannam@86: 01326 
cannam@86: 01335 FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder);
cannam@86: 01336 
cannam@86: 01345 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder);
cannam@86: 01346 
cannam@86: 01355 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder);
cannam@86: 01356 
cannam@86: 01365 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder);
cannam@86: 01366 
cannam@86: 01375 FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder);
cannam@86: 01376 
cannam@86: 01385 FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder);
cannam@86: 01386 
cannam@86: 01395 FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder);
cannam@86: 01396 
cannam@86: 01408 FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
cannam@86: 01409 
cannam@86: 01471 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);
cannam@86: 01472 
cannam@86: 01539 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);
cannam@86: 01540 
cannam@86: 01574 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
cannam@86: 01575 
cannam@86: 01609 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
cannam@86: 01610 
cannam@86: 01641 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
cannam@86: 01642 
cannam@86: 01673 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
cannam@86: 01674 
cannam@86: 01701 FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder);
cannam@86: 01702 
cannam@86: 01728 FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
cannam@86: 01729 
cannam@86: 01760 FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
cannam@86: 01761 
cannam@86: 01762 /* \} */
cannam@86: 01763 
cannam@86: 01764 #ifdef __cplusplus
cannam@86: 01765 }
cannam@86: 01766 #endif
cannam@86: 01767 
cannam@86: 01768 #endif
cannam@86: 
cannam@86:
cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: