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,2007  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 
00240 typedef enum {
00241 
00242     FLAC__STREAM_ENCODER_OK = 0,
00245     FLAC__STREAM_ENCODER_UNINITIALIZED,
00251     FLAC__STREAM_ENCODER_OGG_ERROR,
00254     FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
00259     FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
00264     FLAC__STREAM_ENCODER_CLIENT_ERROR,
00267     FLAC__STREAM_ENCODER_IO_ERROR,
00272     FLAC__STREAM_ENCODER_FRAMING_ERROR,
00277     FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR
00280 } FLAC__StreamEncoderState;
00281 
00287 extern FLAC_API const char * const FLAC__StreamEncoderStateString[];
00288 
00289 
00292 typedef enum {
00293 
00294     FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0,
00297     FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR,
00300     FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
00305     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS,
00308     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS,
00311     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE,
00317     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE,
00320     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE,
00323     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER,
00326     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION,
00329     FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER,
00332     FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE,
00335     FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA,
00344     FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED
00350 } FLAC__StreamEncoderInitStatus;
00351 
00357 extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[];
00358 
00359 
00362 typedef enum {
00363 
00364     FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE,
00367     FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM,
00370     FLAC__STREAM_ENCODER_READ_STATUS_ABORT,
00373     FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED
00376 } FLAC__StreamEncoderReadStatus;
00377 
00383 extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[];
00384 
00385 
00388 typedef enum {
00389 
00390     FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0,
00393     FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
00396 } FLAC__StreamEncoderWriteStatus;
00397 
00403 extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[];
00404 
00405 
00408 typedef enum {
00409 
00410     FLAC__STREAM_ENCODER_SEEK_STATUS_OK,
00413     FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR,
00416     FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
00419 } FLAC__StreamEncoderSeekStatus;
00420 
00426 extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[];
00427 
00428 
00431 typedef enum {
00432 
00433     FLAC__STREAM_ENCODER_TELL_STATUS_OK,
00436     FLAC__STREAM_ENCODER_TELL_STATUS_ERROR,
00439     FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
00442 } FLAC__StreamEncoderTellStatus;
00443 
00449 extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[];
00450 
00451 
00452 /***********************************************************************
00453  *
00454  * class FLAC__StreamEncoder
00455  *
00456  ***********************************************************************/
00457 
00458 struct FLAC__StreamEncoderProtected;
00459 struct FLAC__StreamEncoderPrivate;
00464 typedef struct {
00465     struct FLAC__StreamEncoderProtected *protected_; /* avoid the C++ keyword 'protected' */
00466     struct FLAC__StreamEncoderPrivate *private_; /* avoid the C++ keyword 'private' */
00467 } FLAC__StreamEncoder;
00468 
00518 typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
00519 
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);
00557 
00590 typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data);
00591 
00635 typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
00636 
00654 typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data);
00655 
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);
00678 
00679 
00680 /***********************************************************************
00681  *
00682  * Class constructor/destructor
00683  *
00684  ***********************************************************************/
00685 
00693 FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void);
00694 
00701 FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder);
00702 
00703 
00704 /***********************************************************************
00705  *
00706  * Public class method prototypes
00707  *
00708  ***********************************************************************/
00709 
00727 FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number);
00728 
00743 FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value);
00744 
00761 FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value);
00762 
00773 FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value);
00774 
00789 FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value);
00790 
00801 FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value);
00802 
00864 FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value);
00865 
00879 FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value);
00880 
00893 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
00894 
00909 FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
00910 
00954 FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification);
00955 
00966 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value);
00967 
00984 FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value);
00985 
00998 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
00999 
01010 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value);
01011 
01024 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
01025 
01047 FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01048 
01070 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01071 
01082 FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value);
01083 
01098 FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value);
01099 
01181 FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
01182 
01191 FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder);
01192 
01203 FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder);
01204 
01216 FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder);
01217 
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);
01236 
01245 FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder);
01246 
01255 FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder);
01256 
01265 FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder);
01266 
01275 FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder);
01276 
01285 FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder);
01286 
01295 FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder);
01296 
01305 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01306 
01315 FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01316 
01325 FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder);
01326 
01335 FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder);
01336 
01345 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder);
01346 
01355 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder);
01356 
01365 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder);
01366 
01375 FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder);
01376 
01385 FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder);
01386 
01395 FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder);
01396 
01408 FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
01409 
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);
01472 
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);
01540 
01574 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01575 
01609 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01610 
01641 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01642 
01673 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01674 
01701 FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder);
01702 
01728 FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
01729 
01760 FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
01761 
01762 /* \} */
01763 
01764 #ifdef __cplusplus
01765 }
01766 #endif
01767 
01768 #endif