cannam@86: cannam@86:
cannam@86: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__FORMAT_H cannam@86: 00033 #define FLAC__FORMAT_H cannam@86: 00034 cannam@86: 00035 #include "export.h" cannam@86: 00036 #include "ordinals.h" cannam@86: 00037 cannam@86: 00038 #ifdef __cplusplus cannam@86: 00039 extern "C" { cannam@86: 00040 #endif cannam@86: 00041 cannam@86: 00086 /* cannam@86: 00087 Most of the values described in this file are defined by the FLAC cannam@86: 00088 format specification. There is nothing to tune here. cannam@86: 00089 */ cannam@86: 00090 cannam@86: 00092 #define FLAC__MAX_METADATA_TYPE_CODE (126u) cannam@86: 00093 cannam@86: 00095 #define FLAC__MIN_BLOCK_SIZE (16u) cannam@86: 00096 cannam@86: 00098 #define FLAC__MAX_BLOCK_SIZE (65535u) cannam@86: 00099 cannam@86: 00102 #define FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ (4608u) cannam@86: 00103 cannam@86: 00105 #define FLAC__MAX_CHANNELS (8u) cannam@86: 00106 cannam@86: 00108 #define FLAC__MIN_BITS_PER_SAMPLE (4u) cannam@86: 00109 cannam@86: 00111 #define FLAC__MAX_BITS_PER_SAMPLE (32u) cannam@86: 00112 cannam@86: 00121 #define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u) cannam@86: 00122 cannam@86: 00127 #define FLAC__MAX_SAMPLE_RATE (655350u) cannam@86: 00128 cannam@86: 00130 #define FLAC__MAX_LPC_ORDER (32u) cannam@86: 00131 cannam@86: 00134 #define FLAC__SUBSET_MAX_LPC_ORDER_48000HZ (12u) cannam@86: 00135 cannam@86: 00139 #define FLAC__MIN_QLP_COEFF_PRECISION (5u) cannam@86: 00140 cannam@86: 00144 #define FLAC__MAX_QLP_COEFF_PRECISION (15u) cannam@86: 00145 cannam@86: 00147 #define FLAC__MAX_FIXED_ORDER (4u) cannam@86: 00148 cannam@86: 00150 #define FLAC__MAX_RICE_PARTITION_ORDER (15u) cannam@86: 00151 cannam@86: 00153 #define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u) cannam@86: 00154 cannam@86: 00161 extern FLAC_API const char *FLAC__VERSION_STRING; cannam@86: 00162 cannam@86: 00167 extern FLAC_API const char *FLAC__VENDOR_STRING; cannam@86: 00168 cannam@86: 00170 extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4]; /* = "fLaC" */ cannam@86: 00171 cannam@86: 00175 extern FLAC_API const unsigned FLAC__STREAM_SYNC; /* = 0x664C6143 */ cannam@86: 00176 cannam@86: 00178 extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN; /* = 32 bits */ cannam@86: 00179 cannam@86: 00181 #define FLAC__STREAM_SYNC_LENGTH (4u) cannam@86: 00182 cannam@86: 00183 cannam@86: 00184 /***************************************************************************** cannam@86: 00185 * cannam@86: 00186 * Subframe structures cannam@86: 00187 * cannam@86: 00188 *****************************************************************************/ cannam@86: 00189 cannam@86: 00190 /*****************************************************************************/ cannam@86: 00191 cannam@86: 00193 typedef enum { cannam@86: 00194 FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0, cannam@86: 00198 FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 = 1 cannam@86: 00201 } FLAC__EntropyCodingMethodType; cannam@86: 00202 cannam@86: 00208 extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[]; cannam@86: 00209 cannam@86: 00210 cannam@86: 00213 typedef struct { cannam@86: 00214 cannam@86: 00215 unsigned *parameters; cannam@86: 00218 unsigned *raw_bits; cannam@86: 00223 unsigned capacity_by_order; cannam@86: 00228 } FLAC__EntropyCodingMethod_PartitionedRiceContents; cannam@86: 00229 cannam@86: 00232 typedef struct { cannam@86: 00233 cannam@86: 00234 unsigned order; cannam@86: 00237 const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents; cannam@86: 00240 } FLAC__EntropyCodingMethod_PartitionedRice; cannam@86: 00241 cannam@86: 00242 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN; cannam@86: 00243 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN; cannam@86: 00244 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN; cannam@86: 00245 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN; cannam@86: 00247 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER; cannam@86: 00249 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER; cannam@86: 00254 typedef struct { cannam@86: 00255 FLAC__EntropyCodingMethodType type; cannam@86: 00256 union { cannam@86: 00257 FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice; cannam@86: 00258 } data; cannam@86: 00259 } FLAC__EntropyCodingMethod; cannam@86: 00260 cannam@86: 00261 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN; cannam@86: 00263 /*****************************************************************************/ cannam@86: 00264 cannam@86: 00266 typedef enum { cannam@86: 00267 FLAC__SUBFRAME_TYPE_CONSTANT = 0, cannam@86: 00268 FLAC__SUBFRAME_TYPE_VERBATIM = 1, cannam@86: 00269 FLAC__SUBFRAME_TYPE_FIXED = 2, cannam@86: 00270 FLAC__SUBFRAME_TYPE_LPC = 3 cannam@86: 00271 } FLAC__SubframeType; cannam@86: 00272 cannam@86: 00278 extern FLAC_API const char * const FLAC__SubframeTypeString[]; cannam@86: 00279 cannam@86: 00280 cannam@86: 00283 typedef struct { cannam@86: 00284 FLAC__int32 value; cannam@86: 00285 } FLAC__Subframe_Constant; cannam@86: 00286 cannam@86: 00287 cannam@86: 00290 typedef struct { cannam@86: 00291 const FLAC__int32 *data; cannam@86: 00292 } FLAC__Subframe_Verbatim; cannam@86: 00293 cannam@86: 00294 cannam@86: 00297 typedef struct { cannam@86: 00298 FLAC__EntropyCodingMethod entropy_coding_method; cannam@86: 00301 unsigned order; cannam@86: 00304 FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER]; cannam@86: 00307 const FLAC__int32 *residual; cannam@86: 00309 } FLAC__Subframe_Fixed; cannam@86: 00310 cannam@86: 00311 cannam@86: 00314 typedef struct { cannam@86: 00315 FLAC__EntropyCodingMethod entropy_coding_method; cannam@86: 00318 unsigned order; cannam@86: 00321 unsigned qlp_coeff_precision; cannam@86: 00324 int quantization_level; cannam@86: 00327 FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER]; cannam@86: 00330 FLAC__int32 warmup[FLAC__MAX_LPC_ORDER]; cannam@86: 00333 const FLAC__int32 *residual; cannam@86: 00335 } FLAC__Subframe_LPC; cannam@86: 00336 cannam@86: 00337 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN; cannam@86: 00338 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN; cannam@86: 00343 typedef struct { cannam@86: 00344 FLAC__SubframeType type; cannam@86: 00345 union { cannam@86: 00346 FLAC__Subframe_Constant constant; cannam@86: 00347 FLAC__Subframe_Fixed fixed; cannam@86: 00348 FLAC__Subframe_LPC lpc; cannam@86: 00349 FLAC__Subframe_Verbatim verbatim; cannam@86: 00350 } data; cannam@86: 00351 unsigned wasted_bits; cannam@86: 00352 } FLAC__Subframe; cannam@86: 00353 cannam@86: 00361 extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN; cannam@86: 00362 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN; cannam@86: 00363 extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN; cannam@86: 00365 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK; cannam@86: 00366 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK; cannam@86: 00367 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK; cannam@86: 00368 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK; cannam@86: 00370 /*****************************************************************************/ cannam@86: 00371 cannam@86: 00372 cannam@86: 00373 /***************************************************************************** cannam@86: 00374 * cannam@86: 00375 * Frame structures cannam@86: 00376 * cannam@86: 00377 *****************************************************************************/ cannam@86: 00378 cannam@86: 00380 typedef enum { cannam@86: 00381 FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0, cannam@86: 00382 FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1, cannam@86: 00383 FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2, cannam@86: 00384 FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3 cannam@86: 00385 } FLAC__ChannelAssignment; cannam@86: 00386 cannam@86: 00392 extern FLAC_API const char * const FLAC__ChannelAssignmentString[]; cannam@86: 00393 cannam@86: 00395 typedef enum { cannam@86: 00396 FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER, cannam@86: 00397 FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER cannam@86: 00398 } FLAC__FrameNumberType; cannam@86: 00399 cannam@86: 00405 extern FLAC_API const char * const FLAC__FrameNumberTypeString[]; cannam@86: 00406 cannam@86: 00407 cannam@86: 00410 typedef struct { cannam@86: 00411 unsigned blocksize; cannam@86: 00414 unsigned sample_rate; cannam@86: 00417 unsigned channels; cannam@86: 00420 FLAC__ChannelAssignment channel_assignment; cannam@86: 00423 unsigned bits_per_sample; cannam@86: 00426 FLAC__FrameNumberType number_type; cannam@86: 00431 union { cannam@86: 00432 FLAC__uint32 frame_number; cannam@86: 00433 FLAC__uint64 sample_number; cannam@86: 00434 } number; cannam@86: 00438 FLAC__uint8 crc; cannam@86: 00443 } FLAC__FrameHeader; cannam@86: 00444 cannam@86: 00445 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC; cannam@86: 00446 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN; cannam@86: 00447 extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN; cannam@86: 00448 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN; cannam@86: 00449 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN; cannam@86: 00450 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN; cannam@86: 00451 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN; cannam@86: 00452 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN; cannam@86: 00453 extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN; cannam@86: 00454 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN; cannam@86: 00459 typedef struct { cannam@86: 00460 FLAC__uint16 crc; cannam@86: 00465 } FLAC__FrameFooter; cannam@86: 00466 cannam@86: 00467 extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN; cannam@86: 00472 typedef struct { cannam@86: 00473 FLAC__FrameHeader header; cannam@86: 00474 FLAC__Subframe subframes[FLAC__MAX_CHANNELS]; cannam@86: 00475 FLAC__FrameFooter footer; cannam@86: 00476 } FLAC__Frame; cannam@86: 00477 cannam@86: 00478 /*****************************************************************************/ cannam@86: 00479 cannam@86: 00480 cannam@86: 00481 /***************************************************************************** cannam@86: 00482 * cannam@86: 00483 * Meta-data structures cannam@86: 00484 * cannam@86: 00485 *****************************************************************************/ cannam@86: 00486 cannam@86: 00488 typedef enum { cannam@86: 00489 cannam@86: 00490 FLAC__METADATA_TYPE_STREAMINFO = 0, cannam@86: 00493 FLAC__METADATA_TYPE_PADDING = 1, cannam@86: 00496 FLAC__METADATA_TYPE_APPLICATION = 2, cannam@86: 00499 FLAC__METADATA_TYPE_SEEKTABLE = 3, cannam@86: 00502 FLAC__METADATA_TYPE_VORBIS_COMMENT = 4, cannam@86: 00505 FLAC__METADATA_TYPE_CUESHEET = 5, cannam@86: 00508 FLAC__METADATA_TYPE_PICTURE = 6, cannam@86: 00511 FLAC__METADATA_TYPE_UNDEFINED = 7 cannam@86: 00514 } FLAC__MetadataType; cannam@86: 00515 cannam@86: 00521 extern FLAC_API const char * const FLAC__MetadataTypeString[]; cannam@86: 00522 cannam@86: 00523 cannam@86: 00526 typedef struct { cannam@86: 00527 unsigned min_blocksize, max_blocksize; cannam@86: 00528 unsigned min_framesize, max_framesize; cannam@86: 00529 unsigned sample_rate; cannam@86: 00530 unsigned channels; cannam@86: 00531 unsigned bits_per_sample; cannam@86: 00532 FLAC__uint64 total_samples; cannam@86: 00533 FLAC__byte md5sum[16]; cannam@86: 00534 } FLAC__StreamMetadata_StreamInfo; cannam@86: 00535 cannam@86: 00536 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN; cannam@86: 00537 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN; cannam@86: 00538 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN; cannam@86: 00539 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN; cannam@86: 00540 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN; cannam@86: 00541 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN; cannam@86: 00542 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN; cannam@86: 00543 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN; cannam@86: 00544 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN; cannam@86: 00547 #define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u) cannam@86: 00548 cannam@86: 00551 typedef struct { cannam@86: 00552 int dummy; cannam@86: 00557 } FLAC__StreamMetadata_Padding; cannam@86: 00558 cannam@86: 00559 cannam@86: 00562 typedef struct { cannam@86: 00563 FLAC__byte id[4]; cannam@86: 00564 FLAC__byte *data; cannam@86: 00565 } FLAC__StreamMetadata_Application; cannam@86: 00566 cannam@86: 00567 extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN; cannam@86: 00571 typedef struct { cannam@86: 00572 FLAC__uint64 sample_number; cannam@86: 00575 FLAC__uint64 stream_offset; cannam@86: 00579 unsigned frame_samples; cannam@86: 00581 } FLAC__StreamMetadata_SeekPoint; cannam@86: 00582 cannam@86: 00583 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN; cannam@86: 00584 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN; cannam@86: 00585 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN; cannam@86: 00588 #define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u) cannam@86: 00589 cannam@86: 00594 extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER; cannam@86: 00595 cannam@86: 00596 cannam@86: 00609 typedef struct { cannam@86: 00610 unsigned num_points; cannam@86: 00611 FLAC__StreamMetadata_SeekPoint *points; cannam@86: 00612 } FLAC__StreamMetadata_SeekTable; cannam@86: 00613 cannam@86: 00614 cannam@86: 00621 typedef struct { cannam@86: 00622 FLAC__uint32 length; cannam@86: 00623 FLAC__byte *entry; cannam@86: 00624 } FLAC__StreamMetadata_VorbisComment_Entry; cannam@86: 00625 cannam@86: 00626 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN; cannam@86: 00631 typedef struct { cannam@86: 00632 FLAC__StreamMetadata_VorbisComment_Entry vendor_string; cannam@86: 00633 FLAC__uint32 num_comments; cannam@86: 00634 FLAC__StreamMetadata_VorbisComment_Entry *comments; cannam@86: 00635 } FLAC__StreamMetadata_VorbisComment; cannam@86: 00636 cannam@86: 00637 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN; cannam@86: 00644 typedef struct { cannam@86: 00645 FLAC__uint64 offset; cannam@86: 00650 FLAC__byte number; cannam@86: 00652 } FLAC__StreamMetadata_CueSheet_Index; cannam@86: 00653 cannam@86: 00654 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN; cannam@86: 00655 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN; cannam@86: 00656 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN; cannam@86: 00663 typedef struct { cannam@86: 00664 FLAC__uint64 offset; cannam@86: 00667 FLAC__byte number; cannam@86: 00670 char isrc[13]; cannam@86: 00673 unsigned type:1; cannam@86: 00676 unsigned pre_emphasis:1; cannam@86: 00679 FLAC__byte num_indices; cannam@86: 00682 FLAC__StreamMetadata_CueSheet_Index *indices; cannam@86: 00685 } FLAC__StreamMetadata_CueSheet_Track; cannam@86: 00686 cannam@86: 00687 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN; cannam@86: 00688 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN; cannam@86: 00689 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN; cannam@86: 00690 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN; cannam@86: 00691 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN; cannam@86: 00692 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN; cannam@86: 00693 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN; cannam@86: 00700 typedef struct { cannam@86: 00701 char media_catalog_number[129]; cannam@86: 00707 FLAC__uint64 lead_in; cannam@86: 00710 FLAC__bool is_cd; cannam@86: 00713 unsigned num_tracks; cannam@86: 00716 FLAC__StreamMetadata_CueSheet_Track *tracks; cannam@86: 00719 } FLAC__StreamMetadata_CueSheet; cannam@86: 00720 cannam@86: 00721 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN; cannam@86: 00722 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN; cannam@86: 00723 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN; cannam@86: 00724 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN; cannam@86: 00725 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN; cannam@86: 00729 typedef enum { cannam@86: 00730 FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0, cannam@86: 00731 FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1, cannam@86: 00732 FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2, cannam@86: 00733 FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3, cannam@86: 00734 FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4, cannam@86: 00735 FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5, cannam@86: 00736 FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6, cannam@86: 00737 FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7, cannam@86: 00738 FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8, cannam@86: 00739 FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9, cannam@86: 00740 FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10, cannam@86: 00741 FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11, cannam@86: 00742 FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12, cannam@86: 00743 FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13, cannam@86: 00744 FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14, cannam@86: 00745 FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15, cannam@86: 00746 FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16, cannam@86: 00747 FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17, cannam@86: 00748 FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18, cannam@86: 00749 FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19, cannam@86: 00750 FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20, cannam@86: 00751 FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED cannam@86: 00752 } FLAC__StreamMetadata_Picture_Type; cannam@86: 00753 cannam@86: 00760 extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[]; cannam@86: 00761 cannam@86: 00766 typedef struct { cannam@86: 00767 FLAC__StreamMetadata_Picture_Type type; cannam@86: 00770 char *mime_type; cannam@86: 00781 FLAC__byte *description; cannam@86: 00788 FLAC__uint32 width; cannam@86: 00791 FLAC__uint32 height; cannam@86: 00794 FLAC__uint32 depth; cannam@86: 00797 FLAC__uint32 colors; cannam@86: 00802 FLAC__uint32 data_length; cannam@86: 00805 FLAC__byte *data; cannam@86: 00808 } FLAC__StreamMetadata_Picture; cannam@86: 00809 cannam@86: 00810 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN; cannam@86: 00811 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN; cannam@86: 00812 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN; cannam@86: 00813 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN; cannam@86: 00814 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN; cannam@86: 00815 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN; cannam@86: 00816 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN; cannam@86: 00817 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN; cannam@86: 00824 typedef struct { cannam@86: 00825 FLAC__byte *data; cannam@86: 00826 } FLAC__StreamMetadata_Unknown; cannam@86: 00827 cannam@86: 00828 cannam@86: 00831 typedef struct { cannam@86: 00832 FLAC__MetadataType type; cannam@86: 00837 FLAC__bool is_last; cannam@86: 00840 unsigned length; cannam@86: 00843 union { cannam@86: 00844 FLAC__StreamMetadata_StreamInfo stream_info; cannam@86: 00845 FLAC__StreamMetadata_Padding padding; cannam@86: 00846 FLAC__StreamMetadata_Application application; cannam@86: 00847 FLAC__StreamMetadata_SeekTable seek_table; cannam@86: 00848 FLAC__StreamMetadata_VorbisComment vorbis_comment; cannam@86: 00849 FLAC__StreamMetadata_CueSheet cue_sheet; cannam@86: 00850 FLAC__StreamMetadata_Picture picture; cannam@86: 00851 FLAC__StreamMetadata_Unknown unknown; cannam@86: 00852 } data; cannam@86: 00855 } FLAC__StreamMetadata; cannam@86: 00856 cannam@86: 00857 extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN; cannam@86: 00858 extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN; cannam@86: 00859 extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN; cannam@86: 00862 #define FLAC__STREAM_METADATA_HEADER_LENGTH (4u) cannam@86: 00863 cannam@86: 00864 /*****************************************************************************/ cannam@86: 00865 cannam@86: 00866 cannam@86: 00867 /***************************************************************************** cannam@86: 00868 * cannam@86: 00869 * Utility functions cannam@86: 00870 * cannam@86: 00871 *****************************************************************************/ cannam@86: 00872 cannam@86: 00880 FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate); cannam@86: 00881 cannam@86: 00891 FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate); cannam@86: 00892 cannam@86: 00905 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name); cannam@86: 00906 cannam@86: 00921 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length); cannam@86: 00922 cannam@86: 00938 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length); cannam@86: 00939 cannam@86: 00950 FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table); cannam@86: 00951 cannam@86: 00964 FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table); cannam@86: 00965 cannam@86: 00984 FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation); cannam@86: 00985 cannam@86: 01002 FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation); cannam@86: 01003 cannam@86: 01004 /* \} */ cannam@86: 01005 cannam@86: 01006 #ifdef __cplusplus cannam@86: 01007 } cannam@86: 01008 #endif cannam@86: 01009 cannam@86: 01010 #endif cannam@86: