cannam@86: cannam@86: cannam@86: FLAC: include/FLAC/format.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:

format.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__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: 
cannam@86:
cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: cannam@86: