cannam@86: cannam@86: cannam@86: FLAC: include/FLAC/stream_decoder.h Source File cannam@86: cannam@86: cannam@86: cannam@86:
Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members
cannam@86: cannam@86:

stream_decoder.h

Go to the documentation of this file.
00001 /* libFLAC - Free Lossless Audio Codec library
cannam@86: 00002  * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
cannam@86: 00003  *
cannam@86: 00004  * Redistribution and use in source and binary forms, with or without
cannam@86: 00005  * modification, are permitted provided that the following conditions
cannam@86: 00006  * are met:
cannam@86: 00007  *
cannam@86: 00008  * - Redistributions of source code must retain the above copyright
cannam@86: 00009  * notice, this list of conditions and the following disclaimer.
cannam@86: 00010  *
cannam@86: 00011  * - Redistributions in binary form must reproduce the above copyright
cannam@86: 00012  * notice, this list of conditions and the following disclaimer in the
cannam@86: 00013  * documentation and/or other materials provided with the distribution.
cannam@86: 00014  *
cannam@86: 00015  * - Neither the name of the Xiph.org Foundation nor the names of its
cannam@86: 00016  * contributors may be used to endorse or promote products derived from
cannam@86: 00017  * this software without specific prior written permission.
cannam@86: 00018  *
cannam@86: 00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
cannam@86: 00020  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
cannam@86: 00021  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
cannam@86: 00022  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
cannam@86: 00023  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
cannam@86: 00024  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
cannam@86: 00025  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
cannam@86: 00026  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
cannam@86: 00027  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
cannam@86: 00028  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
cannam@86: 00029  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cannam@86: 00030  */
cannam@86: 00031 
cannam@86: 00032 #ifndef FLAC__STREAM_DECODER_H
cannam@86: 00033 #define FLAC__STREAM_DECODER_H
cannam@86: 00034 
cannam@86: 00035 #include <stdio.h> /* for FILE */
cannam@86: 00036 #include "export.h"
cannam@86: 00037 #include "format.h"
cannam@86: 00038 
cannam@86: 00039 #ifdef __cplusplus
cannam@86: 00040 extern "C" {
cannam@86: 00041 #endif
cannam@86: 00042 
cannam@86: 00043 
cannam@86: 00201 typedef enum {
cannam@86: 00202 
cannam@86: 00203     FLAC__STREAM_DECODER_SEARCH_FOR_METADATA = 0,
cannam@86: 00206     FLAC__STREAM_DECODER_READ_METADATA,
cannam@86: 00209     FLAC__STREAM_DECODER_SEARCH_FOR_FRAME_SYNC,
cannam@86: 00214     FLAC__STREAM_DECODER_READ_FRAME,
cannam@86: 00217     FLAC__STREAM_DECODER_END_OF_STREAM,
cannam@86: 00220     FLAC__STREAM_DECODER_OGG_ERROR,
cannam@86: 00223     FLAC__STREAM_DECODER_SEEK_ERROR,
cannam@86: 00229     FLAC__STREAM_DECODER_ABORTED,
cannam@86: 00232     FLAC__STREAM_DECODER_MEMORY_ALLOCATION_ERROR,
cannam@86: 00237     FLAC__STREAM_DECODER_UNINITIALIZED
cannam@86: 00243 } FLAC__StreamDecoderState;
cannam@86: 00244 
cannam@86: 00250 extern FLAC_API const char * const FLAC__StreamDecoderStateString[];
cannam@86: 00251 
cannam@86: 00252 
cannam@86: 00255 typedef enum {
cannam@86: 00256 
cannam@86: 00257     FLAC__STREAM_DECODER_INIT_STATUS_OK = 0,
cannam@86: 00260     FLAC__STREAM_DECODER_INIT_STATUS_UNSUPPORTED_CONTAINER,
cannam@86: 00265     FLAC__STREAM_DECODER_INIT_STATUS_INVALID_CALLBACKS,
cannam@86: 00268     FLAC__STREAM_DECODER_INIT_STATUS_MEMORY_ALLOCATION_ERROR,
cannam@86: 00271     FLAC__STREAM_DECODER_INIT_STATUS_ERROR_OPENING_FILE,
cannam@86: 00275     FLAC__STREAM_DECODER_INIT_STATUS_ALREADY_INITIALIZED
cannam@86: 00281 } FLAC__StreamDecoderInitStatus;
cannam@86: 00282 
cannam@86: 00288 extern FLAC_API const char * const FLAC__StreamDecoderInitStatusString[];
cannam@86: 00289 
cannam@86: 00290 
cannam@86: 00293 typedef enum {
cannam@86: 00294 
cannam@86: 00295     FLAC__STREAM_DECODER_READ_STATUS_CONTINUE,
cannam@86: 00298     FLAC__STREAM_DECODER_READ_STATUS_END_OF_STREAM,
cannam@86: 00309     FLAC__STREAM_DECODER_READ_STATUS_ABORT
cannam@86: 00312 } FLAC__StreamDecoderReadStatus;
cannam@86: 00313 
cannam@86: 00319 extern FLAC_API const char * const FLAC__StreamDecoderReadStatusString[];
cannam@86: 00320 
cannam@86: 00321 
cannam@86: 00324 typedef enum {
cannam@86: 00325 
cannam@86: 00326     FLAC__STREAM_DECODER_SEEK_STATUS_OK,
cannam@86: 00329     FLAC__STREAM_DECODER_SEEK_STATUS_ERROR,
cannam@86: 00332     FLAC__STREAM_DECODER_SEEK_STATUS_UNSUPPORTED
cannam@86: 00335 } FLAC__StreamDecoderSeekStatus;
cannam@86: 00336 
cannam@86: 00342 extern FLAC_API const char * const FLAC__StreamDecoderSeekStatusString[];
cannam@86: 00343 
cannam@86: 00344 
cannam@86: 00347 typedef enum {
cannam@86: 00348 
cannam@86: 00349     FLAC__STREAM_DECODER_TELL_STATUS_OK,
cannam@86: 00352     FLAC__STREAM_DECODER_TELL_STATUS_ERROR,
cannam@86: 00355     FLAC__STREAM_DECODER_TELL_STATUS_UNSUPPORTED
cannam@86: 00358 } FLAC__StreamDecoderTellStatus;
cannam@86: 00359 
cannam@86: 00365 extern FLAC_API const char * const FLAC__StreamDecoderTellStatusString[];
cannam@86: 00366 
cannam@86: 00367 
cannam@86: 00370 typedef enum {
cannam@86: 00371 
cannam@86: 00372     FLAC__STREAM_DECODER_LENGTH_STATUS_OK,
cannam@86: 00375     FLAC__STREAM_DECODER_LENGTH_STATUS_ERROR,
cannam@86: 00378     FLAC__STREAM_DECODER_LENGTH_STATUS_UNSUPPORTED
cannam@86: 00381 } FLAC__StreamDecoderLengthStatus;
cannam@86: 00382 
cannam@86: 00388 extern FLAC_API const char * const FLAC__StreamDecoderLengthStatusString[];
cannam@86: 00389 
cannam@86: 00390 
cannam@86: 00393 typedef enum {
cannam@86: 00394 
cannam@86: 00395     FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE,
cannam@86: 00398     FLAC__STREAM_DECODER_WRITE_STATUS_ABORT
cannam@86: 00401 } FLAC__StreamDecoderWriteStatus;
cannam@86: 00402 
cannam@86: 00408 extern FLAC_API const char * const FLAC__StreamDecoderWriteStatusString[];
cannam@86: 00409 
cannam@86: 00410 
cannam@86: 00426 typedef enum {
cannam@86: 00427 
cannam@86: 00428     FLAC__STREAM_DECODER_ERROR_STATUS_LOST_SYNC,
cannam@86: 00431     FLAC__STREAM_DECODER_ERROR_STATUS_BAD_HEADER,
cannam@86: 00434     FLAC__STREAM_DECODER_ERROR_STATUS_FRAME_CRC_MISMATCH,
cannam@86: 00437     FLAC__STREAM_DECODER_ERROR_STATUS_UNPARSEABLE_STREAM
cannam@86: 00440 } FLAC__StreamDecoderErrorStatus;
cannam@86: 00441 
cannam@86: 00447 extern FLAC_API const char * const FLAC__StreamDecoderErrorStatusString[];
cannam@86: 00448 
cannam@86: 00449 
cannam@86: 00450 /***********************************************************************
cannam@86: 00451  *
cannam@86: 00452  * class FLAC__StreamDecoder
cannam@86: 00453  *
cannam@86: 00454  ***********************************************************************/
cannam@86: 00455 
cannam@86: 00456 struct FLAC__StreamDecoderProtected;
cannam@86: 00457 struct FLAC__StreamDecoderPrivate;
cannam@86: 00462 typedef struct {
cannam@86: 00463     struct FLAC__StreamDecoderProtected *protected_; /* avoid the C++ keyword 'protected' */
cannam@86: 00464     struct FLAC__StreamDecoderPrivate *private_; /* avoid the C++ keyword 'private' */
cannam@86: 00465 } FLAC__StreamDecoder;
cannam@86: 00466 
cannam@86: 00516 typedef FLAC__StreamDecoderReadStatus (*FLAC__StreamDecoderReadCallback)(const FLAC__StreamDecoder *decoder, FLAC__byte buffer[], size_t *bytes, void *client_data);
cannam@86: 00517 
cannam@86: 00551 typedef FLAC__StreamDecoderSeekStatus (*FLAC__StreamDecoderSeekCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 absolute_byte_offset, void *client_data);
cannam@86: 00552 
cannam@86: 00589 typedef FLAC__StreamDecoderTellStatus (*FLAC__StreamDecoderTellCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *absolute_byte_offset, void *client_data);
cannam@86: 00590 
cannam@86: 00627 typedef FLAC__StreamDecoderLengthStatus (*FLAC__StreamDecoderLengthCallback)(const FLAC__StreamDecoder *decoder, FLAC__uint64 *stream_length, void *client_data);
cannam@86: 00628 
cannam@86: 00654 typedef FLAC__bool (*FLAC__StreamDecoderEofCallback)(const FLAC__StreamDecoder *decoder, void *client_data);
cannam@86: 00655 
cannam@86: 00682 typedef FLAC__StreamDecoderWriteStatus (*FLAC__StreamDecoderWriteCallback)(const FLAC__StreamDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data);
cannam@86: 00683 
cannam@86: 00709 typedef void (*FLAC__StreamDecoderMetadataCallback)(const FLAC__StreamDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data);
cannam@86: 00710 
cannam@86: 00726 typedef void (*FLAC__StreamDecoderErrorCallback)(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorStatus status, void *client_data);
cannam@86: 00727 
cannam@86: 00728 
cannam@86: 00729 /***********************************************************************
cannam@86: 00730  *
cannam@86: 00731  * Class constructor/destructor
cannam@86: 00732  *
cannam@86: 00733  ***********************************************************************/
cannam@86: 00734 
cannam@86: 00742 FLAC_API FLAC__StreamDecoder *FLAC__stream_decoder_new(void);
cannam@86: 00743 
cannam@86: 00750 FLAC_API void FLAC__stream_decoder_delete(FLAC__StreamDecoder *decoder);
cannam@86: 00751 
cannam@86: 00752 
cannam@86: 00753 /***********************************************************************
cannam@86: 00754  *
cannam@86: 00755  * Public class method prototypes
cannam@86: 00756  *
cannam@86: 00757  ***********************************************************************/
cannam@86: 00758 
cannam@86: 00775 FLAC_API FLAC__bool FLAC__stream_decoder_set_ogg_serial_number(FLAC__StreamDecoder *decoder, long serial_number);
cannam@86: 00776 
cannam@86: 00797 FLAC_API FLAC__bool FLAC__stream_decoder_set_md5_checking(FLAC__StreamDecoder *decoder, FLAC__bool value);
cannam@86: 00798 
cannam@86: 00811 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
cannam@86: 00812 
cannam@86: 00826 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
cannam@86: 00827 
cannam@86: 00838 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_respond_all(FLAC__StreamDecoder *decoder);
cannam@86: 00839 
cannam@86: 00852 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore(FLAC__StreamDecoder *decoder, FLAC__MetadataType type);
cannam@86: 00853 
cannam@86: 00867 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_application(FLAC__StreamDecoder *decoder, const FLAC__byte id[4]);
cannam@86: 00868 
cannam@86: 00879 FLAC_API FLAC__bool FLAC__stream_decoder_set_metadata_ignore_all(FLAC__StreamDecoder *decoder);
cannam@86: 00880 
cannam@86: 00889 FLAC_API FLAC__StreamDecoderState FLAC__stream_decoder_get_state(const FLAC__StreamDecoder *decoder);
cannam@86: 00890 
cannam@86: 00899 FLAC_API const char *FLAC__stream_decoder_get_resolved_state_string(const FLAC__StreamDecoder *decoder);
cannam@86: 00900 
cannam@86: 00913 FLAC_API FLAC__bool FLAC__stream_decoder_get_md5_checking(const FLAC__StreamDecoder *decoder);
cannam@86: 00914 
cannam@86: 00925 FLAC_API FLAC__uint64 FLAC__stream_decoder_get_total_samples(const FLAC__StreamDecoder *decoder);
cannam@86: 00926 
cannam@86: 00937 FLAC_API unsigned FLAC__stream_decoder_get_channels(const FLAC__StreamDecoder *decoder);
cannam@86: 00938 
cannam@86: 00949 FLAC_API FLAC__ChannelAssignment FLAC__stream_decoder_get_channel_assignment(const FLAC__StreamDecoder *decoder);
cannam@86: 00950 
cannam@86: 00961 FLAC_API unsigned FLAC__stream_decoder_get_bits_per_sample(const FLAC__StreamDecoder *decoder);
cannam@86: 00962 
cannam@86: 00973 FLAC_API unsigned FLAC__stream_decoder_get_sample_rate(const FLAC__StreamDecoder *decoder);
cannam@86: 00974 
cannam@86: 00985 FLAC_API unsigned FLAC__stream_decoder_get_blocksize(const FLAC__StreamDecoder *decoder);
cannam@86: 00986 
cannam@86: 01006 FLAC_API FLAC__bool FLAC__stream_decoder_get_decode_position(const FLAC__StreamDecoder *decoder, FLAC__uint64 *position);
cannam@86: 01007 
cannam@86: 01072 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_stream(
cannam@86: 01073     FLAC__StreamDecoder *decoder,
cannam@86: 01074     FLAC__StreamDecoderReadCallback read_callback,
cannam@86: 01075     FLAC__StreamDecoderSeekCallback seek_callback,
cannam@86: 01076     FLAC__StreamDecoderTellCallback tell_callback,
cannam@86: 01077     FLAC__StreamDecoderLengthCallback length_callback,
cannam@86: 01078     FLAC__StreamDecoderEofCallback eof_callback,
cannam@86: 01079     FLAC__StreamDecoderWriteCallback write_callback,
cannam@86: 01080     FLAC__StreamDecoderMetadataCallback metadata_callback,
cannam@86: 01081     FLAC__StreamDecoderErrorCallback error_callback,
cannam@86: 01082     void *client_data
cannam@86: 01083 );
cannam@86: 01084 
cannam@86: 01153 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_stream(
cannam@86: 01154     FLAC__StreamDecoder *decoder,
cannam@86: 01155     FLAC__StreamDecoderReadCallback read_callback,
cannam@86: 01156     FLAC__StreamDecoderSeekCallback seek_callback,
cannam@86: 01157     FLAC__StreamDecoderTellCallback tell_callback,
cannam@86: 01158     FLAC__StreamDecoderLengthCallback length_callback,
cannam@86: 01159     FLAC__StreamDecoderEofCallback eof_callback,
cannam@86: 01160     FLAC__StreamDecoderWriteCallback write_callback,
cannam@86: 01161     FLAC__StreamDecoderMetadataCallback metadata_callback,
cannam@86: 01162     FLAC__StreamDecoderErrorCallback error_callback,
cannam@86: 01163     void *client_data
cannam@86: 01164 );
cannam@86: 01165 
cannam@86: 01203 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_FILE(
cannam@86: 01204     FLAC__StreamDecoder *decoder,
cannam@86: 01205     FILE *file,
cannam@86: 01206     FLAC__StreamDecoderWriteCallback write_callback,
cannam@86: 01207     FLAC__StreamDecoderMetadataCallback metadata_callback,
cannam@86: 01208     FLAC__StreamDecoderErrorCallback error_callback,
cannam@86: 01209     void *client_data
cannam@86: 01210 );
cannam@86: 01211 
cannam@86: 01253 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_FILE(
cannam@86: 01254     FLAC__StreamDecoder *decoder,
cannam@86: 01255     FILE *file,
cannam@86: 01256     FLAC__StreamDecoderWriteCallback write_callback,
cannam@86: 01257     FLAC__StreamDecoderMetadataCallback metadata_callback,
cannam@86: 01258     FLAC__StreamDecoderErrorCallback error_callback,
cannam@86: 01259     void *client_data
cannam@86: 01260 );
cannam@86: 01261 
cannam@86: 01295 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_file(
cannam@86: 01296     FLAC__StreamDecoder *decoder,
cannam@86: 01297     const char *filename,
cannam@86: 01298     FLAC__StreamDecoderWriteCallback write_callback,
cannam@86: 01299     FLAC__StreamDecoderMetadataCallback metadata_callback,
cannam@86: 01300     FLAC__StreamDecoderErrorCallback error_callback,
cannam@86: 01301     void *client_data
cannam@86: 01302 );
cannam@86: 01303 
cannam@86: 01341 FLAC_API FLAC__StreamDecoderInitStatus FLAC__stream_decoder_init_ogg_file(
cannam@86: 01342     FLAC__StreamDecoder *decoder,
cannam@86: 01343     const char *filename,
cannam@86: 01344     FLAC__StreamDecoderWriteCallback write_callback,
cannam@86: 01345     FLAC__StreamDecoderMetadataCallback metadata_callback,
cannam@86: 01346     FLAC__StreamDecoderErrorCallback error_callback,
cannam@86: 01347     void *client_data
cannam@86: 01348 );
cannam@86: 01349 
cannam@86: 01369 FLAC_API FLAC__bool FLAC__stream_decoder_finish(FLAC__StreamDecoder *decoder);
cannam@86: 01370 
cannam@86: 01384 FLAC_API FLAC__bool FLAC__stream_decoder_flush(FLAC__StreamDecoder *decoder);
cannam@86: 01385 
cannam@86: 01417 FLAC_API FLAC__bool FLAC__stream_decoder_reset(FLAC__StreamDecoder *decoder);
cannam@86: 01418 
cannam@86: 01450 FLAC_API FLAC__bool FLAC__stream_decoder_process_single(FLAC__StreamDecoder *decoder);
cannam@86: 01451 
cannam@86: 01471 FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_metadata(FLAC__StreamDecoder *decoder);
cannam@86: 01472 
cannam@86: 01492 FLAC_API FLAC__bool FLAC__stream_decoder_process_until_end_of_stream(FLAC__StreamDecoder *decoder);
cannam@86: 01493 
cannam@86: 01533 FLAC_API FLAC__bool FLAC__stream_decoder_skip_single_frame(FLAC__StreamDecoder *decoder);
cannam@86: 01534 
cannam@86: 01551 FLAC_API FLAC__bool FLAC__stream_decoder_seek_absolute(FLAC__StreamDecoder *decoder, FLAC__uint64 sample);
cannam@86: 01552 
cannam@86: 01553 /* \} */
cannam@86: 01554 
cannam@86: 01555 #ifdef __cplusplus
cannam@86: 01556 }
cannam@86: 01557 #endif
cannam@86: 01558 
cannam@86: 01559 #endif
cannam@86: 
cannam@86:
cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: