43 #define MUL(a,b) (((int64_t)(a) * (int64_t)(b)) >> FRAC_BITS)
45 #define SAMPLES_BUF_SIZE 4096
68 float scale_factor_inv_table[64];
124 s->bitrate_index =
i;
129 s->frame_size = ((
int)
a) * 8;
133 s->frame_frac_incr = (
int)((
a -
floor(
a)) * 65536.0);
142 ff_dlog(avctx,
"%d kb/s, %d Hz, frame_size=%d bits, table=%d, padincr=%x\n",
145 for(
i=0;
i<
s->nb_channels;
i++)
146 s->samples_offset[
i] = 0;
154 s->filter_bank[
i] = v;
158 s->filter_bank[512 -
i] = v;
162 v = (
int)(
exp2((3 -
i) / 3.0) * (1 << 20));
165 s->scale_factor_table[
i] = v;
167 s->scale_factor_inv_table[
i] =
exp2(-(3 -
i) / 3.0) / (float)(1 << 20);
170 s->scale_factor_shift[
i] = 21 -
P - (
i / 3);
171 s->scale_factor_mult[
i] = (1 <<
P) *
exp2((
i % 3) / 3.0);
186 s->scale_diff_table[
i] = v;
195 s->total_quant_bits[
i] = 12 * v;
208 for(j=31;j>=3;j-=2)
tab[j] +=
tab[j - 2];
252 x1 =
MUL((t[8] - x2), xp[0]);
253 x2 =
MUL((t[8] + x2), xp[1]);
266 xr =
MUL(t[28],xp[0]);
270 xr =
MUL(t[4],xp[1]);
271 t[ 4] = (t[24] - xr);
272 t[24] = (t[24] + xr);
274 xr =
MUL(t[20],xp[2]);
278 xr =
MUL(t[12],xp[3]);
279 t[12] = (t[16] - xr);
280 t[16] = (t[16] + xr);
285 for (
i = 0;
i < 4;
i++) {
308 xr =
MUL(
t1[0], *xp);
321 #define WSHIFT (WFRAC_BITS + 15 - FRAC_BITS)
331 offset =
s->samples_offset[ch];
332 out = &
s->sb_samples[ch][0][0][0];
336 s->samples_buf[ch][
offset + (31 -
i)] = samples[0];
341 p =
s->samples_buf[ch] +
offset;
345 sum = p[0*64] * q[0*64];
346 sum += p[1*64] * q[1*64];
347 sum += p[2*64] * q[2*64];
348 sum += p[3*64] * q[3*64];
349 sum += p[4*64] * q[4*64];
350 sum += p[5*64] * q[5*64];
351 sum += p[6*64] * q[6*64];
352 sum += p[7*64] * q[7*64];
369 s->samples_buf[ch], (512 - 32) * 2);
373 s->samples_offset[ch] =
offset;
377 unsigned char scale_code[
SBLIMIT],
378 unsigned char scale_factors[
SBLIMIT][3],
379 int sb_samples[3][12][
SBLIMIT],
382 int *p, vmax, v, n,
i, j, k,
code;
384 unsigned char *sf = &scale_factors[0][0];
386 for(j=0;j<sblimit;j++) {
389 p = &sb_samples[
i][0][j];
402 index = (21 - n) * 3 - 3;
404 while (vmax <= s->scale_factor_table[
index+1])
422 d1 =
s->scale_diff_table[sf[0] - sf[1] + 64];
423 d2 =
s->scale_diff_table[sf[1] - sf[2] + 64];
426 switch(d1 * 5 + d2) {
458 sf[1] = sf[2] = sf[0];
463 sf[0] = sf[1] = sf[2];
469 sf[0] = sf[2] = sf[1];
475 sf[1] = sf[2] = sf[0];
483 sf[0], sf[1], sf[2], d1, d2,
code);
484 scale_code[j] =
code;
496 for(
i=0;
i<
s->sblimit;
i++) {
502 #define SB_NOTALLOCATED 0
503 #define SB_ALLOCATED 1
514 int i, ch,
b, max_smr, max_ch, max_sb, current_frame_size, max_frame_size;
518 const unsigned char *alloc;
520 memcpy(smr, smr1,
s->nb_channels *
sizeof(
short) *
SBLIMIT);
525 max_frame_size =
s->frame_size;
526 s->frame_frac +=
s->frame_frac_incr;
527 if (
s->frame_frac >= 65536) {
528 s->frame_frac -= 65536;
536 current_frame_size = 32;
537 alloc =
s->alloc_table;
538 for(
i=0;
i<
s->sblimit;
i++) {
540 current_frame_size += incr *
s->nb_channels;
548 for(ch=0;ch<
s->nb_channels;ch++) {
549 for(
i=0;
i<
s->sblimit;
i++) {
550 if (smr[ch][
i] > max_smr && subband_status[ch][
i] !=
SB_NOMORE) {
551 max_smr = smr[ch][
i];
559 ff_dlog(
NULL,
"current=%d max=%d max_sb=%d max_ch=%d alloc=%d\n",
560 current_frame_size, max_frame_size, max_sb, max_ch,
565 alloc =
s->alloc_table;
566 for(
i=0;
i<max_sb;
i++) {
567 alloc += 1 << alloc[0];
573 incr +=
s->total_quant_bits[alloc[1]];
577 incr =
s->total_quant_bits[alloc[
b + 1]] -
578 s->total_quant_bits[alloc[
b]];
581 if (current_frame_size + incr <= max_frame_size) {
584 current_frame_size += incr;
586 smr[max_ch][max_sb] = smr1[max_ch][max_sb] -
quant_snr[alloc[
b]];
588 if (
b == ((1 << alloc[0]) - 1))
589 subband_status[max_ch][max_sb] =
SB_NOMORE;
594 subband_status[max_ch][max_sb] =
SB_NOMORE;
597 *padding = max_frame_size - current_frame_size;
609 int i, j, k, l, bit_alloc_bits,
b, ch;
632 for(
i=0;
i<
s->sblimit;
i++) {
633 bit_alloc_bits =
s->alloc_table[j];
634 for(ch=0;ch<
s->nb_channels;ch++) {
637 j += 1 << bit_alloc_bits;
641 for(
i=0;
i<
s->sblimit;
i++) {
642 for(ch=0;ch<
s->nb_channels;ch++) {
649 for(
i=0;
i<
s->sblimit;
i++) {
650 for(ch=0;ch<
s->nb_channels;ch++) {
652 sf = &
s->scale_factors[ch][
i][0];
653 switch(
s->scale_code[ch][
i]) {
677 for(
i=0;
i<
s->sblimit;
i++) {
678 bit_alloc_bits =
s->alloc_table[j];
679 for(ch=0;ch<
s->nb_channels;ch++) {
684 qindex =
s->alloc_table[j+
b];
687 sample =
s->sb_samples[ch][k][l + m][
i];
692 a = (float)
sample *
s->scale_factor_inv_table[
s->scale_factors[ch][
i][k]];
693 q[m] = (
int)((
a + 1.0) * steps * 0.5);
698 e =
s->scale_factors[ch][
i][k];
699 shift =
s->scale_factor_shift[e];
700 mult =
s->scale_factor_mult[e];
711 q[m] = (
q1 * (unsigned)steps) >> (
P + 1);
722 q[0] + steps * (q[1] + steps * q[2]));
731 j += 1 << bit_alloc_bits;
737 for(
i=0;
i<padding;
i++)
748 const int16_t *samples = (
const int16_t *)
frame->
data[0];
757 for(
i=0;
i<
s->nb_channels;
i++) {
759 s->sb_samples[
i],
s->sblimit);
761 for(
i=0;
i<
s->nb_channels;
i++) {
static int bit_alloc(AC3EncodeContext *s, int snr_offset)
Run the bit allocation with a given SNR offset.
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Libavcodec external API header.
audio channel layout utility functions
static __device__ float floor(float a)
int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size)
Check AVPacket size and/or allocate data.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define AV_NOPTS_VALUE
Undefined timestamp value.
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
static int16_t mult(Float11 *f1, Float11 *f2)
static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, int64_t samples)
Rescale from sample rate to AVCodecContext.time_base.
common internal API header
int ff_mpa_l2_select_table(int bitrate, int nb_channels, int freq, int lsf)
mpeg audio declarations for both encoder and decoder.
#define MPA_MAX_CODED_FRAME_SIZE
const int ff_mpa_quant_bits[17]
const uint16_t avpriv_mpa_freq_tab[3]
const unsigned char *const ff_mpa_alloc_tables[5]
const uint16_t avpriv_mpa_bitrate_tab[2][3][15]
const int ff_mpa_sblimit_table[5]
const int ff_mpa_quant_steps[17]
mpeg audio layer common tables.
const int32_t ff_mpa_enwindow[257]
static void idct32(int *out, int *tab)
static void encode_frame(MpegAudioContext *s, unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT], int padding)
static void compute_bit_allocation(MpegAudioContext *s, short smr1[MPA_MAX_CHANNELS][SBLIMIT], unsigned char bit_alloc[MPA_MAX_CHANNELS][SBLIMIT], int *padding)
static int MPA_encode_frame(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame, int *got_packet_ptr)
static void filter(MpegAudioContext *s, int ch, const short *samples, int incr)
static av_cold int MPA_encode_init(AVCodecContext *avctx)
static void compute_scale_factors(MpegAudioContext *s, unsigned char scale_code[SBLIMIT], unsigned char scale_factors[SBLIMIT][3], int sb_samples[3][12][SBLIMIT], int sblimit)
static const AVCodecDefault mp2_defaults[]
static void psycho_acoustic_model(MpegAudioContext *s, short smr[SBLIMIT])
mpeg audio layer 2 tables.
static const unsigned short quant_snr[17]
static const int bitinv32[32]
static const int costab32[30]
static const unsigned char nb_scale_factors[4]
static const float fixed_smr[SBLIMIT]
static const uint16_t table[]
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
static int put_bits_count(PutBitContext *s)
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
static int shift(int a, int b)
main external API structure.
int64_t bit_rate
the average bitrate
int initial_padding
Audio only.
int sample_rate
samples per second
int channels
number of audio channels
int frame_size
Number of samples per channel in an audio frame.
This structure describes decoded (raw) audio or video data.
int64_t pts
Presentation timestamp in time_base units (time when frame should be shown to user).
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
This structure stores compressed data.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
const unsigned char * alloc_table
int samples_offset[MPA_MAX_CHANNELS]
int8_t scale_factor_shift[64]
int sb_samples[MPA_MAX_CHANNELS][3][12][SBLIMIT]
short samples_buf[MPA_MAX_CHANNELS][SAMPLES_BUF_SIZE]
unsigned short total_quant_bits[17]
unsigned short scale_factor_mult[64]
unsigned char scale_diff_table[128]
unsigned char scale_code[MPA_MAX_CHANNELS][SBLIMIT]
unsigned char scale_factors[MPA_MAX_CHANNELS][SBLIMIT][3]
int scale_factor_table[64]
static const struct twinvq_data tab
static const uint8_t q1[256]
static const uint8_t offset[127][2]