format.h
Go to the documentation of this file.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
00033 #ifndef FLAC__FORMAT_H
00034 #define FLAC__FORMAT_H
00035
00036 #include "export.h"
00037 #include "ordinals.h"
00038
00039 #ifdef __cplusplus
00040 extern "C" {
00041 #endif
00042
00087
00088
00089
00090
00091
00093 #define FLAC__MAX_METADATA_TYPE_CODE (126u)
00094
00096 #define FLAC__MIN_BLOCK_SIZE (16u)
00097
00099 #define FLAC__MAX_BLOCK_SIZE (65535u)
00100
00103 #define FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ (4608u)
00104
00106 #define FLAC__MAX_CHANNELS (8u)
00107
00109 #define FLAC__MIN_BITS_PER_SAMPLE (4u)
00110
00112 #define FLAC__MAX_BITS_PER_SAMPLE (32u)
00113
00122 #define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u)
00123
00128 #define FLAC__MAX_SAMPLE_RATE (655350u)
00129
00131 #define FLAC__MAX_LPC_ORDER (32u)
00132
00135 #define FLAC__SUBSET_MAX_LPC_ORDER_48000HZ (12u)
00136
00140 #define FLAC__MIN_QLP_COEFF_PRECISION (5u)
00141
00145 #define FLAC__MAX_QLP_COEFF_PRECISION (15u)
00146
00148 #define FLAC__MAX_FIXED_ORDER (4u)
00149
00151 #define FLAC__MAX_RICE_PARTITION_ORDER (15u)
00152
00154 #define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u)
00155
00162 extern FLAC_API const char *FLAC__VERSION_STRING;
00163
00168 extern FLAC_API const char *FLAC__VENDOR_STRING;
00169
00171 extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4];
00172
00176 extern FLAC_API const unsigned FLAC__STREAM_SYNC;
00177
00179 extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN;
00180
00182 #define FLAC__STREAM_SYNC_LENGTH (4u)
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
00194 typedef enum {
00195 FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0,
00199 FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 = 1
00202 } FLAC__EntropyCodingMethodType;
00203
00209 extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[];
00210
00211
00214 typedef struct {
00215
00216 unsigned *parameters;
00219 unsigned *raw_bits;
00224 unsigned capacity_by_order;
00229 } FLAC__EntropyCodingMethod_PartitionedRiceContents;
00230
00233 typedef struct {
00234
00235 unsigned order;
00238 const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents;
00241 } FLAC__EntropyCodingMethod_PartitionedRice;
00242
00243 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN;
00244 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN;
00245 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN;
00246 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN;
00248 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
00250 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER;
00255 typedef struct {
00256 FLAC__EntropyCodingMethodType type;
00257 union {
00258 FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice;
00259 } data;
00260 } FLAC__EntropyCodingMethod;
00261
00262 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN;
00264
00265
00267 typedef enum {
00268 FLAC__SUBFRAME_TYPE_CONSTANT = 0,
00269 FLAC__SUBFRAME_TYPE_VERBATIM = 1,
00270 FLAC__SUBFRAME_TYPE_FIXED = 2,
00271 FLAC__SUBFRAME_TYPE_LPC = 3
00272 } FLAC__SubframeType;
00273
00279 extern FLAC_API const char * const FLAC__SubframeTypeString[];
00280
00281
00284 typedef struct {
00285 FLAC__int32 value;
00286 } FLAC__Subframe_Constant;
00287
00288
00291 typedef struct {
00292 const FLAC__int32 *data;
00293 } FLAC__Subframe_Verbatim;
00294
00295
00298 typedef struct {
00299 FLAC__EntropyCodingMethod entropy_coding_method;
00302 unsigned order;
00305 FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER];
00308 const FLAC__int32 *residual;
00310 } FLAC__Subframe_Fixed;
00311
00312
00315 typedef struct {
00316 FLAC__EntropyCodingMethod entropy_coding_method;
00319 unsigned order;
00322 unsigned qlp_coeff_precision;
00325 int quantization_level;
00328 FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER];
00331 FLAC__int32 warmup[FLAC__MAX_LPC_ORDER];
00334 const FLAC__int32 *residual;
00336 } FLAC__Subframe_LPC;
00337
00338 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN;
00339 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN;
00344 typedef struct {
00345 FLAC__SubframeType type;
00346 union {
00347 FLAC__Subframe_Constant constant;
00348 FLAC__Subframe_Fixed fixed;
00349 FLAC__Subframe_LPC lpc;
00350 FLAC__Subframe_Verbatim verbatim;
00351 } data;
00352 unsigned wasted_bits;
00353 } FLAC__Subframe;
00354
00362 extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN;
00363 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN;
00364 extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN;
00366 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK;
00367 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK;
00368 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK;
00369 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK;
00371
00372
00373
00374
00375
00376
00377
00378
00379
00381 typedef enum {
00382 FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0,
00383 FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1,
00384 FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2,
00385 FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3
00386 } FLAC__ChannelAssignment;
00387
00393 extern FLAC_API const char * const FLAC__ChannelAssignmentString[];
00394
00396 typedef enum {
00397 FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER,
00398 FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER
00399 } FLAC__FrameNumberType;
00400
00406 extern FLAC_API const char * const FLAC__FrameNumberTypeString[];
00407
00408
00411 typedef struct {
00412 unsigned blocksize;
00415 unsigned sample_rate;
00418 unsigned channels;
00421 FLAC__ChannelAssignment channel_assignment;
00424 unsigned bits_per_sample;
00427 FLAC__FrameNumberType number_type;
00432 union {
00433 FLAC__uint32 frame_number;
00434 FLAC__uint64 sample_number;
00435 } number;
00439 FLAC__uint8 crc;
00444 } FLAC__FrameHeader;
00445
00446 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC;
00447 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN;
00448 extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN;
00449 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN;
00450 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN;
00451 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN;
00452 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN;
00453 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN;
00454 extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN;
00455 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN;
00460 typedef struct {
00461 FLAC__uint16 crc;
00466 } FLAC__FrameFooter;
00467
00468 extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN;
00473 typedef struct {
00474 FLAC__FrameHeader header;
00475 FLAC__Subframe subframes[FLAC__MAX_CHANNELS];
00476 FLAC__FrameFooter footer;
00477 } FLAC__Frame;
00478
00479
00480
00481
00482
00483
00484
00485
00486
00487
00489 typedef enum {
00490
00491 FLAC__METADATA_TYPE_STREAMINFO = 0,
00494 FLAC__METADATA_TYPE_PADDING = 1,
00497 FLAC__METADATA_TYPE_APPLICATION = 2,
00500 FLAC__METADATA_TYPE_SEEKTABLE = 3,
00503 FLAC__METADATA_TYPE_VORBIS_COMMENT = 4,
00506 FLAC__METADATA_TYPE_CUESHEET = 5,
00509 FLAC__METADATA_TYPE_PICTURE = 6,
00512 FLAC__METADATA_TYPE_UNDEFINED = 7
00515 } FLAC__MetadataType;
00516
00522 extern FLAC_API const char * const FLAC__MetadataTypeString[];
00523
00524
00527 typedef struct {
00528 unsigned min_blocksize, max_blocksize;
00529 unsigned min_framesize, max_framesize;
00530 unsigned sample_rate;
00531 unsigned channels;
00532 unsigned bits_per_sample;
00533 FLAC__uint64 total_samples;
00534 FLAC__byte md5sum[16];
00535 } FLAC__StreamMetadata_StreamInfo;
00536
00537 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN;
00538 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN;
00539 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN;
00540 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN;
00541 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN;
00542 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN;
00543 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN;
00544 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN;
00545 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN;
00548 #define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u)
00549
00552 typedef struct {
00553 int dummy;
00558 } FLAC__StreamMetadata_Padding;
00559
00560
00563 typedef struct {
00564 FLAC__byte id[4];
00565 FLAC__byte *data;
00566 } FLAC__StreamMetadata_Application;
00567
00568 extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN;
00572 typedef struct {
00573 FLAC__uint64 sample_number;
00576 FLAC__uint64 stream_offset;
00580 unsigned frame_samples;
00582 } FLAC__StreamMetadata_SeekPoint;
00583
00584 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN;
00585 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN;
00586 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN;
00589 #define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u)
00590
00595 extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
00596
00597
00610 typedef struct {
00611 unsigned num_points;
00612 FLAC__StreamMetadata_SeekPoint *points;
00613 } FLAC__StreamMetadata_SeekTable;
00614
00615
00622 typedef struct {
00623 FLAC__uint32 length;
00624 FLAC__byte *entry;
00625 } FLAC__StreamMetadata_VorbisComment_Entry;
00626
00627 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN;
00632 typedef struct {
00633 FLAC__StreamMetadata_VorbisComment_Entry vendor_string;
00634 FLAC__uint32 num_comments;
00635 FLAC__StreamMetadata_VorbisComment_Entry *comments;
00636 } FLAC__StreamMetadata_VorbisComment;
00637
00638 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN;
00645 typedef struct {
00646 FLAC__uint64 offset;
00651 FLAC__byte number;
00653 } FLAC__StreamMetadata_CueSheet_Index;
00654
00655 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN;
00656 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN;
00657 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN;
00664 typedef struct {
00665 FLAC__uint64 offset;
00668 FLAC__byte number;
00671 char isrc[13];
00674 unsigned type:1;
00677 unsigned pre_emphasis:1;
00680 FLAC__byte num_indices;
00683 FLAC__StreamMetadata_CueSheet_Index *indices;
00686 } FLAC__StreamMetadata_CueSheet_Track;
00687
00688 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN;
00689 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN;
00690 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN;
00691 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN;
00692 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN;
00693 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN;
00694 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN;
00701 typedef struct {
00702 char media_catalog_number[129];
00708 FLAC__uint64 lead_in;
00711 FLAC__bool is_cd;
00714 unsigned num_tracks;
00717 FLAC__StreamMetadata_CueSheet_Track *tracks;
00720 } FLAC__StreamMetadata_CueSheet;
00721
00722 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN;
00723 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN;
00724 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN;
00725 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN;
00726 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN;
00730 typedef enum {
00731 FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0,
00732 FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1,
00733 FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2,
00734 FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3,
00735 FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4,
00736 FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5,
00737 FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6,
00738 FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7,
00739 FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8,
00740 FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9,
00741 FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10,
00742 FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11,
00743 FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12,
00744 FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13,
00745 FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14,
00746 FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15,
00747 FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16,
00748 FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17,
00749 FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18,
00750 FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19,
00751 FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20,
00752 FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED
00753 } FLAC__StreamMetadata_Picture_Type;
00754
00761 extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[];
00762
00767 typedef struct {
00768 FLAC__StreamMetadata_Picture_Type type;
00771 char *mime_type;
00782 FLAC__byte *description;
00789 FLAC__uint32 width;
00792 FLAC__uint32 height;
00795 FLAC__uint32 depth;
00798 FLAC__uint32 colors;
00803 FLAC__uint32 data_length;
00806 FLAC__byte *data;
00809 } FLAC__StreamMetadata_Picture;
00810
00811 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN;
00812 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN;
00813 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN;
00814 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN;
00815 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN;
00816 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN;
00817 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN;
00818 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN;
00825 typedef struct {
00826 FLAC__byte *data;
00827 } FLAC__StreamMetadata_Unknown;
00828
00829
00832 typedef struct {
00833 FLAC__MetadataType type;
00838 FLAC__bool is_last;
00841 unsigned length;
00844 union {
00845 FLAC__StreamMetadata_StreamInfo stream_info;
00846 FLAC__StreamMetadata_Padding padding;
00847 FLAC__StreamMetadata_Application application;
00848 FLAC__StreamMetadata_SeekTable seek_table;
00849 FLAC__StreamMetadata_VorbisComment vorbis_comment;
00850 FLAC__StreamMetadata_CueSheet cue_sheet;
00851 FLAC__StreamMetadata_Picture picture;
00852 FLAC__StreamMetadata_Unknown unknown;
00853 } data;
00856 } FLAC__StreamMetadata;
00857
00858 extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN;
00859 extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN;
00860 extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN;
00863 #define FLAC__STREAM_METADATA_HEADER_LENGTH (4u)
00864
00865
00866
00867
00868
00869
00870
00871
00872
00873
00881 FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate);
00882
00893 FLAC_API FLAC__bool FLAC__format_blocksize_is_subset(unsigned blocksize, unsigned sample_rate);
00894
00904 FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate);
00905
00918 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name);
00919
00934 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length);
00935
00951 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length);
00952
00963 FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table);
00964
00977 FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table);
00978
00997 FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation);
00998
01015 FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation);
01016
01017
01018
01019 #ifdef __cplusplus
01020 }
01021 #endif
01022
01023 #endif