FLAC
1.3.0
|
00001 /* libFLAC - Free Lossless Audio Codec library 00002 * Copyright (C) 2000-2009 Josh Coalson 00003 * Copyright (C) 2011-2013 Xiph.Org Foundation 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 00009 * - Redistributions of source code must retain the above copyright 00010 * notice, this list of conditions and the following disclaimer. 00011 * 00012 * - Redistributions in binary form must reproduce the above copyright 00013 * notice, this list of conditions and the following disclaimer in the 00014 * documentation and/or other materials provided with the distribution. 00015 * 00016 * - Neither the name of the Xiph.org Foundation nor the names of its 00017 * contributors may be used to endorse or promote products derived from 00018 * this software without specific prior written permission. 00019 * 00020 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00021 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00022 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00023 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR 00024 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00025 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00026 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00027 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00028 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00029 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00030 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 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 Most of the values described in this file are defined by the FLAC 00089 format specification. There is nothing to tune here. 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]; /* = "fLaC" */ 00172 00176 extern FLAC_API const unsigned FLAC__STREAM_SYNC; /* = 0x664C6143 */ 00177 00179 extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN; /* = 32 bits */ 00180 00182 #define FLAC__STREAM_SYNC_LENGTH (4u) 00183 00184 00185 /***************************************************************************** 00186 * 00187 * Subframe structures 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 * Frame structures 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 * Meta-data structures 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 * Utility functions 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