00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #ifndef FLAC__STREAM_ENCODER_H
00034 #define FLAC__STREAM_ENCODER_H
00035
00036 #include <stdio.h>
00037 #include "export.h"
00038 #include "format.h"
00039 #include "stream_decoder.h"
00040
00041 #ifdef __cplusplus
00042 extern "C" {
00043 #endif
00044
00045
00241 typedef enum {
00242
00243 FLAC__STREAM_ENCODER_OK = 0,
00246 FLAC__STREAM_ENCODER_UNINITIALIZED,
00252 FLAC__STREAM_ENCODER_OGG_ERROR,
00255 FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
00260 FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
00265 FLAC__STREAM_ENCODER_CLIENT_ERROR,
00268 FLAC__STREAM_ENCODER_IO_ERROR,
00273 FLAC__STREAM_ENCODER_FRAMING_ERROR,
00278 FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR
00281 } FLAC__StreamEncoderState;
00282
00288 extern FLAC_API const char * const FLAC__StreamEncoderStateString[];
00289
00290
00293 typedef enum {
00294
00295 FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0,
00298 FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR,
00301 FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
00306 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS,
00309 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS,
00312 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE,
00318 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE,
00321 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE,
00324 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER,
00327 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION,
00330 FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER,
00333 FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE,
00336 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA,
00345 FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED
00351 } FLAC__StreamEncoderInitStatus;
00352
00358 extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[];
00359
00360
00363 typedef enum {
00364
00365 FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE,
00368 FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM,
00371 FLAC__STREAM_ENCODER_READ_STATUS_ABORT,
00374 FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED
00377 } FLAC__StreamEncoderReadStatus;
00378
00384 extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[];
00385
00386
00389 typedef enum {
00390
00391 FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0,
00394 FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
00397 } FLAC__StreamEncoderWriteStatus;
00398
00404 extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[];
00405
00406
00409 typedef enum {
00410
00411 FLAC__STREAM_ENCODER_SEEK_STATUS_OK,
00414 FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR,
00417 FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
00420 } FLAC__StreamEncoderSeekStatus;
00421
00427 extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[];
00428
00429
00432 typedef enum {
00433
00434 FLAC__STREAM_ENCODER_TELL_STATUS_OK,
00437 FLAC__STREAM_ENCODER_TELL_STATUS_ERROR,
00440 FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
00443 } FLAC__StreamEncoderTellStatus;
00444
00450 extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[];
00451
00452
00453
00454
00455
00456
00457
00458
00459 struct FLAC__StreamEncoderProtected;
00460 struct FLAC__StreamEncoderPrivate;
00465 typedef struct {
00466 struct FLAC__StreamEncoderProtected *protected_;
00467 struct FLAC__StreamEncoderPrivate *private_;
00468 } FLAC__StreamEncoder;
00469
00519 typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
00520
00557 typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data);
00558
00591 typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data);
00592
00636 typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
00637
00655 typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data);
00656
00678 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);
00679
00680
00681
00682
00683
00684
00685
00686
00694 FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new(void);
00695
00702 FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder);
00703
00704
00705
00706
00707
00708
00709
00710
00728 FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number);
00729
00744 FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value);
00745
00762 FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value);
00763
00774 FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value);
00775
00790 FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value);
00791
00802 FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value);
00803
00865 FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value);
00866
00880 FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value);
00881
00894 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
00895
00910 FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
00911
00976 FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification);
00977
00988 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value);
00989
01006 FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value);
01007
01020 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
01021
01032 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value);
01033
01046 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
01047
01069 FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01070
01092 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01093
01104 FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value);
01105
01120 FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value);
01121
01203 FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
01204
01213 FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder);
01214
01225 FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder);
01226
01238 FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder);
01239
01257 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);
01258
01267 FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder);
01268
01277 FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder);
01278
01287 FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder);
01288
01297 FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder);
01298
01307 FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder);
01308
01317 FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder);
01318
01327 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01328
01337 FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01338
01347 FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder);
01348
01357 FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder);
01358
01367 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder);
01368
01377 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder);
01378
01387 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder);
01388
01397 FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder);
01398
01407 FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder);
01408
01417 FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder);
01418
01430 FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
01431
01493 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);
01494
01561 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);
01562
01596 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01597
01631 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01632
01663 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01664
01695 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01696
01723 FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder);
01724
01750 FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
01751
01782 FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
01783
01784
01785
01786 #ifdef __cplusplus
01787 }
01788 #endif
01789
01790 #endif