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_DECODER_H
00033 #define FLAC__STREAM_DECODER_H
00034
00035 #include <stdio.h>
00036 #include "export.h"
00037 #include "format.h"
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00043
00201 typedef enum {
00202
00203 FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0,
00206 FLAC__STREAM_DECODER_READ_METADATA,
00209 FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC,
00214 FLAC__STREAM_DECODER_READ_FRAME,
00217 FLAC__STREAM_DECODER_END_OF_STREAM,
00220 FLAC__STREAM_DECODER_OGG_ERROR,
00223 FLAC__STREAM_DECODER_SEEK_ERROR,
00229 FLAC__STREAM_DECODER_ABORTED,
00232 FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
00237 FLAC__STREAM_DECODER_UNINITIALIZED
00243 } FLAC__StreamDecoderState;
00244
00250 extern FLAC_API const char * const FLAC__StreamDecoderStateString[];
00251
00252
00255 typedef enum {
00256
00257 FLAC__STREAM_DECODER_INIT_STATUS_OK = 0,
00260 FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
00265 FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS,
00268 FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR,
00271 FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE,
00275 FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED
00281 } FLAC__StreamDecoderInitStatus;
00282
00288 extern FLAC_API const char * const FLAC__StreamDecoderInitStatusString[];
00289
00290
00293 typedef enum {
00294
00295 FLAC__STREAM_DECODER_READ_STATUS_CONTINUE,
00298 FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM,
00309 FLAC__STREAM_DECODER_READ_STATUS_ABORT
00312 } FLAC__StreamDecoderReadStatus;
00313
00319 extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[];
00320
00321
00324 typedef enum {
00325
00326 FLAC__STREAM_DECODER_SEEK_STATUS_OK,
00329 FLAC__STREAM_DECODER_SEEK_STATUS_ERROR,
00332 FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
00335 } FLAC__StreamDecoderSeekStatus;
00336
00342 extern FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[];
00343
00344
00347 typedef enum {
00348
00349 FLAC__STREAM_DECODER_TELL_STATUS_OK,
00352 FLAC__STREAM_DECODER_TELL_STATUS_ERROR,
00355 FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
00358 } FLAC__StreamDecoderTellStatus;
00359
00365 extern FLAC_API const char * const FLAC__StreamDecoderTellStatusString[];
00366
00367
00370 typedef enum {
00371
00372 FLAC__STREAM_DECODER_LENGTH_STATUS_OK,
00375 FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR,
00378 FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
00381 } FLAC__StreamDecoderLengthStatus;
00382
00388 extern FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[];
00389
00390
00393 typedef enum {
00394
00395 FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE,
00398 FLAC__STREAM_DECODER_WRITE_STATUS_ABORT
00401 } FLAC__StreamDecoderWriteStatus;
00402
00408 extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[];
00409
00410
00426 typedef enum {
00427
00428 FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC,
00431 FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER,
00434 FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH,
00437 FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM
00440 } FLAC__StreamDecoderErrorStatus;
00441
00447 extern FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[];
00448
00449
00450
00451
00452
00453
00454
00455
00456 struct FLAC__StreamDecoderProtected;
00457 struct FLAC__StreamDecoderPrivate;
00462 typedef struct {
00463 struct FLAC__StreamDecoderProtected *protected_;
00464 struct FLAC__StreamDecoderPrivate *private_;
00465 } FLAC__StreamDecoder;
00466
00516 typedef FLAC__StreamDecoderReadStatus (*FLAC__StreamDecoderReadCallback)(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
00517
00551 typedef FLAC__StreamDecoderSeekStatus (*FLAC__StreamDecoderSeekCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
00552
00589 typedef FLAC__StreamDecoderTellStatus (*FLAC__StreamDecoderTellCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
00590
00627 typedef FLAC__StreamDecoderLengthStatus (*FLAC__StreamDecoderLengthCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
00628
00654 typedef FLAC__bool (*FLAC__StreamDecoderEofCallback)(const FLAC__StreamDecoder *decoder, void *client_data);
00655
00682 typedef FLAC__StreamDecoderWriteStatus (*FLAC__StreamDecoderWriteCallback)(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
00683
00709 typedef void (*FLAC__StreamDecoderMetadataCallback)(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
00710
00726 typedef void (*FLAC__StreamDecoderErrorCallback)(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
00727
00728
00729
00730
00731
00732
00733
00734
00742 FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void);
00743
00750 FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder);
00751
00752
00753
00754
00755
00756
00757
00758
00775 FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long serial_number);
00776
00797 FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value);
00798
00811 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
00812
00826 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
00827
00838 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder);
00839
00852 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
00853
00867 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
00868
00879 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder);
00880
00889 FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder);
00890
00899 FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder);
00900
00913 FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder);
00914
00925 FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder);
00926
00937 FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder);
00938
00949 FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder);
00950
00961 FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder);
00962
00973 FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder);
00974
00985 FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder);
00986
01006 FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position);
01007
01072 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
01073 FLAC__StreamDecoder *decoder,
01074 FLAC__StreamDecoderReadCallback read_callback,
01075 FLAC__StreamDecoderSeekCallback seek_callback,
01076 FLAC__StreamDecoderTellCallback tell_callback,
01077 FLAC__StreamDecoderLengthCallback length_callback,
01078 FLAC__StreamDecoderEofCallback eof_callback,
01079 FLAC__StreamDecoderWriteCallback write_callback,
01080 FLAC__StreamDecoderMetadataCallback metadata_callback,
01081 FLAC__StreamDecoderErrorCallback error_callback,
01082 void *client_data
01083 );
01084
01153 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream(
01154 FLAC__StreamDecoder *decoder,
01155 FLAC__StreamDecoderReadCallback read_callback,
01156 FLAC__StreamDecoderSeekCallback seek_callback,
01157 FLAC__StreamDecoderTellCallback tell_callback,
01158 FLAC__StreamDecoderLengthCallback length_callback,
01159 FLAC__StreamDecoderEofCallback eof_callback,
01160 FLAC__StreamDecoderWriteCallback write_callback,
01161 FLAC__StreamDecoderMetadataCallback metadata_callback,
01162 FLAC__StreamDecoderErrorCallback error_callback,
01163 void *client_data
01164 );
01165
01203 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
01204 FLAC__StreamDecoder *decoder,
01205 FILE *file,
01206 FLAC__StreamDecoderWriteCallback write_callback,
01207 FLAC__StreamDecoderMetadataCallback metadata_callback,
01208 FLAC__StreamDecoderErrorCallback error_callback,
01209 void *client_data
01210 );
01211
01253 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE(
01254 FLAC__StreamDecoder *decoder,
01255 FILE *file,
01256 FLAC__StreamDecoderWriteCallback write_callback,
01257 FLAC__StreamDecoderMetadataCallback metadata_callback,
01258 FLAC__StreamDecoderErrorCallback error_callback,
01259 void *client_data
01260 );
01261
01295 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
01296 FLAC__StreamDecoder *decoder,
01297 const char *filename,
01298 FLAC__StreamDecoderWriteCallback write_callback,
01299 FLAC__StreamDecoderMetadataCallback metadata_callback,
01300 FLAC__StreamDecoderErrorCallback error_callback,
01301 void *client_data
01302 );
01303
01341 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file(
01342 FLAC__StreamDecoder *decoder,
01343 const char *filename,
01344 FLAC__StreamDecoderWriteCallback write_callback,
01345 FLAC__StreamDecoderMetadataCallback metadata_callback,
01346 FLAC__StreamDecoderErrorCallback error_callback,
01347 void *client_data
01348 );
01349
01369 FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder);
01370
01384 FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder);
01385
01417 FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder);
01418
01450 FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder);
01451
01471 FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder);
01472
01492 FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder);
01493
01533 FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder);
01534
01551 FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample);
01552
01553
01554
01555 #ifdef __cplusplus
01556 }
01557 #endif
01558
01559 #endif