39
39
unsigned int sample_rate;
40
unsigned int bitstream_id;
41
41
unsigned int frame_size_min; /* minimum frame size in case rounding is necessary */
42
42
unsigned int frame_size; /* current frame size in words */
43
43
unsigned int bits_written;
44
44
unsigned int samples_written;
46
unsigned int frmsizecod;
47
unsigned int fscod; /* frequency */
46
unsigned int frame_size_code;
47
unsigned int sr_code; /* frequency */
48
unsigned int channel_mode;
50
unsigned int bitstream_mode;
51
51
short last_samples[AC3_MAX_CHANNELS][256];
52
52
unsigned int chbwcod[AC3_MAX_CHANNELS];
53
53
int nb_coefs[AC3_MAX_CHANNELS];
55
55
/* bitrate allocation control */
56
int sgaincod, sdecaycod, fdecaycod, dbkneecod, floorcod;
56
int slow_gain_code, slow_decay_code, fast_decay_code, db_per_bit_code, floor_code;
57
57
AC3BitAllocParameters bit_alloc;
59
int fgaincod[AC3_MAX_CHANNELS];
60
int fsnroffst[AC3_MAX_CHANNELS];
58
int coarse_snr_offset;
59
int fast_gain_code[AC3_MAX_CHANNELS];
60
int fine_snr_offset[AC3_MAX_CHANNELS];
61
61
/* mantissa encoding */
62
62
int mant1_cnt, mant2_cnt, mant4_cnt;
63
63
} AC3EncodeContext;
65
static int16_t costab[64];
66
static int16_t sintab[64];
67
static int16_t xcos1[128];
68
static int16_t xsin1[128];
67
70
#define MDCT_NBITS 9
68
71
#define N (1 << MDCT_NBITS)
86
static inline int calc_lowcomp1(int a, int b0, int b1)
88
if ((b0 + 256) == b1) {
97
static inline int calc_lowcomp(int a, int b0, int b1, int bin)
100
if ((b0 + 256) == b1) {
102
} else if (b0 > b1) {
106
} else if (bin < 20) {
107
if ((b0 + 256) == b1) {
109
} else if (b0 > b1) {
120
/* AC3 bit allocation. The algorithm is the one described in the AC3
122
void ac3_parametric_bit_allocation(AC3BitAllocParameters *s, uint8_t *bap,
123
int8_t *exp, int start, int end,
124
int snroffset, int fgain, int is_lfe,
125
int deltbae,int deltnseg,
126
uint8_t *deltoffst, uint8_t *deltlen, uint8_t *deltba)
128
int bin,i,j,k,end1,v,v1,bndstrt,bndend,lowcomp,begin;
129
int fastleak,slowleak,address,tmp;
130
int16_t psd[256]; /* scaled exponents */
131
int16_t bndpsd[50]; /* interpolated exponents */
132
int16_t excite[50]; /* excitation */
133
int16_t mask[50]; /* masking value */
135
/* exponent mapping to PSD */
136
for(bin=start;bin<end;bin++) {
137
psd[bin]=(3072 - (exp[bin] << 7));
140
/* PSD integration */
147
if (end1 > end) end1=end;
148
for(i=j;i<end1;i++) {
155
if (adr > 255) adr=255;
159
if (adr > 255) adr=255;
166
} while (end > bndtab[k]);
168
/* excitation function */
169
bndstrt = masktab[start];
170
bndend = masktab[end-1] + 1;
174
lowcomp = calc_lowcomp1(lowcomp, bndpsd[0], bndpsd[1]) ;
175
excite[0] = bndpsd[0] - fgain - lowcomp ;
176
lowcomp = calc_lowcomp1(lowcomp, bndpsd[1], bndpsd[2]) ;
177
excite[1] = bndpsd[1] - fgain - lowcomp ;
179
for (bin = 2; bin < 7; bin++) {
180
if (!(is_lfe && bin == 6))
181
lowcomp = calc_lowcomp1(lowcomp, bndpsd[bin], bndpsd[bin+1]) ;
182
fastleak = bndpsd[bin] - fgain ;
183
slowleak = bndpsd[bin] - s->sgain ;
184
excite[bin] = fastleak - lowcomp ;
185
if (!(is_lfe && bin == 6)) {
186
if (bndpsd[bin] <= bndpsd[bin+1]) {
194
if (end1 > 22) end1=22;
196
for (bin = begin; bin < end1; bin++) {
197
if (!(is_lfe && bin == 6))
198
lowcomp = calc_lowcomp(lowcomp, bndpsd[bin], bndpsd[bin+1], bin) ;
200
fastleak -= s->fdecay ;
201
v = bndpsd[bin] - fgain;
202
if (fastleak < v) fastleak = v;
204
slowleak -= s->sdecay ;
205
v = bndpsd[bin] - s->sgain;
206
if (slowleak < v) slowleak = v;
208
v=fastleak - lowcomp;
209
if (slowleak > v) v=slowleak;
215
/* coupling channel */
218
fastleak = (s->cplfleak << 8) + 768;
219
slowleak = (s->cplsleak << 8) + 768;
222
for (bin = begin; bin < bndend; bin++) {
223
fastleak -= s->fdecay ;
224
v = bndpsd[bin] - fgain;
225
if (fastleak < v) fastleak = v;
226
slowleak -= s->sdecay ;
227
v = bndpsd[bin] - s->sgain;
228
if (slowleak < v) slowleak = v;
231
if (slowleak > v) v = slowleak;
235
/* compute masking curve */
237
for (bin = bndstrt; bin < bndend; bin++) {
239
tmp = s->dbknee - bndpsd[bin];
243
v=hth[bin >> s->halfratecod][s->fscod];
248
/* delta bit allocation */
250
if (deltbae == 0 || deltbae == 1) {
251
int band, seg, delta;
253
for (seg = 0; seg < deltnseg; seg++) {
254
band += deltoffst[seg] ;
255
if (deltba[seg] >= 4) {
256
delta = (deltba[seg] - 3) << 7;
258
delta = (deltba[seg] - 4) << 7;
260
for (k = 0; k < deltlen[seg]; k++) {
261
mask[band] += delta ;
267
/* compute bit allocation */
279
end1=bndtab[j] + bndsz[j];
280
if (end1 > end) end1=end;
282
for (k = i; k < end1; k++) {
283
address = (psd[i] - v) >> 5 ;
284
if (address < 0) address=0;
285
else if (address > 63) address=63;
286
bap[i] = baptab[address];
289
} while (end > bndtab[j++]) ;
292
87
typedef struct IComplex {
296
91
static void fft_init(int ln)
418
static void bit_alloc_masking(AC3EncodeContext *s,
419
uint8_t encoded_exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
420
uint8_t exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS],
421
int16_t psd[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
422
int16_t mask[NB_BLOCKS][AC3_MAX_CHANNELS][50])
425
int16_t band_psd[NB_BLOCKS][AC3_MAX_CHANNELS][50];
427
for(blk=0; blk<NB_BLOCKS; blk++) {
428
for(ch=0;ch<s->nb_all_channels;ch++) {
429
if(exp_strategy[blk][ch] == EXP_REUSE) {
430
memcpy(psd[blk][ch], psd[blk-1][ch], (N/2)*sizeof(int16_t));
431
memcpy(mask[blk][ch], mask[blk-1][ch], 50*sizeof(int16_t));
433
ff_ac3_bit_alloc_calc_psd(encoded_exp[blk][ch], 0,
435
psd[blk][ch], band_psd[blk][ch]);
436
ff_ac3_bit_alloc_calc_mask(&s->bit_alloc, band_psd[blk][ch],
438
ff_ac3_fast_gain_tab[s->fast_gain_code[ch]],
439
ch == s->lfe_channel,
440
DBA_NONE, 0, NULL, NULL, NULL,
636
447
static int bit_alloc(AC3EncodeContext *s,
448
int16_t mask[NB_BLOCKS][AC3_MAX_CHANNELS][50],
449
int16_t psd[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
637
450
uint8_t bap[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
638
uint8_t encoded_exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
639
uint8_t exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS],
640
int frame_bits, int csnroffst, int fsnroffst)
451
int frame_bits, int coarse_snr_offset, int fine_snr_offset)
456
snr_offset = (((coarse_snr_offset - 15) << 4) + fine_snr_offset) << 2;
644
458
/* compute size */
645
459
for(i=0;i<NB_BLOCKS;i++) {
647
461
s->mant2_cnt = 0;
648
462
s->mant4_cnt = 0;
649
463
for(ch=0;ch<s->nb_all_channels;ch++) {
650
ac3_parametric_bit_allocation(&s->bit_alloc,
651
bap[i][ch], (int8_t *)encoded_exp[i][ch],
653
(((csnroffst-15) << 4) +
655
fgaintab[s->fgaincod[ch]],
656
ch == s->lfe_channel,
657
2, 0, NULL, NULL, NULL);
464
ff_ac3_bit_alloc_calc_bap(mask[i][ch], psd[i][ch], 0,
465
s->nb_coefs[ch], snr_offset,
466
s->bit_alloc.floor, bap[i][ch]);
658
467
frame_bits += compute_mantissa_size(s, bap[i][ch],
659
468
s->nb_coefs[ch]);
663
472
printf("csnr=%d fsnr=%d frame_bits=%d diff=%d\n",
664
csnroffst, fsnroffst, frame_bits,
473
coarse_snr_offset, fine_snr_offset, frame_bits,
665
474
16 * s->frame_size - ((frame_bits + 7) & ~7));
667
476
return 16 * s->frame_size - frame_bits;
679
int csnroffst, fsnroffst;
488
int coarse_snr_offset, fine_snr_offset;
680
489
uint8_t bap1[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
490
int16_t psd[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
491
int16_t mask[NB_BLOCKS][AC3_MAX_CHANNELS][50];
681
492
static int frame_bits_inc[8] = { 0, 0, 2, 2, 2, 4, 2, 4 };
683
494
/* init default parameters */
495
s->slow_decay_code = 2;
496
s->fast_decay_code = 1;
497
s->slow_gain_code = 1;
498
s->db_per_bit_code = 2;
689
500
for(ch=0;ch<s->nb_all_channels;ch++)
501
s->fast_gain_code[ch] = 4;
692
503
/* compute real values */
693
s->bit_alloc.fscod = s->fscod;
694
s->bit_alloc.halfratecod = s->halfratecod;
695
s->bit_alloc.sdecay = sdecaytab[s->sdecaycod] >> s->halfratecod;
696
s->bit_alloc.fdecay = fdecaytab[s->fdecaycod] >> s->halfratecod;
697
s->bit_alloc.sgain = sgaintab[s->sgaincod];
698
s->bit_alloc.dbknee = dbkneetab[s->dbkneecod];
699
s->bit_alloc.floor = floortab[s->floorcod];
504
s->bit_alloc.sr_code = s->sr_code;
505
s->bit_alloc.sr_shift = s->sr_shift;
506
s->bit_alloc.slow_decay = ff_ac3_slow_decay_tab[s->slow_decay_code] >> s->sr_shift;
507
s->bit_alloc.fast_decay = ff_ac3_fast_decay_tab[s->fast_decay_code] >> s->sr_shift;
508
s->bit_alloc.slow_gain = ff_ac3_slow_gain_tab[s->slow_gain_code];
509
s->bit_alloc.db_per_bit = ff_ac3_db_per_bit_tab[s->db_per_bit_code];
510
s->bit_alloc.floor = ff_ac3_floor_tab[s->floor_code];
701
512
/* header size */
702
513
frame_bits += 65;
703
// if (s->acmod == 2)
514
// if (s->channel_mode == 2)
704
515
// frame_bits += 2;
705
frame_bits += frame_bits_inc[s->acmod];
516
frame_bits += frame_bits_inc[s->channel_mode];
707
518
/* audio blocks */
708
519
for(i=0;i<NB_BLOCKS;i++) {
709
520
frame_bits += s->nb_channels * 2 + 2; /* blksw * c, dithflag * c, dynrnge, cplstre */
521
if (s->channel_mode == AC3_CHMODE_STEREO) {
711
522
frame_bits++; /* rematstr */
712
523
if(i==0) frame_bits += 4;
736
547
frame_bits += 16;
549
/* calculate psd and masking curve before doing bit allocation */
550
bit_alloc_masking(s, encoded_exp, exp_strategy, psd, mask);
738
552
/* now the big work begins : do the bit allocation. Modify the snr
739
553
offset until we can pack everything in the requested frame size */
741
csnroffst = s->csnroffst;
742
while (csnroffst >= 0 &&
743
bit_alloc(s, bap, encoded_exp, exp_strategy, frame_bits, csnroffst, 0) < 0)
744
csnroffst -= SNR_INC1;
746
av_log(NULL, AV_LOG_ERROR, "Bit allocation failed, try increasing the bitrate, -ab 384 for example!\n");
555
coarse_snr_offset = s->coarse_snr_offset;
556
while (coarse_snr_offset >= 0 &&
557
bit_alloc(s, mask, psd, bap, frame_bits, coarse_snr_offset, 0) < 0)
558
coarse_snr_offset -= SNR_INC1;
559
if (coarse_snr_offset < 0) {
560
av_log(NULL, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n");
749
while ((csnroffst + SNR_INC1) <= 63 &&
750
bit_alloc(s, bap1, encoded_exp, exp_strategy, frame_bits,
751
csnroffst + SNR_INC1, 0) >= 0) {
752
csnroffst += SNR_INC1;
753
memcpy(bap, bap1, sizeof(bap1));
755
while ((csnroffst + 1) <= 63 &&
756
bit_alloc(s, bap1, encoded_exp, exp_strategy, frame_bits, csnroffst + 1, 0) >= 0) {
758
memcpy(bap, bap1, sizeof(bap1));
762
while ((fsnroffst + SNR_INC1) <= 15 &&
763
bit_alloc(s, bap1, encoded_exp, exp_strategy, frame_bits,
764
csnroffst, fsnroffst + SNR_INC1) >= 0) {
765
fsnroffst += SNR_INC1;
766
memcpy(bap, bap1, sizeof(bap1));
768
while ((fsnroffst + 1) <= 15 &&
769
bit_alloc(s, bap1, encoded_exp, exp_strategy, frame_bits,
770
csnroffst, fsnroffst + 1) >= 0) {
772
memcpy(bap, bap1, sizeof(bap1));
775
s->csnroffst = csnroffst;
563
while ((coarse_snr_offset + SNR_INC1) <= 63 &&
564
bit_alloc(s, mask, psd, bap1, frame_bits,
565
coarse_snr_offset + SNR_INC1, 0) >= 0) {
566
coarse_snr_offset += SNR_INC1;
567
memcpy(bap, bap1, sizeof(bap1));
569
while ((coarse_snr_offset + 1) <= 63 &&
570
bit_alloc(s, mask, psd, bap1, frame_bits, coarse_snr_offset + 1, 0) >= 0) {
572
memcpy(bap, bap1, sizeof(bap1));
576
while ((fine_snr_offset + SNR_INC1) <= 15 &&
577
bit_alloc(s, mask, psd, bap1, frame_bits,
578
coarse_snr_offset, fine_snr_offset + SNR_INC1) >= 0) {
579
fine_snr_offset += SNR_INC1;
580
memcpy(bap, bap1, sizeof(bap1));
582
while ((fine_snr_offset + 1) <= 15 &&
583
bit_alloc(s, mask, psd, bap1, frame_bits,
584
coarse_snr_offset, fine_snr_offset + 1) >= 0) {
586
memcpy(bap, bap1, sizeof(bap1));
589
s->coarse_snr_offset = coarse_snr_offset;
776
590
for(ch=0;ch<s->nb_all_channels;ch++)
777
s->fsnroffst[ch] = fsnroffst;
591
s->fine_snr_offset[ch] = fine_snr_offset;
778
592
#if defined(DEBUG_BITALLOC)
842
643
for(i=0;i<3;i++) {
844
if ((ac3_freqs[j] >> i) == freq)
645
if ((ff_ac3_sample_rate_tab[j] >> i) == freq)
849
650
s->sample_rate = freq;
852
s->bsid = 8 + s->halfratecod;
853
s->bsmod = 0; /* complete main audio service */
653
s->bitstream_id = 8 + s->sr_shift;
654
s->bitstream_mode = 0; /* complete main audio service */
855
656
/* bitrate & frame size */
857
657
for(i=0;i<19;i++) {
858
if ((ac3_bitratetab[i] >> s->halfratecod) == bitrate)
658
if ((ff_ac3_bitrate_tab[i] >> s->sr_shift)*1000 == bitrate)
863
663
s->bit_rate = bitrate;
864
s->frmsizecod = i << 1;
865
s->frame_size_min = (bitrate * 1000 * AC3_FRAME_SIZE) / (freq * 16);
664
s->frame_size_code = i << 1;
665
s->frame_size_min = ff_ac3_frame_size_tab[s->frame_size_code][s->sr_code];
866
666
s->bits_written = 0;
867
667
s->samples_written = 0;
868
668
s->frame_size = s->frame_size_min;
870
670
/* bit allocation init */
672
/* calculate bandwidth based on user-specified cutoff frequency */
673
int cutoff = av_clip(avctx->cutoff, 1, s->sample_rate >> 1);
674
int fbw_coeffs = cutoff * 512 / s->sample_rate;
675
bw_code = av_clip((fbw_coeffs - 73) / 3, 0, 60);
677
/* use default bandwidth setting */
678
/* XXX: should compute the bandwidth according to the frame
679
size, so that we avoid annoying high frequency artifacts */
871
682
for(ch=0;ch<s->nb_channels;ch++) {
872
683
/* bandwidth for each channel */
873
/* XXX: should compute the bandwidth according to the frame
874
size, so that we avoid anoying high freq artefacts */
875
s->chbwcod[ch] = 50; /* sample bandwidth as mpeg audio layer 2 table 0 */
876
s->nb_coefs[ch] = ((s->chbwcod[ch] + 12) * 3) + 37;
684
s->chbwcod[ch] = bw_code;
685
s->nb_coefs[ch] = bw_code * 3 + 73;
879
688
s->nb_coefs[s->lfe_channel] = 7; /* fixed */
881
690
/* initial snr offset */
691
s->coarse_snr_offset = 40;
887
694
fft_init(MDCT_NBITS - 2);
905
712
put_bits(&s->pb, 16, 0x0b77); /* frame header */
906
713
put_bits(&s->pb, 16, 0); /* crc1: will be filled later */
907
put_bits(&s->pb, 2, s->fscod);
908
put_bits(&s->pb, 6, s->frmsizecod + (s->frame_size - s->frame_size_min));
909
put_bits(&s->pb, 5, s->bsid);
910
put_bits(&s->pb, 3, s->bsmod);
911
put_bits(&s->pb, 3, s->acmod);
912
if ((s->acmod & 0x01) && s->acmod != 0x01)
714
put_bits(&s->pb, 2, s->sr_code);
715
put_bits(&s->pb, 6, s->frame_size_code + (s->frame_size - s->frame_size_min));
716
put_bits(&s->pb, 5, s->bitstream_id);
717
put_bits(&s->pb, 3, s->bitstream_mode);
718
put_bits(&s->pb, 3, s->channel_mode);
719
if ((s->channel_mode & 0x01) && s->channel_mode != AC3_CHMODE_MONO)
913
720
put_bits(&s->pb, 2, 1); /* XXX -4.5 dB */
721
if (s->channel_mode & 0x04)
915
722
put_bits(&s->pb, 2, 1); /* XXX -6 dB */
916
if (s->acmod == 0x02)
723
if (s->channel_mode == AC3_CHMODE_STEREO)
917
724
put_bits(&s->pb, 2, 0); /* surround not indicated */
918
725
put_bits(&s->pb, 1, s->lfe); /* LFE */
919
726
put_bits(&s->pb, 5, 31); /* dialog norm: -31 db */
1086
893
baie = (block_num == 0);
1087
894
put_bits(&s->pb, 1, baie);
1089
put_bits(&s->pb, 2, s->sdecaycod);
1090
put_bits(&s->pb, 2, s->fdecaycod);
1091
put_bits(&s->pb, 2, s->sgaincod);
1092
put_bits(&s->pb, 2, s->dbkneecod);
1093
put_bits(&s->pb, 3, s->floorcod);
896
put_bits(&s->pb, 2, s->slow_decay_code);
897
put_bits(&s->pb, 2, s->fast_decay_code);
898
put_bits(&s->pb, 2, s->slow_gain_code);
899
put_bits(&s->pb, 2, s->db_per_bit_code);
900
put_bits(&s->pb, 3, s->floor_code);
1096
903
/* snr offset */
1097
904
put_bits(&s->pb, 1, baie); /* always present with bai */
1099
put_bits(&s->pb, 6, s->csnroffst);
906
put_bits(&s->pb, 6, s->coarse_snr_offset);
1100
907
for(ch=0;ch<s->nb_all_channels;ch++) {
1101
put_bits(&s->pb, 4, s->fsnroffst[ch]);
1102
put_bits(&s->pb, 3, s->fgaincod[ch]);
908
put_bits(&s->pb, 4, s->fine_snr_offset[ch]);
909
put_bits(&s->pb, 3, s->fast_gain_code[ch]);
1318
1125
/* Now we must compute both crcs : this is not so easy for crc1
1319
1126
because it is at the beginning of the data... */
1320
1127
frame_size_58 = (frame_size >> 1) + (frame_size >> 3);
1321
crc1 = bswap_16(av_crc(av_crc8005, 0, frame + 4, 2 * frame_size_58 - 4));
1128
crc1 = bswap_16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
1129
frame + 4, 2 * frame_size_58 - 4));
1322
1130
/* XXX: could precompute crc_inv */
1323
1131
crc_inv = pow_poly((CRC16_POLY >> 1), (16 * frame_size_58) - 16, CRC16_POLY);
1324
1132
crc1 = mul_poly(crc_inv, crc1, CRC16_POLY);
1325
frame[2] = crc1 >> 8;
1133
AV_WB16(frame+2,crc1);
1328
crc2 = bswap_16(av_crc(av_crc8005, 0, frame + 2 * frame_size_58, (frame_size - frame_size_58) * 2 - 2));
1329
frame[2*frame_size - 2] = crc2 >> 8;
1330
frame[2*frame_size - 1] = crc2;
1135
crc2 = bswap_16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
1136
frame + 2 * frame_size_58,
1137
(frame_size - frame_size_58) * 2 - 2));
1138
AV_WB16(frame+2*frame_size-2,crc2);
1332
1140
// printf("n=%d frame_size=%d\n", n, frame_size);
1333
1141
return frame_size * 2;