00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00027 #ifndef AVCODEC_FLAC_H
00028 #define AVCODEC_FLAC_H
00029
00030 #include "avcodec.h"
00031 #include "get_bits.h"
00032
00033 #define FLAC_STREAMINFO_SIZE 34
00034 #define FLAC_MAX_CHANNELS 8
00035 #define FLAC_MIN_BLOCKSIZE 16
00036 #define FLAC_MAX_BLOCKSIZE 65535
00037 #define FLAC_MIN_FRAME_SIZE 11
00038
00039 enum {
00040 FLAC_CHMODE_INDEPENDENT = 0,
00041 FLAC_CHMODE_LEFT_SIDE = 8,
00042 FLAC_CHMODE_RIGHT_SIDE = 9,
00043 FLAC_CHMODE_MID_SIDE = 10,
00044 };
00045
00046 enum {
00047 FLAC_METADATA_TYPE_STREAMINFO = 0,
00048 FLAC_METADATA_TYPE_PADDING,
00049 FLAC_METADATA_TYPE_APPLICATION,
00050 FLAC_METADATA_TYPE_SEEKTABLE,
00051 FLAC_METADATA_TYPE_VORBIS_COMMENT,
00052 FLAC_METADATA_TYPE_CUESHEET,
00053 FLAC_METADATA_TYPE_PICTURE,
00054 FLAC_METADATA_TYPE_INVALID = 127
00055 };
00056
00057 enum FLACExtradataFormat {
00058 FLAC_EXTRADATA_FORMAT_STREAMINFO = 0,
00059 FLAC_EXTRADATA_FORMAT_FULL_HEADER = 1
00060 };
00061
00062 #define FLACCOMMONINFO \
00063 int samplerate; \
00064 int channels; \
00065 int bps; \
00066
00067
00071 #define FLACSTREAMINFO \
00072 FLACCOMMONINFO \
00073 int max_blocksize; \
00074 int max_framesize; \
00075 int64_t samples; \
00076
00077 typedef struct FLACStreaminfo {
00078 FLACSTREAMINFO
00079 } FLACStreaminfo;
00080
00081 typedef struct FLACFrameInfo {
00082 FLACCOMMONINFO
00083 int blocksize;
00084 int ch_mode;
00085 int64_t frame_or_sample_num;
00086 int is_var_size;
00090 } FLACFrameInfo;
00091
00098 void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s,
00099 const uint8_t *buffer);
00100
00108 int ff_flac_is_extradata_valid(AVCodecContext *avctx,
00109 enum FLACExtradataFormat *format,
00110 uint8_t **streaminfo_start);
00111
00119 void ff_flac_parse_block_header(const uint8_t *block_header,
00120 int *last, int *type, int *size);
00121
00128 int ff_flac_get_max_frame_size(int blocksize, int ch, int bps);
00129
00138 int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb,
00139 FLACFrameInfo *fi, int log_level_offset);
00140 #endif