38 #define FLAC_SUBFRAME_CONSTANT  0 
   39 #define FLAC_SUBFRAME_VERBATIM  1 
   40 #define FLAC_SUBFRAME_FIXED     8 
   41 #define FLAC_SUBFRAME_LPC      32 
   43 #define MAX_FIXED_ORDER     4 
   44 #define MAX_PARTITION_ORDER 8 
   45 #define MAX_PARTITIONS     (1 << MAX_PARTITION_ORDER) 
   46 #define MAX_LPC_PRECISION  15 
   47 #define MIN_LPC_SHIFT       0 
   48 #define MAX_LPC_SHIFT      15 
  154     memcpy(&header[18], s->
md5sum, 16);
 
  170     target    = (samplerate * block_time_ms) / 1000;
 
  171     for (i = 0; i < 16; i++) {
 
  196         av_log(avctx, 
AV_LOG_DEBUG, 
" lpc type: Levinson-Durbin recursion with Welch window\n");
 
  264                channels, FLAC_MAX_CHANNELS);
 
  272     for (i = 4; i < 12; i++) {
 
  282         if (freq % 1000 == 0 && freq < 255000) {
 
  285         } 
else if (freq % 10 == 0 && freq < 655350) {
 
  288         } 
else if (freq < 65535) {
 
  311     s->
options.
block_time_ms = ((
int[]){ 27, 27, 27,105,105,105,105,105,105,105,105,105,105})[level];
 
  318                                          FF_LPC_TYPE_LEVINSON})[level];
 
  321         s->
options.
min_prediction_order = ((
int[]){  2,  0,  0,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1})[level];
 
  323         s->
options.
max_prediction_order = ((
int[]){  3,  4,  4,  6,  8,  8,  8,  8, 12, 12, 12, 32, 32})[level];
 
  330                                                        ORDER_METHOD_SEARCH})[level];
 
  338         s->
options.
min_partition_order = ((
int[]){  2,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0})[level];
 
  340         s->
