Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members

format.h

Go to the documentation of this file.
00001 /* libFLAC - Free Lossless Audio Codec library
00002  * Copyright (C) 2000,2001,2002,2003,2004,2005,2006,2007  Josh Coalson
00003  *
00004  * Redistribution and use in source and binary forms, with or without
00005  * modification, are permitted provided that the following conditions
00006  * are met:
00007  *
00008  * - Redistributions of source code must retain the above copyright
00009  * notice, this list of conditions and the following disclaimer.
00010  *
00011  * - Redistributions in binary form must reproduce the above copyright
00012  * notice, this list of conditions and the following disclaimer in the
00013  * documentation and/or other materials provided with the distribution.
00014  *
00015  * - Neither the name of the Xiph.org Foundation nor the names of its
00016  * contributors may be used to endorse or promote products derived from
00017  * this software without specific prior written permission.
00018  *
00019  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00020  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00021  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00022  * A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
00023  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00024  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00025  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00026  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00027  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00028  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00029  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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     Most of the values described in this file are defined by the FLAC
00088     format specification.  There is nothing to tune here.
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 
00102 #define FLAC__SUBSET_MAX_BLOCK_SIZE_48000HZ (4608u)
00103 
00105 #define FLAC__MAX_CHANNELS (8u)
00106 
00108 #define FLAC__MIN_BITS_PER_SAMPLE (4u)
00109 
00111 #define FLAC__MAX_BITS_PER_SAMPLE (32u)
00112 
00121 #define FLAC__REFERENCE_CODEC_MAX_BITS_PER_SAMPLE (24u)
00122 
00127 #define FLAC__MAX_SAMPLE_RATE (655350u)
00128 
00130 #define FLAC__MAX_LPC_ORDER (32u)
00131 
00134 #define FLAC__SUBSET_MAX_LPC_ORDER_48000HZ (12u)
00135 
00139 #define FLAC__MIN_QLP_COEFF_PRECISION (5u)
00140 
00144 #define FLAC__MAX_QLP_COEFF_PRECISION (15u)
00145 
00147 #define FLAC__MAX_FIXED_ORDER (4u)
00148 
00150 #define FLAC__MAX_RICE_PARTITION_ORDER (15u)
00151 
00153 #define FLAC__SUBSET_MAX_RICE_PARTITION_ORDER (8u)
00154 
00161 extern FLAC_API const char *FLAC__VERSION_STRING;
00162 
00167 extern FLAC_API const char *FLAC__VENDOR_STRING;
00168 
00170 extern FLAC_API const FLAC__byte FLAC__STREAM_SYNC_STRING[4]; /* = "fLaC" */
00171 
00175 extern FLAC_API const unsigned FLAC__STREAM_SYNC; /* = 0x664C6143 */
00176 
00178 extern FLAC_API const unsigned FLAC__STREAM_SYNC_LEN; /* = 32 bits */
00179 
00181 #define FLAC__STREAM_SYNC_LENGTH (4u)
00182 
00183 
00184 /*****************************************************************************
00185  *
00186  * Subframe structures
00187  *
00188  *****************************************************************************/
00189 
00190 /*****************************************************************************/
00191 
00193 typedef enum {
00194     FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE = 0,
00198     FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2 = 1
00201 } FLAC__EntropyCodingMethodType;
00202 
00208 extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[];
00209 
00210 
00213 typedef struct {
00214 
00215     unsigned *parameters;
00218     unsigned *raw_bits;
00223     unsigned capacity_by_order;
00228 } FLAC__EntropyCodingMethod_PartitionedRiceContents;
00229 
00232 typedef struct {
00233 
00234     unsigned order;
00237     const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents;
00240 } FLAC__EntropyCodingMethod_PartitionedRice;
00241 
00242 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN; 
00243 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN; 
00244 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_PARAMETER_LEN; 
00245 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN; 
00247 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
00249 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE2_ESCAPE_PARAMETER;
00254 typedef struct {
00255     FLAC__EntropyCodingMethodType type;
00256     union {
00257         FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice;
00258     } data;
00259 } FLAC__EntropyCodingMethod;
00260 
00261 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN; 
00263 /*****************************************************************************/
00264 
00266 typedef enum {
00267     FLAC__SUBFRAME_TYPE_CONSTANT = 0, 
00268     FLAC__SUBFRAME_TYPE_VERBATIM = 1, 
00269     FLAC__SUBFRAME_TYPE_FIXED = 2, 
00270     FLAC__SUBFRAME_TYPE_LPC = 3 
00271 } FLAC__SubframeType;
00272 
00278 extern FLAC_API const char * const FLAC__SubframeTypeString[];
00279 
00280 
00283 typedef struct {
00284     FLAC__int32 value; 
00285 } FLAC__Subframe_Constant;
00286 
00287 
00290 typedef struct {
00291     const FLAC__int32 *data; 
00292 } FLAC__Subframe_Verbatim;
00293 
00294 
00297 typedef struct {
00298     FLAC__EntropyCodingMethod entropy_coding_method;
00301     unsigned order;
00304     FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER];
00307     const FLAC__int32 *residual;
00309 } FLAC__Subframe_Fixed;
00310 
00311 
00314 typedef struct {
00315     FLAC__EntropyCodingMethod entropy_coding_method;
00318     unsigned order;
00321     unsigned qlp_coeff_precision;
00324     int quantization_level;
00327     FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER];
00330     FLAC__int32 warmup[FLAC__MAX_LPC_ORDER];
00333     const FLAC__int32 *residual;
00335 } FLAC__Subframe_LPC;
00336 
00337 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN; 
00338 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN; 
00343 typedef struct {
00344     FLAC__SubframeType type;
00345     union {
00346         FLAC__Subframe_Constant constant;
00347         FLAC__Subframe_Fixed fixed;
00348         FLAC__Subframe_LPC lpc;
00349         FLAC__Subframe_Verbatim verbatim;
00350     } data;
00351     unsigned wasted_bits;
00352 } FLAC__Subframe;
00353 
00361 extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN;
00362 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN; 
00363 extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN; 
00365 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK; 
00366 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK; 
00367 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK; 
00368 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK; 
00370 /*****************************************************************************/
00371 
00372 
00373 /*****************************************************************************
00374  *
00375  * Frame structures
00376  *
00377  *****************************************************************************/
00378 
00380 typedef enum {
00381     FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0, 
00382     FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1, 
00383     FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2, 
00384     FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3 
00385 } FLAC__ChannelAssignment;
00386 
00392 extern FLAC_API const char * const FLAC__ChannelAssignmentString[];
00393 
00395 typedef enum {
00396     FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER, 
00397     FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER 
00398 } FLAC__FrameNumberType;
00399 
00405 extern FLAC_API const char * const FLAC__FrameNumberTypeString[];
00406 
00407 
00410 typedef struct {
00411     unsigned blocksize;
00414     unsigned sample_rate;
00417     unsigned channels;
00420     FLAC__ChannelAssignment channel_assignment;
00423     unsigned bits_per_sample;
00426     FLAC__FrameNumberType number_type;
00431     union {
00432         FLAC__uint32 frame_number;
00433         FLAC__uint64 sample_number;
00434     } number;
00438     FLAC__uint8 crc;
00443 } FLAC__FrameHeader;
00444 
00445 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC; 
00446 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN; 
00447 extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN; 
00448 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCKING_STRATEGY_LEN; 
00449 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN; 
00450 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN; 
00451 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN; 
00452 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN; 
00453 extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN; 
00454 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN; 
00459 typedef struct {
00460     FLAC__uint16 crc;
00465 } FLAC__FrameFooter;
00466 
00467 extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN; 
00472 typedef struct {
00473     FLAC__FrameHeader header;
00474     FLAC__Subframe subframes[FLAC__MAX_CHANNELS];
00475     FLAC__FrameFooter footer;
00476 } FLAC__Frame;
00477 
00478 /*****************************************************************************/
00479 
00480 
00481 /*****************************************************************************
00482  *
00483  * Meta-data structures
00484  *
00485  *****************************************************************************/
00486 
00488 typedef enum {
00489 
00490     FLAC__METADATA_TYPE_STREAMINFO = 0,
00493     FLAC__METADATA_TYPE_PADDING = 1,
00496     FLAC__METADATA_TYPE_APPLICATION = 2,
00499     FLAC__METADATA_TYPE_SEEKTABLE = 3,
00502     FLAC__METADATA_TYPE_VORBIS_COMMENT = 4,
00505     FLAC__METADATA_TYPE_CUESHEET = 5,
00508     FLAC__METADATA_TYPE_PICTURE = 6,
00511     FLAC__METADATA_TYPE_UNDEFINED = 7
00514 } FLAC__MetadataType;
00515 
00521 extern FLAC_API const char * const FLAC__MetadataTypeString[];
00522 
00523 
00526 typedef struct {
00527     unsigned min_blocksize, max_blocksize;
00528     unsigned min_framesize, max_framesize;
00529     unsigned sample_rate;
00530     unsigned channels;
00531     unsigned bits_per_sample;
00532     FLAC__uint64 total_samples;
00533     FLAC__byte md5sum[16];
00534 } FLAC__StreamMetadata_StreamInfo;
00535 
00536 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN; 
00537 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN; 
00538 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN; 
00539 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN; 
00540 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN; 
00541 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN; 
00542 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN; 
00543 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN; 
00544 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN; 
00547 #define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u)
00548 
00551 typedef struct {
00552     int dummy;
00557 } FLAC__StreamMetadata_Padding;
00558 
00559 
00562 typedef struct {
00563     FLAC__byte id[4];
00564     FLAC__byte *data;
00565 } FLAC__StreamMetadata_Application;
00566 
00567 extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN; 
00571 typedef struct {
00572     FLAC__uint64 sample_number;
00575     FLAC__uint64 stream_offset;
00579     unsigned frame_samples;
00581 } FLAC__StreamMetadata_SeekPoint;
00582 
00583 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN; 
00584 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN; 
00585 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN; 
00588 #define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u)
00589 
00594 extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
00595 
00596 
00609 typedef struct {
00610     unsigned num_points;
00611     FLAC__StreamMetadata_SeekPoint *points;
00612 } FLAC__StreamMetadata_SeekTable;
00613 
00614 
00621 typedef struct {
00622     FLAC__uint32 length;
00623     FLAC__byte *entry;
00624 } FLAC__StreamMetadata_VorbisComment_Entry;
00625 
00626 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN; 
00631 typedef struct {
00632     FLAC__StreamMetadata_VorbisComment_Entry vendor_string;
00633     FLAC__uint32 num_comments;
00634     FLAC__StreamMetadata_VorbisComment_Entry *comments;
00635 } FLAC__StreamMetadata_VorbisComment;
00636 
00637 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN; 
00644 typedef struct {
00645     FLAC__uint64 offset;
00650     FLAC__byte number;
00652 } FLAC__StreamMetadata_CueSheet_Index;
00653 
00654 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN; 
00655 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN; 
00656 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN; 
00663 typedef struct {
00664     FLAC__uint64 offset;
00667     FLAC__byte number;
00670     char isrc[13];
00673     unsigned type:1;
00676     unsigned pre_emphasis:1;
00679     FLAC__byte num_indices;
00682     FLAC__StreamMetadata_CueSheet_Index *indices;
00685 } FLAC__StreamMetadata_CueSheet_Track;
00686 
00687 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN; 
00688 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN; 
00689 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN; 
00690 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN; 
00691 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN; 
00692 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN; 
00693 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN; 
00700 typedef struct {
00701     char media_catalog_number[129];
00707     FLAC__uint64 lead_in;
00710     FLAC__bool is_cd;
00713     unsigned num_tracks;
00716     FLAC__StreamMetadata_CueSheet_Track *tracks;
00719 } FLAC__StreamMetadata_CueSheet;
00720 
00721 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN; 
00722 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN; 
00723 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN; 
00724 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN; 
00725 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN; 
00729 typedef enum {
00730     FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0, 
00731     FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1, 
00732     FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2, 
00733     FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3, 
00734     FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4, 
00735     FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5, 
00736     FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6, 
00737     FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7, 
00738     FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8, 
00739     FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9, 
00740     FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10, 
00741     FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11, 
00742     FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12, 
00743     FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13, 
00744     FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14, 
00745     FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15, 
00746     FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16, 
00747     FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17, 
00748     FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18, 
00749     FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19, 
00750     FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20, 
00751     FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED
00752 } FLAC__StreamMetadata_Picture_Type;
00753 
00760 extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[];
00761 
00766 typedef struct {
00767     FLAC__StreamMetadata_Picture_Type type;
00770     char *mime_type;
00781     FLAC__byte *description;
00788     FLAC__uint32 width;
00791     FLAC__uint32 height;
00794     FLAC__uint32 depth;
00797     FLAC__uint32 colors;
00802     FLAC__uint32 data_length;
00805     FLAC__byte *data;
00808 } FLAC__StreamMetadata_Picture;
00809 
00810 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN; 
00811 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN; 
00812 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN; 
00813 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN; 
00814 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN; 
00815 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN; 
00816 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN; 
00817 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN; 
00824 typedef struct {
00825     FLAC__byte *data;
00826 } FLAC__StreamMetadata_Unknown;
00827 
00828 
00831 typedef struct {
00832     FLAC__MetadataType type;
00837     FLAC__bool is_last;
00840     unsigned length;
00843     union {
00844         FLAC__StreamMetadata_StreamInfo stream_info;
00845         FLAC__StreamMetadata_Padding padding;
00846         FLAC__StreamMetadata_Application application;
00847         FLAC__StreamMetadata_SeekTable seek_table;
00848         FLAC__StreamMetadata_VorbisComment vorbis_comment;
00849         FLAC__StreamMetadata_CueSheet cue_sheet;
00850         FLAC__StreamMetadata_Picture picture;
00851         FLAC__StreamMetadata_Unknown unknown;
00852     } data;
00855 } FLAC__StreamMetadata;
00856 
00857 extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN; 
00858 extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN; 
00859 extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN; 
00862 #define FLAC__STREAM_METADATA_HEADER_LENGTH (4u)
00863 
00864 /*****************************************************************************/
00865 
00866 
00867 /*****************************************************************************
00868  *
00869  * Utility functions
00870  *
00871  *****************************************************************************/
00872 
00880 FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate);
00881 
00891 FLAC_API FLAC__bool FLAC__format_sample_rate_is_subset(unsigned sample_rate);
00892 
00905 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name);
00906 
00921 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length);
00922 
00938 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length);
00939 
00950 FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table);
00951 
00964 FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table);
00965 
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);
00985 
01002 FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation);
01003 
01004 /* \} */
01005 
01006 #ifdef __cplusplus
01007 }
01008 #endif
01009 
01010 #endif