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
00032 #define FLAC_STREAMINFO_SIZE 34
00033 #define FLAC_MAX_CHANNELS 8
00034 #define FLAC_MIN_BLOCKSIZE 16
00035 #define FLAC_MAX_BLOCKSIZE 65535
00036
00037 enum {
00038 FLAC_CHMODE_INDEPENDENT = 0,
00039 FLAC_CHMODE_LEFT_SIDE = 8,
00040 FLAC_CHMODE_RIGHT_SIDE = 9,
00041 FLAC_CHMODE_MID_SIDE = 10,
00042 };
00043
00044 enum {
00045 FLAC_METADATA_TYPE_STREAMINFO = 0,
00046 FLAC_METADATA_TYPE_PADDING,
00047 FLAC_METADATA_TYPE_APPLICATION,
00048 FLAC_METADATA_TYPE_SEEKTABLE,
00049 FLAC_METADATA_TYPE_VORBIS_COMMENT,
00050 FLAC_METADATA_TYPE_CUESHEET,
00051 FLAC_METADATA_TYPE_PICTURE,
00052 FLAC_METADATA_TYPE_INVALID = 127
00053 };
00054
00055 enum FLACExtradataFormat {
00056 FLAC_EXTRADATA_FORMAT_STREAMINFO = 0,
00057 FLAC_EXTRADATA_FORMAT_FULL_HEADER = 1
00058 };
00059
00060 #define FLACCOMMONINFO \
00061 int samplerate; \
00062 int channels; \
00063 int bps; \
00064
00065
00069 #define FLACSTREAMINFO \
00070 FLACCOMMONINFO \
00071 int max_blocksize; \
00072 int max_framesize; \
00073 int64_t samples; \
00074
00075 typedef struct FLACStreaminfo {
00076 FLACSTREAMINFO
00077 } FLACStreaminfo;
00078
00079 typedef struct FLACFrameInfo {
00080 FLACCOMMONINFO
00081 int blocksize;
00082 int ch_mode;
00083 } FLACFrameInfo;
00084
00091 void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s,
00092 const uint8_t *buffer);
00093
00101 int ff_flac_is_extradata_valid(AVCodecContext *avctx,
00102 enum FLACExtradataFormat *format,
00103 uint8_t **streaminfo_start);
00104
00112 void ff_flac_parse_block_header(const uint8_t *block_header,
00113 int *last, int *type, int *size);
00114
00121 int ff_flac_get_max_frame_size(int blocksize, int ch, int bps);
00122
00123 #endif