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 #ifndef FLAC__STREAM_ENCODER_H
00033 #define FLAC__STREAM_ENCODER_H
00034
00035 #include <stdio.h>
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
00455
00456
00457
00458 struct FLAC__StreamEncoderProtected;
00459 struct FLAC__StreamEncoderPrivate;
00464 typedef struct {
00465 struct FLAC__StreamEncoderProtected *protected_;
00466 struct FLAC__StreamEncoderPrivate *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
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
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
00911
00955 FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification);
00956
00967 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value);
00968
00985 FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value);
00986
00999 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
01000
01011 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value);
01012
01025 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
01026
01048 FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01049
01071 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01072
01083 FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value);
01084
01099 FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value);
01100
01182 FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
01183
01192 FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder);
01193
01204 FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder);
01205
01217 FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder);
01218
01236 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);
01237
01246 FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder);
01247
01256 FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder);
01257
01266 FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder);
01267
01276 FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder);
01277
01286 FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder);
01287
01296 FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder);
01297
01306 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01307
01316 FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01317
01326 FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder);
01327
01336 FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder);
01337
01346 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder);
01347
01356 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder);
01357
01366 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder);
01367
01376 FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder);
01377
01386 FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder);
01387
01396 FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder);
01397
01409 FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
01410
01472 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);
01473
01540 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);
01541
01575 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01576
01610 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01611
01642 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01643
01674 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01675
01702 FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder);
01703
01729 FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
01730
01761 FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
01762
01763
01764
01765 #ifdef __cplusplus
01766 }
01767 #endif
01768
01769 #endif