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
00235 typedef enum {
00236
00237 FLAC__STREAM_ENCODER_OK = 0,
00240 FLAC__STREAM_ENCODER_UNINITIALIZED,
00246 FLAC__STREAM_ENCODER_OGG_ERROR,
00249 FLAC__STREAM_ENCODER_VERIFY_DECODER_ERROR,
00254 FLAC__STREAM_ENCODER_VERIFY_MISMATCH_IN_AUDIO_DATA,
00259 FLAC__STREAM_ENCODER_CLIENT_ERROR,
00262 FLAC__STREAM_ENCODER_IO_ERROR,
00267 FLAC__STREAM_ENCODER_FRAMING_ERROR,
00272 FLAC__STREAM_ENCODER_MEMORY_ALLOCATION_ERROR
00275 } FLAC__StreamEncoderState;
00276
00282 extern FLAC_API const char * const FLAC__StreamEncoderStateString[];
00283
00284
00287 typedef enum {
00288
00289 FLAC__STREAM_ENCODER_INIT_STATUS_OK = 0,
00292 FLAC__STREAM_ENCODER_INIT_STATUS_ENCODER_ERROR,
00295 FLAC__STREAM_ENCODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
00300 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_CALLBACKS,
00303 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_NUMBER_OF_CHANNELS,
00306 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BITS_PER_SAMPLE,
00312 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_SAMPLE_RATE,
00315 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_BLOCK_SIZE,
00318 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_MAX_LPC_ORDER,
00321 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_QLP_COEFF_PRECISION,
00324 FLAC__STREAM_ENCODER_INIT_STATUS_BLOCK_SIZE_TOO_SMALL_FOR_LPC_ORDER,
00327 FLAC__STREAM_ENCODER_INIT_STATUS_NOT_STREAMABLE,
00330 FLAC__STREAM_ENCODER_INIT_STATUS_INVALID_METADATA,
00339 FLAC__STREAM_ENCODER_INIT_STATUS_ALREADY_INITIALIZED
00345 } FLAC__StreamEncoderInitStatus;
00346
00352 extern FLAC_API const char * const FLAC__StreamEncoderInitStatusString[];
00353
00354
00357 typedef enum {
00358
00359 FLAC__STREAM_ENCODER_READ_STATUS_CONTINUE,
00362 FLAC__STREAM_ENCODER_READ_STATUS_END_OF_STREAM,
00365 FLAC__STREAM_ENCODER_READ_STATUS_ABORT,
00368 FLAC__STREAM_ENCODER_READ_STATUS_UNSUPPORTED
00371 } FLAC__StreamEncoderReadStatus;
00372
00378 extern FLAC_API const char * const FLAC__StreamEncoderReadStatusString[];
00379
00380
00383 typedef enum {
00384
00385 FLAC__STREAM_ENCODER_WRITE_STATUS_OK = 0,
00388 FLAC__STREAM_ENCODER_WRITE_STATUS_FATAL_ERROR
00391 } FLAC__StreamEncoderWriteStatus;
00392
00398 extern FLAC_API const char * const FLAC__StreamEncoderWriteStatusString[];
00399
00400
00403 typedef enum {
00404
00405 FLAC__STREAM_ENCODER_SEEK_STATUS_OK,
00408 FLAC__STREAM_ENCODER_SEEK_STATUS_ERROR,
00411 FLAC__STREAM_ENCODER_SEEK_STATUS_UNSUPPORTED
00414 } FLAC__StreamEncoderSeekStatus;
00415
00421 extern FLAC_API const char * const FLAC__StreamEncoderSeekStatusString[];
00422
00423
00426 typedef enum {
00427
00428 FLAC__STREAM_ENCODER_TELL_STATUS_OK,
00431 FLAC__STREAM_ENCODER_TELL_STATUS_ERROR,
00434 FLAC__STREAM_ENCODER_TELL_STATUS_UNSUPPORTED
00437 } FLAC__StreamEncoderTellStatus;
00438
00444 extern FLAC_API const char * const FLAC__StreamEncoderTellStatusString[];
00445
00446
00447
00448
00449
00450
00451
00452
00453 struct FLAC__StreamEncoderProtected;
00454 struct FLAC__StreamEncoderPrivate;
00459 typedef struct {
00460 struct FLAC__StreamEncoderProtected *protected_;
00461 struct FLAC__StreamEncoderPrivate *private_;
00462 } FLAC__StreamEncoder;
00463
00513 typedef FLAC__StreamEncoderReadStatus (*FLAC__StreamEncoderReadCallback)(const FLAC__StreamEncoder *encoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
00514
00551 typedef FLAC__StreamEncoderWriteStatus (*FLAC__StreamEncoderWriteCallback)(const FLAC__StreamEncoder *encoder, const FLAC__byte buffer[], size_t bytes, unsigned samples, unsigned current_frame, void *client_data);
00552
00585 typedef FLAC__StreamEncoderSeekStatus (*FLAC__StreamEncoderSeekCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 absolute_byte_offset, void *client_data);
00586
00630 typedef FLAC__StreamEncoderTellStatus (*FLAC__StreamEncoderTellCallback)(const FLAC__StreamEncoder *encoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
00631
00649 typedef void (*FLAC__StreamEncoderMetadataCallback)(const FLAC__StreamEncoder *encoder, const FLAC__StreamMetadata *metadata, void *client_data);
00650
00672 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);
00673
00674
00675
00676
00677
00678
00679
00680
00688 FLAC_API FLAC__StreamEncoder *FLAC__stream_encoder_new();
00689
00696 FLAC_API void FLAC__stream_encoder_delete(FLAC__StreamEncoder *encoder);
00697
00698
00699
00700
00701
00702
00703
00704
00722 FLAC_API FLAC__bool FLAC__stream_encoder_set_ogg_serial_number(FLAC__StreamEncoder *encoder, long serial_number);
00723
00738 FLAC_API FLAC__bool FLAC__stream_encoder_set_verify(FLAC__StreamEncoder *encoder, FLAC__bool value);
00739
00756 FLAC_API FLAC__bool FLAC__stream_encoder_set_streamable_subset(FLAC__StreamEncoder *encoder, FLAC__bool value);
00757
00768 FLAC_API FLAC__bool FLAC__stream_encoder_set_channels(FLAC__StreamEncoder *encoder, unsigned value);
00769
00784 FLAC_API FLAC__bool FLAC__stream_encoder_set_bits_per_sample(FLAC__StreamEncoder *encoder, unsigned value);
00785
00796 FLAC_API FLAC__bool FLAC__stream_encoder_set_sample_rate(FLAC__StreamEncoder *encoder, unsigned value);
00797
00859 FLAC_API FLAC__bool FLAC__stream_encoder_set_compression_level(FLAC__StreamEncoder *encoder, unsigned value);
00860
00874 FLAC_API FLAC__bool FLAC__stream_encoder_set_blocksize(FLAC__StreamEncoder *encoder, unsigned value);
00875
00888 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
00889
00904 FLAC_API FLAC__bool FLAC__stream_encoder_set_loose_mid_side_stereo(FLAC__StreamEncoder *encoder, FLAC__bool value);
00905
00906
00950 FLAC_API FLAC__bool FLAC__stream_encoder_set_apodization(FLAC__StreamEncoder *encoder, const char *specification);
00951
00962 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_lpc_order(FLAC__StreamEncoder *encoder, unsigned value);
00963
00980 FLAC_API FLAC__bool FLAC__stream_encoder_set_qlp_coeff_precision(FLAC__StreamEncoder *encoder, unsigned value);
00981
00994 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_qlp_coeff_prec_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
00995
01006 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_escape_coding(FLAC__StreamEncoder *encoder, FLAC__bool value);
01007
01020 FLAC_API FLAC__bool FLAC__stream_encoder_set_do_exhaustive_model_search(FLAC__StreamEncoder *encoder, FLAC__bool value);
01021
01043 FLAC_API FLAC__bool FLAC__stream_encoder_set_min_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01044
01066 FLAC_API FLAC__bool FLAC__stream_encoder_set_max_residual_partition_order(FLAC__StreamEncoder *encoder, unsigned value);
01067
01078 FLAC_API FLAC__bool FLAC__stream_encoder_set_rice_parameter_search_dist(FLAC__StreamEncoder *encoder, unsigned value);
01079
01094 FLAC_API FLAC__bool FLAC__stream_encoder_set_total_samples_estimate(FLAC__StreamEncoder *encoder, FLAC__uint64 value);
01095
01177 FLAC_API FLAC__bool FLAC__stream_encoder_set_metadata(FLAC__StreamEncoder *encoder, FLAC__StreamMetadata **metadata, unsigned num_blocks);
01178
01187 FLAC_API FLAC__StreamEncoderState FLAC__stream_encoder_get_state(const FLAC__StreamEncoder *encoder);
01188
01199 FLAC_API FLAC__StreamDecoderState FLAC__stream_encoder_get_verify_decoder_state(const FLAC__StreamEncoder *encoder);
01200
01212 FLAC_API const char *FLAC__stream_encoder_get_resolved_state_string(const FLAC__StreamEncoder *encoder);
01213
01231 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);
01232
01241 FLAC_API FLAC__bool FLAC__stream_encoder_get_verify(const FLAC__StreamEncoder *encoder);
01242
01251 FLAC_API FLAC__bool FLAC__stream_encoder_get_streamable_subset(const FLAC__StreamEncoder *encoder);
01252
01261 FLAC_API unsigned FLAC__stream_encoder_get_channels(const FLAC__StreamEncoder *encoder);
01262
01271 FLAC_API unsigned FLAC__stream_encoder_get_bits_per_sample(const FLAC__StreamEncoder *encoder);
01272
01281 FLAC_API unsigned FLAC__stream_encoder_get_sample_rate(const FLAC__StreamEncoder *encoder);
01282
01291 FLAC_API unsigned FLAC__stream_encoder_get_blocksize(const FLAC__StreamEncoder *encoder);
01292
01301 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01302
01311 FLAC_API FLAC__bool FLAC__stream_encoder_get_loose_mid_side_stereo(const FLAC__StreamEncoder *encoder);
01312
01321 FLAC_API unsigned FLAC__stream_encoder_get_max_lpc_order(const FLAC__StreamEncoder *encoder);
01322
01331 FLAC_API unsigned FLAC__stream_encoder_get_qlp_coeff_precision(const FLAC__StreamEncoder *encoder);
01332
01341 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_qlp_coeff_prec_search(const FLAC__StreamEncoder *encoder);
01342
01351 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_escape_coding(const FLAC__StreamEncoder *encoder);
01352
01361 FLAC_API FLAC__bool FLAC__stream_encoder_get_do_exhaustive_model_search(const FLAC__StreamEncoder *encoder);
01362
01371 FLAC_API unsigned FLAC__stream_encoder_get_min_residual_partition_order(const FLAC__StreamEncoder *encoder);
01372
01381 FLAC_API unsigned FLAC__stream_encoder_get_max_residual_partition_order(const FLAC__StreamEncoder *encoder);
01382
01391 FLAC_API unsigned FLAC__stream_encoder_get_rice_parameter_search_dist(const FLAC__StreamEncoder *encoder);
01392
01404 FLAC_API FLAC__uint64 FLAC__stream_encoder_get_total_samples_estimate(const FLAC__StreamEncoder *encoder);
01405
01467 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);
01468
01535 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);
01536
01570 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01571
01605 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_FILE(FLAC__StreamEncoder *encoder, FILE *file, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01606
01637 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01638
01669 FLAC_API FLAC__StreamEncoderInitStatus FLAC__stream_encoder_init_ogg_file(FLAC__StreamEncoder *encoder, const char *filename, FLAC__StreamEncoderProgressCallback progress_callback, void *client_data);
01670
01697 FLAC_API FLAC__bool FLAC__stream_encoder_finish(FLAC__StreamEncoder *encoder);
01698
01720 FLAC_API FLAC__bool FLAC__stream_encoder_process(FLAC__StreamEncoder *encoder, const FLAC__int32 * const buffer[], unsigned samples);
01721
01748 FLAC_API FLAC__bool FLAC__stream_encoder_process_interleaved(FLAC__StreamEncoder *encoder, const FLAC__int32 buffer[], unsigned samples);
01749
01750
01751
01752 #ifdef __cplusplus
01753 }
01754 #endif
01755
01756 #endif