53 int bs_code, sr_code, bps_code;
56 if ((
get_bits(gb, 15) & 0x7FFF) != 0x7FFC) {
78 "invalid channel mode: %d\n", fi->
ch_mode);
84 if (bps_code == 3 || bps_code == 7) {
86 "invalid sample size code (%d)\n",
95 "broken stream, invalid padding\n");
103 "sample/frame number invalid; utf8 fscked\n");
110 "reserved blocksize code: 0\n");
112 }
else if (bs_code == 6) {
114 }
else if (bs_code == 7) {
123 }
else if (sr_code == 12) {
124 fi->samplerate =
get_bits(gb, 8) * 1000;
125 }
else if (sr_code == 13) {
127 }
else if (sr_code == 14) {
128 fi->samplerate =
get_bits(gb, 16) * 10;
131 "illegal sample rate code %d\n",
141 "header crc mismatch\n");
157 count += ch * ((7+bps+7)/8);
160 count += (( 2*bps+1) * blocksize + 7) / 8;
162 count += ( ch*bps * blocksize + 7) / 8;
191 *streaminfo_start = &avctx->
extradata[8];
211 s->max_blocksize =
get_bits(&gb, 16);
215 s->max_blocksize = 16;
220 s->max_framesize =
get_bits(&gb, 24);
#define AV_CH_LAYOUT_7POINT1
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define GET_UTF8(val, GET_BYTE, ERROR)
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
#define AV_CH_LAYOUT_6POINT1
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_CH_LAYOUT_SURROUND
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
int64_t frame_or_sample_num
frame number or sample number
int ff_flac_get_max_frame_size(int blocksize, int ch, int bps)
Calculate an estimate for the maximum frame size based on verbatim mode.
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
#define AV_CH_LAYOUT_STEREO
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample format(the sample packing is implied by the sample format) and sample rate.The lists are not just lists
#define AV_CH_LAYOUT_5POINT0
FLACCOMMONINFO int blocksize
block size of the frame
int ff_flac_is_extradata_valid(AVCodecContext *avctx, enum FLACExtradataFormat *format, uint8_t **streaminfo_start)
Validate the FLAC extradata.
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
static const int8_t sample_size_table[]
static int64_t get_utf8(GetBitContext *gb)
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
Public header for CRC hash function implementation.
static int get_bits_count(const GetBitContext *s)
bitstream reader API header.
#define FLAC_MIN_BLOCKSIZE
#define AV_CH_LAYOUT_5POINT1
static uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
int ch_mode
channel decorrelation mode
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
FLAC (Free Lossless Audio Codec) decoder/demuxer common functions.
#define AV_CH_LAYOUT_QUAD
int ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, FLACFrameInfo *fi, int log_level_offset)
Validate and decode a frame header.
uint64_t channel_layout
Audio channel layout.
audio channel layout utility functions
int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, const uint8_t *buffer)
Parse the Streaminfo metadata block.
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
#define FLAC_STREAMINFO_SIZE
#define FF_ARRAY_ELEMS(a)
const int ff_flac_sample_rate_table[16]
int sample_rate
samples per second
main external API structure.
void ff_flac_set_channel_layout(AVCodecContext *avctx)
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static const uint64_t flac_channel_layouts[8]
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
const int32_t ff_flac_blocksize_table[16]
int channels
number of audio channels
int is_var_size
specifies if the stream uses variable block sizes or a fixed block size; also determines the meaning ...
#define AV_CH_LAYOUT_MONO
#define MKTAG(a, b, c, d)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
static double val(void *priv, double ch)
#define FLAC_MAX_CHANNELS