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

stream_encoder.h

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