FLAC: include/FLAC/format.h Source File

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
    00197 } FLAC__EntropyCodingMethodType;
    00198
    00204 extern FLAC_API const char * const FLAC__EntropyCodingMethodTypeString[];
    00205
    00206
    00209 typedef struct {
    00210
    00211     unsigned *parameters;
    00214     unsigned *raw_bits;
    00217     unsigned capacity_by_order;
    00222 } FLAC__EntropyCodingMethod_PartitionedRiceContents;
    00223
    00226 typedef struct {
    00227
    00228     unsigned order;
    00231     const FLAC__EntropyCodingMethod_PartitionedRiceContents *contents;
    00234 } FLAC__EntropyCodingMethod_PartitionedRice;
    00235
    00236 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ORDER_LEN;
    00237 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_PARAMETER_LEN;
    00238 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_RAW_LEN;
    00240 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_PARTITIONED_RICE_ESCAPE_PARAMETER;
    00245 typedef struct {
    00246     FLAC__EntropyCodingMethodType type;
    00247     union {
    00248         FLAC__EntropyCodingMethod_PartitionedRice partitioned_rice;
    00249     } data;
    00250 } FLAC__EntropyCodingMethod;
    00251
    00252 extern FLAC_API const unsigned FLAC__ENTROPY_CODING_METHOD_TYPE_LEN;
    00254 /*****************************************************************************/
    00255
    00257 typedef enum {
    00258     FLAC__SUBFRAME_TYPE_CONSTANT = 0,
    00259     FLAC__SUBFRAME_TYPE_VERBATIM = 1,
    00260     FLAC__SUBFRAME_TYPE_FIXED = 2,
    00261     FLAC__SUBFRAME_TYPE_LPC = 3
    00262 } FLAC__SubframeType;
    00263
    00269 extern FLAC_API const char * const FLAC__SubframeTypeString[];
    00270
    00271
    00274 typedef struct {
    00275     FLAC__int32 value;
    00276 } FLAC__Subframe_Constant;
    00277
    00278
    00281 typedef struct {
    00282     const FLAC__int32 *data;
    00283 } FLAC__Subframe_Verbatim;
    00284
    00285
    00288 typedef struct {
    00289     FLAC__EntropyCodingMethod entropy_coding_method;
    00292     unsigned order;
    00295     FLAC__int32 warmup[FLAC__MAX_FIXED_ORDER];
    00298     const FLAC__int32 *residual;
    00300 } FLAC__Subframe_Fixed;
    00301
    00302
    00305 typedef struct {
    00306     FLAC__EntropyCodingMethod entropy_coding_method;
    00309     unsigned order;
    00312     unsigned qlp_coeff_precision;
    00315     int quantization_level;
    00318     FLAC__int32 qlp_coeff[FLAC__MAX_LPC_ORDER];
    00321     FLAC__int32 warmup[FLAC__MAX_LPC_ORDER];
    00324     const FLAC__int32 *residual;
    00326 } FLAC__Subframe_LPC;
    00327
    00328 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_COEFF_PRECISION_LEN;
    00329 extern FLAC_API const unsigned FLAC__SUBFRAME_LPC_QLP_SHIFT_LEN;
    00334 typedef struct {
    00335     FLAC__SubframeType type;
    00336     union {
    00337         FLAC__Subframe_Constant constant;
    00338         FLAC__Subframe_Fixed fixed;
    00339         FLAC__Subframe_LPC lpc;
    00340         FLAC__Subframe_Verbatim verbatim;
    00341     } data;
    00342     unsigned wasted_bits;
    00343 } FLAC__Subframe;
    00344
    00345 extern FLAC_API const unsigned FLAC__SUBFRAME_ZERO_PAD_LEN;
    00346 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LEN;
    00347 extern FLAC_API const unsigned FLAC__SUBFRAME_WASTED_BITS_FLAG_LEN;
    00349 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_CONSTANT_BYTE_ALIGNED_MASK;
    00350 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_VERBATIM_BYTE_ALIGNED_MASK;
    00351 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_FIXED_BYTE_ALIGNED_MASK;
    00352 extern FLAC_API const unsigned FLAC__SUBFRAME_TYPE_LPC_BYTE_ALIGNED_MASK;
    00354 /*****************************************************************************/
    00355
    00356
    00357 /*****************************************************************************
    00358  *
    00359  * Frame structures
    00360  *
    00361  *****************************************************************************/
    00362
    00364 typedef enum {
    00365     FLAC__CHANNEL_ASSIGNMENT_INDEPENDENT = 0,
    00366     FLAC__CHANNEL_ASSIGNMENT_LEFT_SIDE = 1,
    00367     FLAC__CHANNEL_ASSIGNMENT_RIGHT_SIDE = 2,
    00368     FLAC__CHANNEL_ASSIGNMENT_MID_SIDE = 3
    00369 } FLAC__ChannelAssignment;
    00370
    00376 extern FLAC_API const char * const FLAC__ChannelAssignmentString[];
    00377
    00379 typedef enum {
    00380     FLAC__FRAME_NUMBER_TYPE_FRAME_NUMBER,
    00381     FLAC__FRAME_NUMBER_TYPE_SAMPLE_NUMBER
    00382 } FLAC__FrameNumberType;
    00383
    00389 extern FLAC_API const char * const FLAC__FrameNumberTypeString[];
    00390
    00391
    00394 typedef struct {
    00395     unsigned blocksize;
    00398     unsigned sample_rate;
    00401     unsigned channels;
    00404     FLAC__ChannelAssignment channel_assignment;
    00407     unsigned bits_per_sample;
    00410     FLAC__FrameNumberType number_type;
    00413     union {
    00414         FLAC__uint32 frame_number;
    00415         FLAC__uint64 sample_number;
    00416     } number;
    00420     FLAC__uint8 crc;
    00425 } FLAC__FrameHeader;
    00426
    00427 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC;
    00428 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SYNC_LEN;
    00429 extern FLAC_API const unsigned FLAC__FRAME_HEADER_RESERVED_LEN;
    00430 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BLOCK_SIZE_LEN;
    00431 extern FLAC_API const unsigned FLAC__FRAME_HEADER_SAMPLE_RATE_LEN;
    00432 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CHANNEL_ASSIGNMENT_LEN;
    00433 extern FLAC_API const unsigned FLAC__FRAME_HEADER_BITS_PER_SAMPLE_LEN;
    00434 extern FLAC_API const unsigned FLAC__FRAME_HEADER_ZERO_PAD_LEN;
    00435 extern FLAC_API const unsigned FLAC__FRAME_HEADER_CRC_LEN;
    00440 typedef struct {
    00441     FLAC__uint16 crc;
    00446 } FLAC__FrameFooter;
    00447
    00448 extern FLAC_API const unsigned FLAC__FRAME_FOOTER_CRC_LEN;
    00453 typedef struct {
    00454     FLAC__FrameHeader header;
    00455     FLAC__Subframe subframes[FLAC__MAX_CHANNELS];
    00456     FLAC__FrameFooter footer;
    00457 } FLAC__Frame;
    00458
    00459 /*****************************************************************************/
    00460
    00461
    00462 /*****************************************************************************
    00463  *
    00464  * Meta-data structures
    00465  *
    00466  *****************************************************************************/
    00467
    00469 typedef enum {
    00470
    00471     FLAC__METADATA_TYPE_STREAMINFO = 0,
    00474     FLAC__METADATA_TYPE_PADDING = 1,
    00477     FLAC__METADATA_TYPE_APPLICATION = 2,
    00480     FLAC__METADATA_TYPE_SEEKTABLE = 3,
    00483     FLAC__METADATA_TYPE_VORBIS_COMMENT = 4,
    00486     FLAC__METADATA_TYPE_CUESHEET = 5,
    00489     FLAC__METADATA_TYPE_PICTURE = 6,
    00492     FLAC__METADATA_TYPE_UNDEFINED = 7
    00495 } FLAC__MetadataType;
    00496
    00502 extern FLAC_API const char * const FLAC__MetadataTypeString[];
    00503
    00504
    00507 typedef struct {
    00508     unsigned min_blocksize, max_blocksize;
    00509     unsigned min_framesize, max_framesize;
    00510     unsigned sample_rate;
    00511     unsigned channels;
    00512     unsigned bits_per_sample;
    00513     FLAC__uint64 total_samples;
    00514     FLAC__byte md5sum[16];
    00515 } FLAC__StreamMetadata_StreamInfo;
    00516
    00517 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_BLOCK_SIZE_LEN;
    00518 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_BLOCK_SIZE_LEN;
    00519 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MIN_FRAME_SIZE_LEN;
    00520 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MAX_FRAME_SIZE_LEN;
    00521 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_SAMPLE_RATE_LEN;
    00522 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_CHANNELS_LEN;
    00523 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_BITS_PER_SAMPLE_LEN;
    00524 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_TOTAL_SAMPLES_LEN;
    00525 extern FLAC_API const unsigned FLAC__STREAM_METADATA_STREAMINFO_MD5SUM_LEN;
    00528 #define FLAC__STREAM_METADATA_STREAMINFO_LENGTH (34u)
    00529
    00532 typedef struct {
    00533     int dummy;
    00538 } FLAC__StreamMetadata_Padding;
    00539
    00540
    00543 typedef struct {
    00544     FLAC__byte id[4];
    00545     FLAC__byte *data;
    00546 } FLAC__StreamMetadata_Application;
    00547
    00548 extern FLAC_API const unsigned FLAC__STREAM_METADATA_APPLICATION_ID_LEN;
    00552 typedef struct {
    00553     FLAC__uint64 sample_number;
    00556     FLAC__uint64 stream_offset;
    00560     unsigned frame_samples;
    00562 } FLAC__StreamMetadata_SeekPoint;
    00563
    00564 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_SAMPLE_NUMBER_LEN;
    00565 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_STREAM_OFFSET_LEN;
    00566 extern FLAC_API const unsigned FLAC__STREAM_METADATA_SEEKPOINT_FRAME_SAMPLES_LEN;
    00569 #define FLAC__STREAM_METADATA_SEEKPOINT_LENGTH (18u)
    00570
    00575 extern FLAC_API const FLAC__uint64 FLAC__STREAM_METADATA_SEEKPOINT_PLACEHOLDER;
    00576
    00577
    00590 typedef struct {
    00591     unsigned num_points;
    00592     FLAC__StreamMetadata_SeekPoint *points;
    00593 } FLAC__StreamMetadata_SeekTable;
    00594
    00595
    00602 typedef struct {
    00603     FLAC__uint32 length;
    00604     FLAC__byte *entry;
    00605 } FLAC__StreamMetadata_VorbisComment_Entry;
    00606
    00607 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_ENTRY_LENGTH_LEN;
    00612 typedef struct {
    00613     FLAC__StreamMetadata_VorbisComment_Entry vendor_string;
    00614     FLAC__uint32 num_comments;
    00615     FLAC__StreamMetadata_VorbisComment_Entry *comments;
    00616 } FLAC__StreamMetadata_VorbisComment;
    00617
    00618 extern FLAC_API const unsigned FLAC__STREAM_METADATA_VORBIS_COMMENT_NUM_COMMENTS_LEN;
    00625 typedef struct {
    00626     FLAC__uint64 offset;
    00631     FLAC__byte number;
    00633 } FLAC__StreamMetadata_CueSheet_Index;
    00634
    00635 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_OFFSET_LEN;
    00636 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_NUMBER_LEN;
    00637 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_INDEX_RESERVED_LEN;
    00644 typedef struct {
    00645     FLAC__uint64 offset;
    00648     FLAC__byte number;
    00651     char isrc[13];
    00654     unsigned type:1;
    00657     unsigned pre_emphasis:1;
    00660     FLAC__byte num_indices;
    00663     FLAC__StreamMetadata_CueSheet_Index *indices;
    00666 } FLAC__StreamMetadata_CueSheet_Track;
    00667
    00668 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_OFFSET_LEN;
    00669 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUMBER_LEN;
    00670 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_ISRC_LEN;
    00671 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_TYPE_LEN;
    00672 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_PRE_EMPHASIS_LEN;
    00673 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_RESERVED_LEN;
    00674 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_TRACK_NUM_INDICES_LEN;
    00681 typedef struct {
    00682     char media_catalog_number[129];
    00688     FLAC__uint64 lead_in;
    00691     FLAC__bool is_cd;
    00694     unsigned num_tracks;
    00697     FLAC__StreamMetadata_CueSheet_Track *tracks;
    00700 } FLAC__StreamMetadata_CueSheet;
    00701
    00702 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_MEDIA_CATALOG_NUMBER_LEN;
    00703 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_LEAD_IN_LEN;
    00704 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_IS_CD_LEN;
    00705 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_RESERVED_LEN;
    00706 extern FLAC_API const unsigned FLAC__STREAM_METADATA_CUESHEET_NUM_TRACKS_LEN;
    00710 typedef enum {
    00711     FLAC__STREAM_METADATA_PICTURE_TYPE_OTHER = 0,
    00712     FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON_STANDARD = 1,
    00713     FLAC__STREAM_METADATA_PICTURE_TYPE_FILE_ICON = 2,
    00714     FLAC__STREAM_METADATA_PICTURE_TYPE_FRONT_COVER = 3,
    00715     FLAC__STREAM_METADATA_PICTURE_TYPE_BACK_COVER = 4,
    00716     FLAC__STREAM_METADATA_PICTURE_TYPE_LEAFLET_PAGE = 5,
    00717     FLAC__STREAM_METADATA_PICTURE_TYPE_MEDIA = 6,
    00718     FLAC__STREAM_METADATA_PICTURE_TYPE_LEAD_ARTIST = 7,
    00719     FLAC__STREAM_METADATA_PICTURE_TYPE_ARTIST = 8,
    00720     FLAC__STREAM_METADATA_PICTURE_TYPE_CONDUCTOR = 9,
    00721     FLAC__STREAM_METADATA_PICTURE_TYPE_BAND = 10,
    00722     FLAC__STREAM_METADATA_PICTURE_TYPE_COMPOSER = 11,
    00723     FLAC__STREAM_METADATA_PICTURE_TYPE_LYRICIST = 12,
    00724     FLAC__STREAM_METADATA_PICTURE_TYPE_RECORDING_LOCATION = 13,
    00725     FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_RECORDING = 14,
    00726     FLAC__STREAM_METADATA_PICTURE_TYPE_DURING_PERFORMANCE = 15,
    00727     FLAC__STREAM_METADATA_PICTURE_TYPE_VIDEO_SCREEN_CAPTURE = 16,
    00728     FLAC__STREAM_METADATA_PICTURE_TYPE_FISH = 17,
    00729     FLAC__STREAM_METADATA_PICTURE_TYPE_ILLUSTRATION = 18,
    00730     FLAC__STREAM_METADATA_PICTURE_TYPE_BAND_LOGOTYPE = 19,
    00731     FLAC__STREAM_METADATA_PICTURE_TYPE_PUBLISHER_LOGOTYPE = 20,
    00732     FLAC__STREAM_METADATA_PICTURE_TYPE_UNDEFINED
    00733 } FLAC__StreamMetadata_Picture_Type;
    00734
    00741 extern FLAC_API const char * const FLAC__StreamMetadata_Picture_TypeString[];
    00742
    00747 typedef struct {
    00748     FLAC__StreamMetadata_Picture_Type type;
    00751     char *mime_type;
    00762     FLAC__byte *description;
    00769     FLAC__uint32 width;
    00772     FLAC__uint32 height;
    00775     FLAC__uint32 depth;
    00778     FLAC__uint32 colors;
    00783     FLAC__uint32 data_length;
    00786     FLAC__byte *data;
    00789 } FLAC__StreamMetadata_Picture;
    00790
    00791 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_TYPE_LEN;
    00792 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_MIME_TYPE_LENGTH_LEN;
    00793 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DESCRIPTION_LENGTH_LEN;
    00794 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_WIDTH_LEN;
    00795 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_HEIGHT_LEN;
    00796 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DEPTH_LEN;
    00797 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_COLORS_LEN;
    00798 extern FLAC_API const unsigned FLAC__STREAM_METADATA_PICTURE_DATA_LENGTH_LEN;
    00805 typedef struct {
    00806     FLAC__byte *data;
    00807 } FLAC__StreamMetadata_Unknown;
    00808
    00809
    00812 typedef struct {
    00813     FLAC__MetadataType type;
    00818     FLAC__bool is_last;
    00821     unsigned length;
    00824     union {
    00825         FLAC__StreamMetadata_StreamInfo stream_info;
    00826         FLAC__StreamMetadata_Padding padding;
    00827         FLAC__StreamMetadata_Application application;
    00828         FLAC__StreamMetadata_SeekTable seek_table;
    00829         FLAC__StreamMetadata_VorbisComment vorbis_comment;
    00830         FLAC__StreamMetadata_CueSheet cue_sheet;
    00831         FLAC__StreamMetadata_Picture picture;
    00832         FLAC__StreamMetadata_Unknown unknown;
    00833     } data;
    00836 } FLAC__StreamMetadata;
    00837
    00838 extern FLAC_API const unsigned FLAC__STREAM_METADATA_IS_LAST_LEN;
    00839 extern FLAC_API const unsigned FLAC__STREAM_METADATA_TYPE_LEN;
    00840 extern FLAC_API const unsigned FLAC__STREAM_METADATA_LENGTH_LEN;
    00843 #define FLAC__STREAM_METADATA_HEADER_LENGTH (4u)
    00844
    00845 /*****************************************************************************/
    00846
    00847
    00848 /*****************************************************************************
    00849  *
    00850  * Utility functions
    00851  *
    00852  *****************************************************************************/
    00853
    00862 FLAC_API FLAC__bool FLAC__format_sample_rate_is_valid(unsigned sample_rate);
    00863
    00876 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_name_is_legal(const char *name);
    00877
    00892 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_value_is_legal(const FLAC__byte *value, unsigned length);
    00893
    00909 FLAC_API FLAC__bool FLAC__format_vorbiscomment_entry_is_legal(const FLAC__byte *entry, unsigned length);
    00910
    00911 /* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */
    00922 FLAC_API FLAC__bool FLAC__format_seektable_is_legal(const FLAC__StreamMetadata_SeekTable *seek_table);
    00923
    00924 /* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */
    00937 FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *seek_table);
    00938
    00939 /* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */
    00958 FLAC_API FLAC__bool FLAC__format_cuesheet_is_legal(const FLAC__StreamMetadata_CueSheet *cue_sheet, FLAC__bool check_cd_da_subset, const char **violation);
    00959
    00960 /* @@@@ add to unit tests; it is already indirectly tested by the metadata_object tests */
    00977 FLAC_API FLAC__bool FLAC__format_picture_is_legal(const FLAC__StreamMetadata_Picture *picture, const char **violation);
    00978
    00979 /* \} */
    00980
    00981 #ifdef __cplusplus
    00982 }
    00983 #endif
    00984
    00985 #endif

Copyright (c) 2000,2001,2002,2003,2004,2005,2006,2007 Josh Coalson |