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];
215 s->max_blocksize = 16;
static double val(void *priv, double ch)
static const char *const format[]
audio channel layout utility functions
#define MKTAG(a, b, c, d)
#define GET_UTF8(val, GET_BYTE, ERROR)
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
Public header for CRC hash function implementation.
static const uint64_t flac_channel_layouts[8]
static int64_t get_utf8(GetBitContext *gb)
static const int8_t sample_size_table[]
int ff_flac_is_extradata_valid(AVCodecContext *avctx, enum FLACExtradataFormat *format, uint8_t **streaminfo_start)
Validate the FLAC extradata.
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 ff_flac_decode_frame_header(AVCodecContext *avctx, GetBitContext *gb, FLACFrameInfo *fi, int log_level_offset)
Validate and decode a frame header.
void ff_flac_set_channel_layout(AVCodecContext *avctx)
int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, const uint8_t *buffer)
Parse the Streaminfo metadata block.
FLAC (Free Lossless Audio Codec) decoder/demuxer common functions.
@ FLAC_EXTRADATA_FORMAT_FULL_HEADER
@ FLAC_EXTRADATA_FORMAT_STREAMINFO
#define FLAC_MIN_BLOCKSIZE
@ FLAC_CHMODE_INDEPENDENT
#define FLAC_MAX_CHANNELS
#define FLAC_STREAMINFO_SIZE
const int ff_flac_sample_rate_table[16]
const int32_t ff_flac_blocksize_table[16]
bitstream reader API header.
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
static unsigned int get_bits1(GetBitContext *s)
static void skip_bits(GetBitContext *s, int n)
static uint64_t get_bits64(GetBitContext *s, int n)
Read 0-64 bits.
static int get_bits_count(const GetBitContext *s)
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define AV_CH_LAYOUT_QUAD
#define AV_CH_LAYOUT_6POINT1
#define AV_CH_LAYOUT_5POINT0
#define AV_CH_LAYOUT_7POINT1
#define AV_CH_LAYOUT_MONO
#define AV_CH_LAYOUT_SURROUND
#define AV_CH_LAYOUT_STEREO
#define AV_CH_LAYOUT_5POINT1
int av_get_channel_layout_nb_channels(uint64_t channel_layout)
Return the number of channels in the channel layout.
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table.
uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t length)
Calculate the CRC of a block.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
main external API structure.
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
int sample_rate
samples per second
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
int channels
number of audio channels
uint64_t channel_layout
Audio channel layout.
int is_var_size
specifies if the stream uses variable block sizes or a fixed block size; also determines the meaning ...
int64_t frame_or_sample_num
frame number or sample number
int ch_mode
channel decorrelation mode
FLACCOMMONINFO int blocksize
block size of the frame