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__FORMAT_H
00033 #define FLAC__FORMAT_H
00034
00035 #include "export.h"
00036 #include "ordinals.h"
00037
00038 #ifdef __cplusplus
00039 extern "C" {
00040 #endif
00041
00086
00087
00088
00089
00090
00092 #define FLAC__MAX_METADATA_TYPE_CODE (126u)
00093
00095 #define FLAC__MIN_BLOCK_SIZE (16u)
00096
00098 #define FLAC__MAX_BLOCK_SIZE (65535u)
00099
00101 #define FLAC__MAX_CHANNELS (8u)
00102
00104 #define FLAC__MIN_BITS_PER_SAMPLE (4u)
00105
00107 #define FLAC__MAX_BITS_PER_SAMPLE (32u)
00108
00117 #define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u)
00118
00123 #define FLAC__MAX_SAMPLE_RATE (655350u)
00124
00126 #define FLAC__MAX_LPC_ORDER (32u)
00127
00131 #define FLAC__MIN_QLP_COEFF_PRECISION (5u)
00132
00136 #define FLAC__MAX_QLP_COEFF_PRECISION (15u)
00137
00139 #define FLAC__MAX_FIXED_ORDER (4u)
00140
00142 #define FLAC__MAX_RICE_PARTITION_ORDER (15u)
00143
00145 #define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u)
00146
00153 extern FLAC_API const char *FLAC__VERSION_STRING;
00154
00159 extern FLAC_API const char *FLAC__VENDOR_STRING;
00160
00162 extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4];
00163
00167 extern FLAC_API const unsigned FLAC__STREAM_SYNC;
00168
00170 extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN;
00171
00173 #define FLAC__STREAM_SYNC_LENGTH (4u)
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183
00185 typedef enum {
00186 FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0
00189 } FLAC__EntropyCodingMethodType;
00190
00196 extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[];
00197
00198
00201 typedef struct {
00202
00203 unsigned *parameters;
00206 unsigned *raw_bits;
00209 unsigned capacity_by_order;
00214 } FLAC__EntropyCodingMethod_PartitionedRiceContents;
00215
00218 typedef struct {
00219
00220 unsigned order;
00223 const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents;
00226 } FLAC__EntropyCodingMethod_PartitionedRice;
00227
00228 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN;
00229 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN;
00230 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN;
00232 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
00237 typedef struct {
00238 FLAC__EntropyCodingMethodType type;
00239 union {
00240 FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice;
00241 } data;
00242 } FLAC__EntropyCodingMethod;
00243
00244 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN;
00246
00247
00249 typedef enum {
00250 FLAC__SUBFRAME_TYPE_CONSTANT = 0,
00251 FLAC__SUBFRAME_TYPE_VERBATIM = 1,
00252 FLAC__SUBFRAME_TYPE_FIXED = 2,
00253 FLAC__SUBFRAME_TYPE_LPC = 3
00254 } FLAC__SubframeType;
00255
00261 extern FLAC_API const char * const FLAC__SubframeTypeString[];
00262
00263
00266 typedef struct {
00267 FLAC__int32 value;
00268 } FLAC__Subframe_Constant;
00269
00270
00273 typedef struct {
00274 const FLAC__int32 *data;
00275 } FLAC__Subframe_Verbatim;
00276
00277
00280 typedef struct {
00281 FLAC__EntropyCodingMethod entropy_coding_method;
00284 unsigned order;
00287 FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER];
00290 const FLAC__int32 *residual;
00292 } FLAC__Subframe_Fixed;
00293
00294
00297 typedef struct {
00298 FLAC__EntropyCodingMethod entropy_coding_method;
00301 unsigned order;
00304 unsigned qlp_coeff_precision;
00307 int quantization_level;
00310 FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER];
00313 FLAC__int32 warmup[FLAC__MAX_LPC_ORDER];
00316 const FLAC__int32 *residual;
00318 } FLAC__Subframe_LPC;
00319
00320 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN;
00321 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN;
00326 typedef struct {
00327 FLAC__SubframeType type;
00328 union {
00329 FLAC__Subframe_Constant constant;
00330 FLAC__Subframe_Fixed fixed;
00331 FLAC__Subframe_LPC lpc;
00332 FLAC__Subframe_Verbatim verbatim;
00333 } data;
00334 unsigned wasted_bits;
00335 } FLAC__Subframe;
00336
00337 extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN;
00338 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN;
00339 extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN;
00341 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK;
00342 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK;
00343 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK;
00344 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK;
00345
00346
00347
00348
00349
00350
00351
00352
00353
00354
00356 typedef enum {
00357 FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0,
00358 FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1,
00359 FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2,
00360 FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3
00361 } FLAC__ChannelAssignment;
00362
00368 extern FLAC_API const char * const FLAC__ChannelAssignmentString[];
00369
00371 typedef enum {
00372 FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER,
00373 FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER
00374 } FLAC__FrameNumberType;
00375
00381 extern FLAC_API const char * const FLAC__FrameNumberTypeString[];
00382
00383
00386 typedef struct {
00387 unsigned blocksize;
00390 unsigned sample_rate;
00393 unsigned channels;
00396 FLAC__ChannelAssignment channel_assignment;
00399 unsigned bits_per_sample;
00402 FLAC__FrameNumberType number_type;
00405 union {
00406 FLAC__uint32 frame_number;
00407 FLAC__uint64 sample_number;
00408 } number;
00412 FLAC__uint8 crc;
00417 } FLAC__FrameHeader;
00418
00419 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC;
00420 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN;
00421 extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN;
00422 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN;
00423 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN;
00424 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN;
00425 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN;
00426 extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN;
00427 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN;
00432 typedef struct {
00433 FLAC__uint16 crc;
00438 } FLAC__FrameFooter;
00439
00440 extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN;
00445 typedef struct {
00446 FLAC__FrameHeader header;
00447 FLAC__Subframe subframes[FLAC__MAX_CHANNELS];
00448 FLAC__FrameFooter footer;
00449 } FLAC__Frame;
00450
00451
00452
00453
00454
00455
00456
00457
00458
00459
00461 typedef enum {
00462
00463 FLAC__METADATA_TYPE_STREAMINFO = 0,
00466 FLAC__METADATA_TYPE_PADDING = 1,
00469 FLAC__METADATA_TYPE_APPLICATION = 2,
00472 FLAC__METADATA_TYPE_SEEKTABLE = 3,
00475 FLAC__METADATA_TYPE_VORBIS_COMMENT = 4,
00478 FLAC__METADATA_TYPE_CUESHEET = 5,
00481 FLAC__METADATA_TYPE_UNDEFINED = 6
00484 } FLAC__MetadataType;
00485
00491 extern FLAC_API const char * const FLAC__MetadataTypeString[];
00492
00493
00496 typedef struct {
00497 unsigned min_blocksize, max_blocksize;
00498 unsigned min_framesize, max_framesize;
00499 unsigned sample_rate;
00500 unsigned channels;
00501 unsigned bits_per_sample;
00502 FLAC__uint64 total_samples;
00503 FLAC__byte md5sum[16];
00504 } FLAC__StreamMetadata_StreamInfo;
00505
00506 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN;
00507 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN;
00508 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN;
00509 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN;
00510 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN;
00511 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN;
00512 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN;
00513 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN;
00514 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN;
00517 #define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u)
00518
00521 typedef struct {
00522 int dummy;
00527 } FLAC__StreamMetadata_Padding;
00528
00529
00532 typedef struct {
00533 FLAC__byte id[4];
00534 FLAC__byte *data;
00535 } FLAC__StreamMetadata_Application;
00536
00537 extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN;
00541 typedef struct {
00542 FLAC__uint64 sample_number;
00545 FLAC__uint64 stream_offset;
00549 unsigned frame_samples;
00551 } FLAC__StreamMetadata_SeekPoint;
00552
00553 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN;
00554 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN;
00555 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN;
00558 #define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u)
00559
00564 extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
00565
00566
00579 typedef struct {
00580 unsigned num_points;
00581 FLAC__StreamMetadata_SeekPoint *points;
00582 } FLAC__StreamMetadata_SeekTable;
00583
00584
00591 typedef struct {
00592 FLAC__uint32 length;
00593 FLAC__byte *entry;
00594 } FLAC__StreamMetadata_VorbisComment_Entry;
00595
00596 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN;
00601 typedef struct {
00602 FLAC__StreamMetadata_VorbisComment_Entry vendor_string;
00603 FLAC__uint32 num_comments;
00604 FLAC__StreamMetadata_VorbisComment_Entry *comments;
00605 } FLAC__StreamMetadata_VorbisComment;
00606
00607 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN;
00614 typedef struct {
00615 FLAC__uint64 offset;
00620 FLAC__byte number;
00622 } FLAC__StreamMetadata_CueSheet_Index;
00623
00624 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN;
00625 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN;
00626 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN;
00633 typedef struct {
00634 FLAC__uint64 offset;
00637 FLAC__byte number;
00640 char isrc[13];
00643 unsigned type:1;
00646 unsigned pre_emphasis:1;
00649 FLAC__byte num_indices;
00652 FLAC__StreamMetadata_CueSheet_Index *indices;
00655 } FLAC__StreamMetadata_CueSheet_Track;
00656
00657 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN;
00658 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN;
00659 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN;
00660 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN;
00661 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN;
00662 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN;
00663 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN;
00670 typedef struct {
00671 char media_catalog_number[129];
00677 FLAC__uint64 lead_in;
00680 FLAC__bool is_cd;
00683 unsigned num_tracks;
00686 FLAC__StreamMetadata_CueSheet_Track *tracks;
00689 } FLAC__StreamMetadata_CueSheet;
00690
00691 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN;
00692 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN;
00693 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN;
00694 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN;
00695 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN;
00702 typedef struct {
00703 FLAC__byte *data;
00704 } FLAC__StreamMetadata_Unknown;
00705
00706
00709 typedef struct {
00710 FLAC__MetadataType type;
00715 FLAC__bool is_last;
00718 unsigned length;
00721 union {
00722 FLAC__StreamMetadata_StreamInfo stream_info;
00723 FLAC__StreamMetadata_Padding padding;
00724 FLAC__StreamMetadata_Application application;
00725 FLAC__StreamMetadata_SeekTable seek_table;
00726 FLAC__StreamMetadata_VorbisComment vorbis_comment;
00727 FLAC__StreamMetadata_CueSheet cue_sheet;
00728 FLAC__StreamMetadata_Unknown unknown;
00729 } data;
00732 } FLAC__StreamMetadata;
00733
00734 extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN;
00735 extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN;
00736 extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN;
00739 #define FLAC__STREAM_METADATA_HEADER_LENGTH (4u)
00740
00741
00742
00743
00744
00745
00746
00747
00748
00749
00758 FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate);
00759
00772 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name);
00773
00788 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length);
00789
00804 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length);
00805
00806
00817 FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table);
00818
00819
00832 FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table);
00833
00834
00853 FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation);
00854
00855
00856
00857 #ifdef __cplusplus
00858 }
00859 #endif
00860
00861 #endif