options.
max_partition_order = ((
int[]){  2,  2,  3,  3,  3,  8,  8,  8,  8,  8,  8,  8,  8})[level];
 
  342 #if FF_API_PRIVATE_OPT 
  348                        "invalid min prediction order %d, clamped to %d\n",
 
  364                        "invalid max prediction order %d, clamped to %d\n",
 
  384                    "invalid min prediction order %d, clamped to %d\n",
 
  390                    "invalid max prediction order %d, clamped to %d\n",
 
  448                                              "output stream will have incorrect " 
  449                                              "channel layout.\n");
 
  452                                                "will use Flac channel layout for " 
  453                                                "%d channels.\n", channels);
 
  477     for (i = 0; i < 16; i++) {
 
  496     for (ch = 0; ch < s->
channels; ch++) {
 
  522 #define COPY_SAMPLES(bits) do {                                     \ 
  523     const int ## bits ## _t *samples0 = samples;                    \ 
  525     for (i = 0, j = 0; i < frame->blocksize; i++)                   \ 
  526         for (ch = 0; ch < s->channels; ch++, j++)                   \ 
  527             frame->subframes[ch].samples[i] = samples0[j] >> shift; \ 
  542     for (i = 0; i < 
n; i++) {
 
  545         count += (v >> k) + 1 + k;
 
  554     int p, porder, psize;
 
  571         count += pred_order * sub->
obits;
 
  588         for (p = 0; p < 1 << porder; p++) {
 
  601 #define rice_encode_count(sum, n, k) (((n)*((k)+1))+((sum-(n>>1))>>(k))) 
  613     sum2 = sum - (n >> 1);
 
  614     k    = 
av_log2(av_clipl_int32(sum2 / n));
 
  615     return FFMIN(k, max_param);
 
  621     int64_t bestbits = INT64_MAX;
 
  624     for (k = 0; k <= max_param; k++) {
 
  625         int64_t bits = sums[k][i];
 
  626         if (bits < bestbits) {
 
  637                                          int n, 
int pred_order, 
int max_param, 
int exact)
 
  643     part     = (1 << porder);
 
  646     cnt = (n >> porder) - pred_order;
 
  647     for (i = 0; i < part; i++) {
 
  650             all_bits += sums[k][i];
 
  670     const uint32_t *res, *res_end;
 
  675     for (k = 0; k <= kmax; k++) {
 
  676         res     = &data[pred_order];
 
  677         res_end = &data[n >> pmax];
 
  678         for (i = 0; i < parts; i++) {
 
  680                 uint64_t sum = (1LL + k) * (res_end - res);
 
  681                 while (res < res_end)
 
  682                     sum += *(res++) >> k;
 
  686                 while (res < res_end)
 
  690             res_end += n >> pmax;
 
  698     int parts = (1 << 
level);
 
  699     for (i = 0; i < parts; i++) {
 
  700         for (k=0; k<=kmax; k++)
 
  701             sums[k][i] = sums[k][2*i] + sums[k][2*i+1];
 
  723     for (i = 0; i < 
n; i++)
 
  724         udata[i] = (2 * data[i]) ^ (data[i] >> 31);
 
  726     calc_sum_top(pmax, exact ? kmax : 0, udata, n, pred_order, sums);
 
  729     bits[pmin] = UINT32_MAX;
 
  732         if (bits[i] < bits[opt_porder] || pmax == pmin) {
 
  741     return bits[opt_porder];
 
  776     for (i = 0; i < order; i++)
 
  780         for (i = order; i < 
n; i++)
 
  782     } 
else if (order == 1) {
 
  783         for (i = order; i < 
n; i++)
 
  784             res[i] = smp[i] - smp[i-1];
 
  785     } 
else if (order == 2) {
 
  786         int a = smp[order-1] - smp[order-2];
 
  787         for (i = order; i < 
n; i += 2) {
 
  788             int b    = smp[i  ] - smp[i-1];
 
  790             a        = smp[i+1] - smp[i  ];
 
  793     } 
else if (order == 3) {
 
  794         int a = smp[order-1] -   smp[order-2];
 
  795         int c = smp[order-1] - 2*smp[order-2] + smp[order-3];
 
  796         for (i = order; i < 
n; i += 2) {
 
  797             int b    = smp[i  ] - smp[i-1];
 
  800             a        = smp[i+1] - smp[i  ];
 
  805         int a = smp[order-1] -   smp[order-2];
 
  806         int c = smp[order-1] - 2*smp[order-2] +   smp[order-3];
 
  807         int e = smp[order-1] - 3*smp[order-2] + 3*smp[order-3] - smp[order-4];
 
  808         for (i = order; i < 
n; i += 2) {
 
  809             int b    = smp[i  ] - smp[i-1];
 
  813             a        = smp[i+1] - smp[i  ];
 
  825     int min_order, max_order, opt_order, omethod;
 
  839     for (i = 1; i < 
n; i++)
 
  851         memcpy(res, smp, n * 
sizeof(
int32_t));
 
  867         bits[0]   = UINT32_MAX;
 
  868         for (i = min_order; i <= max_order; i++) {
 
  871             if (bits[i] < bits[opt_order])
 
  874         sub->
order     = opt_order;
 
  876         if (sub->
order != max_order) {
 
  893         int levels = 1 << omethod;
 
  896         int opt_index   = levels-1;
 
  897         opt_order       = max_order-1;
 
  898         bits[opt_index] = UINT32_MAX;
 
  899         for (i = levels-1; i >= 0; i--) {
 
  900             int last_order = order;
 
  901             order = min_order + (((max_order-min_order+1) * (i+1)) / levels)-1;
 
  902             order = av_clip(order, min_order - 1, max_order - 1);
 
  903             if (order == last_order)
 
  913             if (bits[i] < bits[opt_index]) {
 
  923         bits[0]   = UINT32_MAX;
 
  924         for (i = min_order-1; i < max_order; i++) {
 
  931             if (bits[i] < bits[opt_order])
 
  939         opt_order = min_order - 1 + (max_order-min_order)/3;
 
  940         memset(bits, -1, 
sizeof(bits));
 
  942         for (step = 16; step; step >>= 1) {
 
  943             int last = opt_order;
 
  944             for (i = last-step; i <= last+step; i += step) {
 
  945                 if (i < min_order-1 || i >= max_order || bits[i] < UINT32_MAX)
 
  953                 if (bits[i] < bits[opt_order])
 
  962         int i, step, improved;
 
  963         int64_t best_score = INT64_MAX;
 
  968         for (i=0; i<opt_order; i++)
 
  973             for (step = 0; step < allsteps; step++) {
 
  979                 for (i=0; i<opt_order; i++) {
 
  980                     int diff = ((tmp + 1) % 3) - 1;
 
  981                     lpc_try[i] = av_clip(coefs[opt_order - 1][i] + diff, -qmax, qmax);
 
  994                 if (score < best_score) {
 
  996                     memcpy(coefs[opt_order-1], lpc_try, 
sizeof(*coefs));
 
 1003     sub->
order     = opt_order;
 
 1006     for (i = 0; i < sub->
order; i++)
 
 1064     for (ch = 0; ch < s->
channels; ch++)
 
 1067     count += (8 - (count & 7)) & 7; 
 
 1071     if (count > INT_MAX)
 
 1081     for (ch = 0; ch < s->
channels; ch++) {
 
 1091         if (v && !(v & 1)) {
 
 1119     sum[0] = sum[1] = sum[2] = sum[3] = 0;
 
 1120     for (i = 2; i < 
n; i++) {
 
 1121         lt = left_ch[i]  - 2*left_ch[i-1]  + left_ch[i-2];
 
 1122         rt = right_ch[i] - 2*right_ch[i-1] + right_ch[i-2];
 
 1123         sum[2] += 
FFABS((lt + rt) >> 1);
 
 1124         sum[3] += 
FFABS(lt - rt);
 
 1125         sum[0] += 
FFABS(lt);
 
 1126         sum[1] += 
FFABS(rt);
 
 1129     for (i = 0; i < 4; i++) {
 
 1135     score[0] = sum[0] + sum[1];
 
 1136     score[1] = sum[0] + sum[3];
 
 1137     score[2] = sum[1] + sum[3];
 
 1138     score[3] = sum[2] + sum[3];
 
 1142     for (i = 1; i < 4; i++)
 
 1143         if (score[i] < score[best])
 
 1180         for (i = 0; i < 
n; i++) {
 
 1182             left[i]  = (tmp + right[i]) >> 1;
 
 1183             right[i] =  tmp - right[i];
 
 1187         for (i = 0; i < 
n; i++)
 
 1188             right[i] = left[i] - right[i];
 
 1191         for (i = 0; i < 
n; i++)
 
 1192             left[i] -= right[i];
 
 1227     else if (frame->
bs_code[0] == 7)
 
 1246     for (ch = 0; ch < s->
channels; ch++) {
 
 1248         int i, p, porder, psize;
 
 1264             while (res < frame_end)
 
 1268             for (i = 0; i < sub->
order; i++)
 
 1276                 for (i = 0; i < sub->
order; i++)
 
 1290             for (p = 0; p < 1 << porder; p++) {
 
 1293                 while (res < part_end)
 
 1295                 part_end = 
FFMIN(frame_end, part_end + psize);
 
 1336         buf = (
const uint8_t *)samples;
 
 1339                             (
const uint16_t *) samples, buf_size / 2);
 
 1344         const int32_t *samples0 = samples;
 
 1363     int frame_bytes, out_bytes, ret;
 
 1373 #if FF_API_SIDEDATA_ONLY_PKT 
 1388             *got_packet_ptr = 1;
 
 1417         if (frame_bytes < 0) {
 
 1436     if (out_bytes < s->min_framesize)
 
 1441     avpkt->
size     = out_bytes;
 
 1445     *got_packet_ptr = 1;
 
 1463 #define FLAGS AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM 
 1466 { 
"lpc_type", 
"LPC algorithm", offsetof(
FlacEncodeContext, options.lpc_type), 
AV_OPT_TYPE_INT, {.i64 = 
FF_LPC_TYPE_DEFAULT }, 
FF_LPC_TYPE_DEFAULT, 
FF_LPC_TYPE_NB-1, 
FLAGS, 
"lpc_type" },
 
 1471 { 
"lpc_passes", 
"Number of passes to use for Cholesky factorization during LPC analysis", offsetof(
FlacEncodeContext, options.lpc_passes),  
AV_OPT_TYPE_INT, {.i64 = 2 }, 1, INT_MAX, 
FLAGS },
 
 1474 { 
"prediction_order_method", 
"Search method for selecting prediction order", offsetof(
FlacEncodeContext, options.prediction_order_method), 
AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 
ORDER_METHOD_LOG, 
FLAGS, 
"predm" },
 
 1481 { 
"ch_mode", 
"Stereo decorrelation mode", offsetof(
FlacEncodeContext, options.ch_mode), 
AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 
FLAC_CHMODE_MID_SIDE, 
FLAGS, 
"ch_mode" },
 
uint32_t rc_udata[FLAC_MAX_BLOCKSIZE]
 
#define rice_encode_count(sum, n, k)
 
const char const char void * val
 
#define ORDER_METHOD_SEARCH
 
static int shift(int a, int b)
 
This structure describes decoded (raw) audio or video data. 
 
#define ORDER_METHOD_8LEVEL
 
ptrdiff_t const GLvoid * data
 
static void put_sbits(PutBitContext *pb, int n, int32_t value)
 
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit 
 
#define AV_LOG_WARNING
Something somehow does not look correct. 
 
#define LIBAVUTIL_VERSION_INT
 
av_cold void ff_flacdsp_init(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps)
 
void(* bswap16_buf)(uint16_t *dst, const uint16_t *src, int len)
 
static av_cold int init(AVCodecContext *avctx)
 
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. 
 
const char * av_default_item_name(void *ptr)
Return the context name. 
 
#define MAX_PARTITION_ORDER
 
#define PUT_UTF8(val, tmp, PUT_BYTE)
Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long). 
 
#define FLAC_MAX_BLOCKSIZE
 
#define AV_CH_LAYOUT_STEREO
 
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format. 
 
static int flac_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
 
#define AV_CH_LAYOUT_5POINT0
 
void(* lpc32_encode)(int32_t *res, const int32_t *smp, int len, int order, const int32_t coefs[32], int shift)
 
void av_md5_update(AVMD5 *ctx, const uint8_t *src, int len)
Update hash value. 
 
static int select_blocksize(int samplerate, int block_time_ms)
Set blocksize based on samplerate. 
 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
 
#define AV_CODEC_CAP_DELAY
Encoder or decoder requires flushing with NULL input at the end in order to give the complete and cor...
 
#define av_assert0(cond)
assert() equivalent, that is always enabled. 
 
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data. 
 
attribute_deprecated int side_data_only_packets
Encoding only and set by default. 
 
struct AVMD5 * av_md5_alloc(void)
Allocate an AVMD5 context. 
 
enum AVSampleFormat sample_fmt
audio sample format 
 
do not use LPC prediction or use all zero coefficients 
 
int32_t coefs[MAX_LPC_ORDER]
 
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown. 
 
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user). 
 
uint8_t * extradata
some codecs need / can use extradata like Huffman tables. 
 
Public header for CRC hash function implementation. 
 
static uint64_t find_subframe_rice_params(FlacEncodeContext *s, FlacSubframe *sub, int pred_order)
 
int params[MAX_PARTITIONS]
 
static const uint8_t header[24]
 
#define FLAC_MIN_BLOCKSIZE
 
static void write_subframes(FlacEncodeContext *s)
 
#define AV_CH_LAYOUT_5POINT1
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered. 
 
#define ORDER_METHOD_4LEVEL
 
unsigned int md5_buffer_size
 
FLAC (Free Lossless Audio Codec) decoder/demuxer common functions. 
 
int exact_rice_parameters
 
uint64_t rc_sums[32][MAX_PARTITIONS]
 
void(* lpc16_encode)(int32_t *res, const int32_t *smp, int len, int order, const int32_t coefs[32], int shift)
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers. 
 
#define FLAC_SUBFRAME_LPC
 
enum CodingMode coding_mode
 
simple assert() macros that are a bit more flexible than ISO C assert(). 
 
#define AV_CH_LAYOUT_QUAD
 
const char * name
Name of the codec implementation. 
 
#define COPY_SAMPLES(bits)
 
#define FLAC_SUBFRAME_VERBATIM
 
int32_t samples[FLAC_MAX_BLOCKSIZE]
 
static void remove_wasted_bits(FlacEncodeContext *s)
 
#define FLAC_SUBFRAME_CONSTANT
 
uint64_t channel_layout
Audio channel layout. 
 
static int put_bits_count(PutBitContext *s)
 
#define ORDER_METHOD_2LEVEL
 
static uint64_t calc_optimal_rice_params(RiceContext *rc, int porder, uint64_t sums[32][MAX_PARTITIONS], int n, int pred_order, int max_param, int exact)
 
static void frame_end(MpegEncContext *s)
 
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough. 
 
#define FLAC_SUBFRAME_FIXED
 
static int encode_residual_ch(FlacEncodeContext *s, int ch)
 
av_cold void ff_lpc_end(LPCContext *s)
Uninitialize LPCContext. 
 
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code. 
 
static uint64_t rice_count_exact(const int32_t *res, int n, int k)
 
#define AV_CODEC_CAP_SMALL_LAST_FRAME
Codec can be fed a final frame with a smaller size. 
 
static int encode_frame(FlacEncodeContext *s)
 
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 FFABS(a)
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable ...
 
#define AV_CH_FRONT_CENTER
 
int prediction_order_method
 
#define AV_CH_LAYOUT_5POINT1_BACK
 
static int get_max_p_order(int max_porder, int n, int order)
 
static int write_frame(FlacEncodeContext *s, AVPacket *avpkt)
 
static int find_optimal_param_exact(uint64_t sums[32][MAX_PARTITIONS], int i, int max_param)
 
attribute_deprecated int max_prediction_order
 
static void set_sr_golomb_flac(PutBitContext *pb, int i, int k, int limit, int esc_len)
write signed golomb rice code (flac). 
 
static const AVOption options[]
 
static void channel_decorrelation(FlacEncodeContext *s)
Perform stereo channel decorrelation. 
 
int frame_size
Number of samples per channel in an audio frame. 
 
The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format that the extradata buffer was...
 
const int ff_flac_sample_rate_table[16]
 
Libavcodec external API header. 
 
static void calc_sum_next(int level, uint64_t sums[32][MAX_PARTITIONS], int kmax)
 
AVSampleFormat
Audio sample formats. 
 
int sample_rate
samples per second 
 
static void write_frame_header(FlacEncodeContext *s)
 
static void calc_sum_top(int pmax, int kmax, const uint32_t *data, int n, int pred_order, uint64_t sums[32][MAX_PARTITIONS])
 
main external API structure. 
 
static int count_frame_header(FlacEncodeContext *s)
 
Levinson-Durbin recursion. 
 
void av_md5_init(AVMD5 *ctx)
Initialize MD5 hashing. 
 
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2. 
 
Describe the class of an AVClass context structure. 
 
use the codec default LPC type 
 
#define AV_CH_LAYOUT_5POINT0_BACK
 
static uint64_t calc_rice_params(RiceContext *rc, uint32_t udata[FLAC_MAX_BLOCKSIZE], uint64_t sums[32][MAX_PARTITIONS], int pmin, int pmax, const int32_t *data, int n, int pred_order, int exact)
 
static void encode_residual_fixed(int32_t *res, const int32_t *smp, int n, int order)
 
void av_md5_final(AVMD5 *ctx, uint8_t *dst)
Finish hashing and output digest value. 
 
int max_encoded_framesize
 
int ff_lpc_calc_coefs(LPCContext *s, const int32_t *samples, int blocksize, int min_order, int max_order, int precision, int32_t coefs[][MAX_LPC_ORDER], int *shift, enum FFLPCType lpc_type, int lpc_passes, int omethod, int min_shift, int max_shift, int zero_shift)
Calculate LPC coefficients for multiple orders. 
 
static void write_utf8(PutBitContext *pb, uint32_t val)
 
av_cold int ff_lpc_init(LPCContext *s, int blocksize, int max_order, enum FFLPCType lpc_type)
Initialize LPCContext. 
 
#define MAX_LPC_PRECISION
 
static void copy_samples(FlacEncodeContext *s, const void *samples)
Copy channel-interleaved input samples into separate subframes. 
 
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes. 
 
int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt)
Return number of bytes per sample. 
 
static void write_frame_footer(FlacEncodeContext *s)
 
const AVCRC * av_crc_get_table(AVCRCId crc_id)
Get an initialized standard CRC table. 
 
FlacSubframe subframes[FLAC_MAX_CHANNELS]
 
CompressionOptions options
 
FFLPCType
LPC analysis type. 
 
#define FF_DISABLE_DEPRECATION_WARNINGS
 
static int estimate_stereo_mode(const int32_t *left_ch, const int32_t *right_ch, int n, int max_rice_param)
 
common internal api header. 
 
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros. 
 
int32_t residual[FLAC_MAX_BLOCKSIZE+11]
 
const int32_t ff_flac_blocksize_table[16]
 
#define AV_CODEC_CAP_LOSSLESS
Codec is lossless. 
 
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s. 
 
static av_cold int flac_encode_close(AVCodecContext *avctx)
 
static av_cold void dprint_compression_options(FlacEncodeContext *s)
 
av_cold void ff_bswapdsp_init(BswapDSPContext *c)
 
static int find_optimal_param(uint64_t sum, int n, int max_param)
Solve for d/dk(rice_encode_count) = n-((sum-(n>>1))>>(k+1)) = 0. 
 
static av_always_inline int diff(const uint32_t a, const uint32_t b)
 
#define FF_ENABLE_DEPRECATION_WARNINGS
 
attribute_deprecated int min_prediction_order
 
int channels
number of audio channels 
 
static uint64_t subframe_count_exact(FlacEncodeContext *s, FlacSubframe *sub, int pred_order)
 
static const AVClass flac_encoder_class
 
static enum AVSampleFormat sample_fmts[]
 
Public header for MD5 hash function implementation. 
 
static void init_frame(FlacEncodeContext *s, int nb_samples)
 
static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base. 
 
static int update_md5_sum(FlacEncodeContext *s, const void *samples)
 
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet. 
 
This structure stores compressed data. 
 
int nb_samples
number of audio samples (per channel) described by this frame 
 
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
 
static av_cold int flac_encode_init(AVCodecContext *avctx)
 
static void write_streaminfo(FlacEncodeContext *s, uint8_t *header)
Write streaminfo metadata block to byte array. 
 
#define FLAC_MAX_CHANNELS
 
uint8_t pi<< 24) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_U8,(uint64_t)((*(constuint8_t *) pi-0x80U))<< 56) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)*(1.0f/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_U8,(*(constuint8_t *) pi-0x80)*(1.0/(1<< 7))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S16,(*(constint16_t *) pi >>8)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S16,(uint64_t)(*(constint16_t *) pi)<< 48) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S16,*(constint16_t *) pi *(1.0f/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S16,*(constint16_t *) pi *(1.0/(1<< 15))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S32,(*(constint32_t *) pi >>24)+0x80) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_S32,(uint64_t)(*(constint32_t *) pi)<< 32) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S32,*(constint32_t *) pi *(1.0f/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S32,*(constint32_t *) pi *(1.0/(1U<< 31))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_S64,(*(constint64_t *) pi >>56)+0x80) CONV_FUNC(AV_SAMPLE_FMT_FLT, float, AV_SAMPLE_FMT_S64,*(constint64_t *) pi *(1.0f/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_DBL, double, AV_SAMPLE_FMT_S64,*(constint64_t *) pi *(1.0/(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_FLT, av_clip_uint8(lrintf(*(constfloat *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_FLT, av_clip_int16(lrintf(*(constfloat *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_FLT, av_clipl_int32(llrintf(*(constfloat *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_FLT, llrintf(*(constfloat *) pi *(INT64_C(1)<< 63))) CONV_FUNC(AV_SAMPLE_FMT_U8, uint8_t, AV_SAMPLE_FMT_DBL, av_clip_uint8(lrint(*(constdouble *) pi *(1<< 7))+0x80)) CONV_FUNC(AV_SAMPLE_FMT_S16, int16_t, AV_SAMPLE_FMT_DBL, av_clip_int16(lrint(*(constdouble *) pi *(1<< 15)))) CONV_FUNC(AV_SAMPLE_FMT_S32, int32_t, AV_SAMPLE_FMT_DBL, av_clipl_int32(llrint(*(constdouble *) pi *(1U<< 31)))) CONV_FUNC(AV_SAMPLE_FMT_S64, int64_t, AV_SAMPLE_FMT_DBL, llrint(*(constdouble *) pi *(INT64_C(1)<< 63)))#defineFMT_PAIR_FUNC(out, in) staticconv_func_type *constfmt_pair_to_conv_functions[AV_SAMPLE_FMT_NB *AV_SAMPLE_FMT_NB]={FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_U8), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S16), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S32), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_FLT), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_DBL), FMT_PAIR_FUNC(AV_SAMPLE_FMT_U8, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S16, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S32, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_FLT, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_S64), FMT_PAIR_FUNC(AV_SAMPLE_FMT_S64, AV_SAMPLE_FMT_S64),};staticvoidcpy1(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, len);}staticvoidcpy2(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 2 *len);}staticvoidcpy4(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 4 *len);}staticvoidcpy8(uint8_t **dst, constuint8_t **src, intlen){memcpy(*dst,*src, 8 *len);}AudioConvert *swri_audio_convert_alloc(enumAVSampleFormatout_fmt, enumAVSampleFormatin_fmt, intchannels, constint *ch_map, intflags){AudioConvert *ctx;conv_func_type *f=fmt_pair_to_conv_functions[av_get_packed_sample_fmt(out_fmt)+AV_SAMPLE_FMT_NB *av_get_packed_sample_fmt(in_fmt)];if(!f) returnNULL;ctx=av_mallocz(sizeof(*ctx));if(!ctx) returnNULL;if(channels==1){in_fmt=av_get_planar_sample_fmt(in_fmt);out_fmt=av_get_planar_sample_fmt(out_fmt);}ctx->channels=channels;ctx->conv_f=f;ctx->ch_map=ch_map;if(in_fmt==AV_SAMPLE_FMT_U8||in_fmt==AV_SAMPLE_FMT_U8P) memset(ctx->silence, 0x80, sizeof(ctx->silence));if(out_fmt==in_fmt &&!ch_map){switch(av_get_bytes_per_sample(in_fmt)){case1:ctx->simd_f=cpy1;break;case2:ctx->simd_f=cpy2;break;case4:ctx->simd_f=cpy4;break;case8:ctx->simd_f=cpy8;break;}}if(HAVE_X86ASM &&1) swri_audio_convert_init_x86(ctx, out_fmt, in_fmt, channels);if(ARCH_ARM) swri_audio_convert_init_arm(ctx, out_fmt, in_fmt, channels);if(ARCH_AARCH64) swri_audio_convert_init_aarch64(ctx, out_fmt, in_fmt, channels);returnctx;}voidswri_audio_convert_free(AudioConvert **ctx){av_freep(ctx);}intswri_audio_convert(AudioConvert *ctx, AudioData *out, AudioData *in, intlen){intch;intoff=0;constintos=(out->planar?1:out->ch_count)*out->bps;unsignedmisaligned=0;av_assert0(ctx->channels==out->ch_count);if(ctx->in_simd_align_mask){intplanes=in->planar?in->ch_count:1;unsignedm=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) in->ch[ch];misaligned|=m &ctx->in_simd_align_mask;}if(ctx->out_simd_align_mask){intplanes=out->planar?out->ch_count:1;unsignedm=0;for(ch=0;ch< planes;ch++) m|=(intptr_t) out->ch[ch];misaligned|=m &ctx->out_simd_align_mask;}if(ctx->simd_f &&!ctx->ch_map &&!misaligned){off=len &~15;av_assert1(off >=0);av_assert1(off<=len);av_assert2(ctx->channels==SWR_CH_MAX||!in->ch[ctx->channels]);if(off >0){if(out->planar==in->planar){intplanes=out->planar?out->ch_count:1;for(ch=0;ch< planes;ch++){ctx->simd_f(out-> ch ch