ac3enc.c 41 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425
  1. /*
  2. * The simplest AC-3 encoder
  3. * Copyright (c) 2000 Fabrice Bellard
  4. *
  5. * This file is part of FFmpeg.
  6. *
  7. * FFmpeg is free software; you can redistribute it and/or
  8. * modify it under the terms of the GNU Lesser General Public
  9. * License as published by the Free Software Foundation; either
  10. * version 2.1 of the License, or (at your option) any later version.
  11. *
  12. * FFmpeg is distributed in the hope that it will be useful,
  13. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * Lesser General Public License for more details.
  16. *
  17. * You should have received a copy of the GNU Lesser General Public
  18. * License along with FFmpeg; if not, write to the Free Software
  19. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  20. */
  21. /**
  22. * @file
  23. * The simplest AC-3 encoder.
  24. */
  25. //#define DEBUG
  26. //#define DEBUG_BITALLOC
  27. #include "libavutil/crc.h"
  28. #include "avcodec.h"
  29. #include "libavutil/common.h" /* for av_reverse */
  30. #include "put_bits.h"
  31. #include "ac3.h"
  32. #include "audioconvert.h"
  33. typedef struct AC3EncodeContext {
  34. PutBitContext pb;
  35. int nb_channels;
  36. int nb_all_channels;
  37. int lfe_channel;
  38. const uint8_t *channel_map;
  39. int bit_rate;
  40. unsigned int sample_rate;
  41. unsigned int bitstream_id;
  42. unsigned int frame_size_min; /* minimum frame size in case rounding is necessary */
  43. unsigned int frame_size; /* current frame size in words */
  44. unsigned int bits_written;
  45. unsigned int samples_written;
  46. int sr_shift;
  47. unsigned int frame_size_code;
  48. unsigned int sr_code; /* frequency */
  49. unsigned int channel_mode;
  50. int lfe;
  51. unsigned int bitstream_mode;
  52. short last_samples[AC3_MAX_CHANNELS][256];
  53. unsigned int chbwcod[AC3_MAX_CHANNELS];
  54. int nb_coefs[AC3_MAX_CHANNELS];
  55. /* bitrate allocation control */
  56. int slow_gain_code, slow_decay_code, fast_decay_code, db_per_bit_code, floor_code;
  57. AC3BitAllocParameters bit_alloc;
  58. int coarse_snr_offset;
  59. int fast_gain_code[AC3_MAX_CHANNELS];
  60. int fine_snr_offset[AC3_MAX_CHANNELS];
  61. /* mantissa encoding */
  62. int mant1_cnt, mant2_cnt, mant4_cnt;
  63. } AC3EncodeContext;
  64. static int16_t costab[64];
  65. static int16_t sintab[64];
  66. static int16_t xcos1[128];
  67. static int16_t xsin1[128];
  68. #define MDCT_NBITS 9
  69. #define N (1 << MDCT_NBITS)
  70. /* new exponents are sent if their Norm 1 exceed this number */
  71. #define EXP_DIFF_THRESHOLD 1000
  72. static inline int16_t fix15(float a)
  73. {
  74. int v;
  75. v = (int)(a * (float)(1 << 15));
  76. if (v < -32767)
  77. v = -32767;
  78. else if (v > 32767)
  79. v = 32767;
  80. return v;
  81. }
  82. typedef struct IComplex {
  83. short re,im;
  84. } IComplex;
  85. static av_cold void fft_init(int ln)
  86. {
  87. int i, n;
  88. float alpha;
  89. n = 1 << ln;
  90. for(i=0;i<(n/2);i++) {
  91. alpha = 2 * M_PI * (float)i / (float)n;
  92. costab[i] = fix15(cos(alpha));
  93. sintab[i] = fix15(sin(alpha));
  94. }
  95. }
  96. /* butter fly op */
  97. #define BF(pre, pim, qre, qim, pre1, pim1, qre1, qim1) \
  98. {\
  99. int ax, ay, bx, by;\
  100. bx=pre1;\
  101. by=pim1;\
  102. ax=qre1;\
  103. ay=qim1;\
  104. pre = (bx + ax) >> 1;\
  105. pim = (by + ay) >> 1;\
  106. qre = (bx - ax) >> 1;\
  107. qim = (by - ay) >> 1;\
  108. }
  109. #define CMUL(pre, pim, are, aim, bre, bim) \
  110. {\
  111. pre = (MUL16(are, bre) - MUL16(aim, bim)) >> 15;\
  112. pim = (MUL16(are, bim) + MUL16(bre, aim)) >> 15;\
  113. }
  114. /* do a 2^n point complex fft on 2^ln points. */
  115. static void fft(IComplex *z, int ln)
  116. {
  117. int j, l, np, np2;
  118. int nblocks, nloops;
  119. register IComplex *p,*q;
  120. int tmp_re, tmp_im;
  121. np = 1 << ln;
  122. /* reverse */
  123. for(j=0;j<np;j++) {
  124. int k = av_reverse[j] >> (8 - ln);
  125. if (k < j)
  126. FFSWAP(IComplex, z[k], z[j]);
  127. }
  128. /* pass 0 */
  129. p=&z[0];
  130. j=(np >> 1);
  131. do {
  132. BF(p[0].re, p[0].im, p[1].re, p[1].im,
  133. p[0].re, p[0].im, p[1].re, p[1].im);
  134. p+=2;
  135. } while (--j != 0);
  136. /* pass 1 */
  137. p=&z[0];
  138. j=np >> 2;
  139. do {
  140. BF(p[0].re, p[0].im, p[2].re, p[2].im,
  141. p[0].re, p[0].im, p[2].re, p[2].im);
  142. BF(p[1].re, p[1].im, p[3].re, p[3].im,
  143. p[1].re, p[1].im, p[3].im, -p[3].re);
  144. p+=4;
  145. } while (--j != 0);
  146. /* pass 2 .. ln-1 */
  147. nblocks = np >> 3;
  148. nloops = 1 << 2;
  149. np2 = np >> 1;
  150. do {
  151. p = z;
  152. q = z + nloops;
  153. for (j = 0; j < nblocks; ++j) {
  154. BF(p->re, p->im, q->re, q->im,
  155. p->re, p->im, q->re, q->im);
  156. p++;
  157. q++;
  158. for(l = nblocks; l < np2; l += nblocks) {
  159. CMUL(tmp_re, tmp_im, costab[l], -sintab[l], q->re, q->im);
  160. BF(p->re, p->im, q->re, q->im,
  161. p->re, p->im, tmp_re, tmp_im);
  162. p++;
  163. q++;
  164. }
  165. p += nloops;
  166. q += nloops;
  167. }
  168. nblocks = nblocks >> 1;
  169. nloops = nloops << 1;
  170. } while (nblocks != 0);
  171. }
  172. /* do a 512 point mdct */
  173. static void mdct512(int32_t *out, int16_t *in)
  174. {
  175. int i, re, im, re1, im1;
  176. int16_t rot[N];
  177. IComplex x[N/4];
  178. /* shift to simplify computations */
  179. for(i=0;i<N/4;i++)
  180. rot[i] = -in[i + 3*N/4];
  181. for(i=N/4;i<N;i++)
  182. rot[i] = in[i - N/4];
  183. /* pre rotation */
  184. for(i=0;i<N/4;i++) {
  185. re = ((int)rot[2*i] - (int)rot[N-1-2*i]) >> 1;
  186. im = -((int)rot[N/2+2*i] - (int)rot[N/2-1-2*i]) >> 1;
  187. CMUL(x[i].re, x[i].im, re, im, -xcos1[i], xsin1[i]);
  188. }
  189. fft(x, MDCT_NBITS - 2);
  190. /* post rotation */
  191. for(i=0;i<N/4;i++) {
  192. re = x[i].re;
  193. im = x[i].im;
  194. CMUL(re1, im1, re, im, xsin1[i], xcos1[i]);
  195. out[2*i] = im1;
  196. out[N/2-1-2*i] = re1;
  197. }
  198. }
  199. /* XXX: use another norm ? */
  200. static int calc_exp_diff(uint8_t *exp1, uint8_t *exp2, int n)
  201. {
  202. int sum, i;
  203. sum = 0;
  204. for(i=0;i<n;i++) {
  205. sum += abs(exp1[i] - exp2[i]);
  206. }
  207. return sum;
  208. }
  209. static void compute_exp_strategy(uint8_t exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS],
  210. uint8_t exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  211. int ch, int is_lfe)
  212. {
  213. int i, j;
  214. int exp_diff;
  215. /* estimate if the exponent variation & decide if they should be
  216. reused in the next frame */
  217. exp_strategy[0][ch] = EXP_NEW;
  218. for(i=1;i<NB_BLOCKS;i++) {
  219. exp_diff = calc_exp_diff(exp[i][ch], exp[i-1][ch], N/2);
  220. dprintf(NULL, "exp_diff=%d\n", exp_diff);
  221. if (exp_diff > EXP_DIFF_THRESHOLD)
  222. exp_strategy[i][ch] = EXP_NEW;
  223. else
  224. exp_strategy[i][ch] = EXP_REUSE;
  225. }
  226. if (is_lfe)
  227. return;
  228. /* now select the encoding strategy type : if exponents are often
  229. recoded, we use a coarse encoding */
  230. i = 0;
  231. while (i < NB_BLOCKS) {
  232. j = i + 1;
  233. while (j < NB_BLOCKS && exp_strategy[j][ch] == EXP_REUSE)
  234. j++;
  235. switch(j - i) {
  236. case 1:
  237. exp_strategy[i][ch] = EXP_D45;
  238. break;
  239. case 2:
  240. case 3:
  241. exp_strategy[i][ch] = EXP_D25;
  242. break;
  243. default:
  244. exp_strategy[i][ch] = EXP_D15;
  245. break;
  246. }
  247. i = j;
  248. }
  249. }
  250. /* set exp[i] to min(exp[i], exp1[i]) */
  251. static void exponent_min(uint8_t exp[N/2], uint8_t exp1[N/2], int n)
  252. {
  253. int i;
  254. for(i=0;i<n;i++) {
  255. if (exp1[i] < exp[i])
  256. exp[i] = exp1[i];
  257. }
  258. }
  259. /* update the exponents so that they are the ones the decoder will
  260. decode. Return the number of bits used to code the exponents */
  261. static int encode_exp(uint8_t encoded_exp[N/2],
  262. uint8_t exp[N/2],
  263. int nb_exps,
  264. int exp_strategy)
  265. {
  266. int group_size, nb_groups, i, j, k, exp_min;
  267. uint8_t exp1[N/2];
  268. switch(exp_strategy) {
  269. case EXP_D15:
  270. group_size = 1;
  271. break;
  272. case EXP_D25:
  273. group_size = 2;
  274. break;
  275. default:
  276. case EXP_D45:
  277. group_size = 4;
  278. break;
  279. }
  280. nb_groups = ((nb_exps + (group_size * 3) - 4) / (3 * group_size)) * 3;
  281. /* for each group, compute the minimum exponent */
  282. exp1[0] = exp[0]; /* DC exponent is handled separately */
  283. k = 1;
  284. for(i=1;i<=nb_groups;i++) {
  285. exp_min = exp[k];
  286. assert(exp_min >= 0 && exp_min <= 24);
  287. for(j=1;j<group_size;j++) {
  288. if (exp[k+j] < exp_min)
  289. exp_min = exp[k+j];
  290. }
  291. exp1[i] = exp_min;
  292. k += group_size;
  293. }
  294. /* constraint for DC exponent */
  295. if (exp1[0] > 15)
  296. exp1[0] = 15;
  297. /* Decrease the delta between each groups to within 2
  298. * so that they can be differentially encoded */
  299. for (i=1;i<=nb_groups;i++)
  300. exp1[i] = FFMIN(exp1[i], exp1[i-1] + 2);
  301. for (i=nb_groups-1;i>=0;i--)
  302. exp1[i] = FFMIN(exp1[i], exp1[i+1] + 2);
  303. /* now we have the exponent values the decoder will see */
  304. encoded_exp[0] = exp1[0];
  305. k = 1;
  306. for(i=1;i<=nb_groups;i++) {
  307. for(j=0;j<group_size;j++) {
  308. encoded_exp[k+j] = exp1[i];
  309. }
  310. k += group_size;
  311. }
  312. #if defined(DEBUG)
  313. av_log(NULL, AV_LOG_DEBUG, "exponents: strategy=%d\n", exp_strategy);
  314. for(i=0;i<=nb_groups * group_size;i++) {
  315. av_log(NULL, AV_LOG_DEBUG, "%d ", encoded_exp[i]);
  316. }
  317. av_log(NULL, AV_LOG_DEBUG, "\n");
  318. #endif
  319. return 4 + (nb_groups / 3) * 7;
  320. }
  321. /* return the size in bits taken by the mantissa */
  322. static int compute_mantissa_size(AC3EncodeContext *s, uint8_t *m, int nb_coefs)
  323. {
  324. int bits, mant, i;
  325. bits = 0;
  326. for(i=0;i<nb_coefs;i++) {
  327. mant = m[i];
  328. switch(mant) {
  329. case 0:
  330. /* nothing */
  331. break;
  332. case 1:
  333. /* 3 mantissa in 5 bits */
  334. if (s->mant1_cnt == 0)
  335. bits += 5;
  336. if (++s->mant1_cnt == 3)
  337. s->mant1_cnt = 0;
  338. break;
  339. case 2:
  340. /* 3 mantissa in 7 bits */
  341. if (s->mant2_cnt == 0)
  342. bits += 7;
  343. if (++s->mant2_cnt == 3)
  344. s->mant2_cnt = 0;
  345. break;
  346. case 3:
  347. bits += 3;
  348. break;
  349. case 4:
  350. /* 2 mantissa in 7 bits */
  351. if (s->mant4_cnt == 0)
  352. bits += 7;
  353. if (++s->mant4_cnt == 2)
  354. s->mant4_cnt = 0;
  355. break;
  356. case 14:
  357. bits += 14;
  358. break;
  359. case 15:
  360. bits += 16;
  361. break;
  362. default:
  363. bits += mant - 1;
  364. break;
  365. }
  366. }
  367. return bits;
  368. }
  369. static void bit_alloc_masking(AC3EncodeContext *s,
  370. uint8_t encoded_exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  371. uint8_t exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS],
  372. int16_t psd[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  373. int16_t mask[NB_BLOCKS][AC3_MAX_CHANNELS][50])
  374. {
  375. int blk, ch;
  376. int16_t band_psd[NB_BLOCKS][AC3_MAX_CHANNELS][50];
  377. for(blk=0; blk<NB_BLOCKS; blk++) {
  378. for(ch=0;ch<s->nb_all_channels;ch++) {
  379. if(exp_strategy[blk][ch] == EXP_REUSE) {
  380. memcpy(psd[blk][ch], psd[blk-1][ch], (N/2)*sizeof(int16_t));
  381. memcpy(mask[blk][ch], mask[blk-1][ch], 50*sizeof(int16_t));
  382. } else {
  383. ff_ac3_bit_alloc_calc_psd(encoded_exp[blk][ch], 0,
  384. s->nb_coefs[ch],
  385. psd[blk][ch], band_psd[blk][ch]);
  386. ff_ac3_bit_alloc_calc_mask(&s->bit_alloc, band_psd[blk][ch],
  387. 0, s->nb_coefs[ch],
  388. ff_ac3_fast_gain_tab[s->fast_gain_code[ch]],
  389. ch == s->lfe_channel,
  390. DBA_NONE, 0, NULL, NULL, NULL,
  391. mask[blk][ch]);
  392. }
  393. }
  394. }
  395. }
  396. static int bit_alloc(AC3EncodeContext *s,
  397. int16_t mask[NB_BLOCKS][AC3_MAX_CHANNELS][50],
  398. int16_t psd[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  399. uint8_t bap[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  400. int frame_bits, int coarse_snr_offset, int fine_snr_offset)
  401. {
  402. int i, ch;
  403. int snr_offset;
  404. snr_offset = (((coarse_snr_offset - 15) << 4) + fine_snr_offset) << 2;
  405. /* compute size */
  406. for(i=0;i<NB_BLOCKS;i++) {
  407. s->mant1_cnt = 0;
  408. s->mant2_cnt = 0;
  409. s->mant4_cnt = 0;
  410. for(ch=0;ch<s->nb_all_channels;ch++) {
  411. ff_ac3_bit_alloc_calc_bap(mask[i][ch], psd[i][ch], 0,
  412. s->nb_coefs[ch], snr_offset,
  413. s->bit_alloc.floor, ff_ac3_bap_tab,
  414. bap[i][ch]);
  415. frame_bits += compute_mantissa_size(s, bap[i][ch],
  416. s->nb_coefs[ch]);
  417. }
  418. }
  419. #if 0
  420. printf("csnr=%d fsnr=%d frame_bits=%d diff=%d\n",
  421. coarse_snr_offset, fine_snr_offset, frame_bits,
  422. 16 * s->frame_size - ((frame_bits + 7) & ~7));
  423. #endif
  424. return 16 * s->frame_size - frame_bits;
  425. }
  426. #define SNR_INC1 4
  427. static int compute_bit_allocation(AC3EncodeContext *s,
  428. uint8_t bap[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  429. uint8_t encoded_exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2],
  430. uint8_t exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS],
  431. int frame_bits)
  432. {
  433. int i, ch;
  434. int coarse_snr_offset, fine_snr_offset;
  435. uint8_t bap1[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  436. int16_t psd[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  437. int16_t mask[NB_BLOCKS][AC3_MAX_CHANNELS][50];
  438. static const int frame_bits_inc[8] = { 0, 0, 2, 2, 2, 4, 2, 4 };
  439. /* init default parameters */
  440. s->slow_decay_code = 2;
  441. s->fast_decay_code = 1;
  442. s->slow_gain_code = 1;
  443. s->db_per_bit_code = 2;
  444. s->floor_code = 4;
  445. for(ch=0;ch<s->nb_all_channels;ch++)
  446. s->fast_gain_code[ch] = 4;
  447. /* compute real values */
  448. s->bit_alloc.sr_code = s->sr_code;
  449. s->bit_alloc.sr_shift = s->sr_shift;
  450. s->bit_alloc.slow_decay = ff_ac3_slow_decay_tab[s->slow_decay_code] >> s->sr_shift;
  451. s->bit_alloc.fast_decay = ff_ac3_fast_decay_tab[s->fast_decay_code] >> s->sr_shift;
  452. s->bit_alloc.slow_gain = ff_ac3_slow_gain_tab[s->slow_gain_code];
  453. s->bit_alloc.db_per_bit = ff_ac3_db_per_bit_tab[s->db_per_bit_code];
  454. s->bit_alloc.floor = ff_ac3_floor_tab[s->floor_code];
  455. /* header size */
  456. frame_bits += 65;
  457. // if (s->channel_mode == 2)
  458. // frame_bits += 2;
  459. frame_bits += frame_bits_inc[s->channel_mode];
  460. /* audio blocks */
  461. for(i=0;i<NB_BLOCKS;i++) {
  462. frame_bits += s->nb_channels * 2 + 2; /* blksw * c, dithflag * c, dynrnge, cplstre */
  463. if (s->channel_mode == AC3_CHMODE_STEREO) {
  464. frame_bits++; /* rematstr */
  465. if(i==0) frame_bits += 4;
  466. }
  467. frame_bits += 2 * s->nb_channels; /* chexpstr[2] * c */
  468. if (s->lfe)
  469. frame_bits++; /* lfeexpstr */
  470. for(ch=0;ch<s->nb_channels;ch++) {
  471. if (exp_strategy[i][ch] != EXP_REUSE)
  472. frame_bits += 6 + 2; /* chbwcod[6], gainrng[2] */
  473. }
  474. frame_bits++; /* baie */
  475. frame_bits++; /* snr */
  476. frame_bits += 2; /* delta / skip */
  477. }
  478. frame_bits++; /* cplinu for block 0 */
  479. /* bit alloc info */
  480. /* sdcycod[2], fdcycod[2], sgaincod[2], dbpbcod[2], floorcod[3] */
  481. /* csnroffset[6] */
  482. /* (fsnoffset[4] + fgaincod[4]) * c */
  483. frame_bits += 2*4 + 3 + 6 + s->nb_all_channels * (4 + 3);
  484. /* auxdatae, crcrsv */
  485. frame_bits += 2;
  486. /* CRC */
  487. frame_bits += 16;
  488. /* calculate psd and masking curve before doing bit allocation */
  489. bit_alloc_masking(s, encoded_exp, exp_strategy, psd, mask);
  490. /* now the big work begins : do the bit allocation. Modify the snr
  491. offset until we can pack everything in the requested frame size */
  492. coarse_snr_offset = s->coarse_snr_offset;
  493. while (coarse_snr_offset >= 0 &&
  494. bit_alloc(s, mask, psd, bap, frame_bits, coarse_snr_offset, 0) < 0)
  495. coarse_snr_offset -= SNR_INC1;
  496. if (coarse_snr_offset < 0) {
  497. av_log(NULL, AV_LOG_ERROR, "Bit allocation failed. Try increasing the bitrate.\n");
  498. return -1;
  499. }
  500. while ((coarse_snr_offset + SNR_INC1) <= 63 &&
  501. bit_alloc(s, mask, psd, bap1, frame_bits,
  502. coarse_snr_offset + SNR_INC1, 0) >= 0) {
  503. coarse_snr_offset += SNR_INC1;
  504. memcpy(bap, bap1, sizeof(bap1));
  505. }
  506. while ((coarse_snr_offset + 1) <= 63 &&
  507. bit_alloc(s, mask, psd, bap1, frame_bits, coarse_snr_offset + 1, 0) >= 0) {
  508. coarse_snr_offset++;
  509. memcpy(bap, bap1, sizeof(bap1));
  510. }
  511. fine_snr_offset = 0;
  512. while ((fine_snr_offset + SNR_INC1) <= 15 &&
  513. bit_alloc(s, mask, psd, bap1, frame_bits,
  514. coarse_snr_offset, fine_snr_offset + SNR_INC1) >= 0) {
  515. fine_snr_offset += SNR_INC1;
  516. memcpy(bap, bap1, sizeof(bap1));
  517. }
  518. while ((fine_snr_offset + 1) <= 15 &&
  519. bit_alloc(s, mask, psd, bap1, frame_bits,
  520. coarse_snr_offset, fine_snr_offset + 1) >= 0) {
  521. fine_snr_offset++;
  522. memcpy(bap, bap1, sizeof(bap1));
  523. }
  524. s->coarse_snr_offset = coarse_snr_offset;
  525. for(ch=0;ch<s->nb_all_channels;ch++)
  526. s->fine_snr_offset[ch] = fine_snr_offset;
  527. #if defined(DEBUG_BITALLOC)
  528. {
  529. int j;
  530. for(i=0;i<6;i++) {
  531. for(ch=0;ch<s->nb_all_channels;ch++) {
  532. printf("Block #%d Ch%d:\n", i, ch);
  533. printf("bap=");
  534. for(j=0;j<s->nb_coefs[ch];j++) {
  535. printf("%d ",bap[i][ch][j]);
  536. }
  537. printf("\n");
  538. }
  539. }
  540. }
  541. #endif
  542. return 0;
  543. }
  544. static av_cold int set_channel_info(AC3EncodeContext *s, int channels,
  545. int64_t *channel_layout)
  546. {
  547. int ch_layout;
  548. if (channels < 1 || channels > AC3_MAX_CHANNELS)
  549. return -1;
  550. if ((uint64_t)*channel_layout > 0x7FF)
  551. return -1;
  552. ch_layout = *channel_layout;
  553. if (!ch_layout)
  554. ch_layout = avcodec_guess_channel_layout(channels, CODEC_ID_AC3, NULL);
  555. if (avcodec_channel_layout_num_channels(ch_layout) != channels)
  556. return -1;
  557. s->lfe = !!(ch_layout & CH_LOW_FREQUENCY);
  558. s->nb_all_channels = channels;
  559. s->nb_channels = channels - s->lfe;
  560. s->lfe_channel = s->lfe ? s->nb_channels : -1;
  561. if (s->lfe)
  562. ch_layout -= CH_LOW_FREQUENCY;
  563. switch (ch_layout) {
  564. case CH_LAYOUT_MONO: s->channel_mode = AC3_CHMODE_MONO; break;
  565. case CH_LAYOUT_STEREO: s->channel_mode = AC3_CHMODE_STEREO; break;
  566. case CH_LAYOUT_SURROUND: s->channel_mode = AC3_CHMODE_3F; break;
  567. case CH_LAYOUT_2_1: s->channel_mode = AC3_CHMODE_2F1R; break;
  568. case CH_LAYOUT_4POINT0: s->channel_mode = AC3_CHMODE_3F1R; break;
  569. case CH_LAYOUT_QUAD:
  570. case CH_LAYOUT_2_2: s->channel_mode = AC3_CHMODE_2F2R; break;
  571. case CH_LAYOUT_5POINT0:
  572. case CH_LAYOUT_5POINT0_BACK: s->channel_mode = AC3_CHMODE_3F2R; break;
  573. default:
  574. return -1;
  575. }
  576. s->channel_map = ff_ac3_enc_channel_map[s->channel_mode][s->lfe];
  577. *channel_layout = ch_layout;
  578. if (s->lfe)
  579. *channel_layout |= CH_LOW_FREQUENCY;
  580. return 0;
  581. }
  582. static av_cold int AC3_encode_init(AVCodecContext *avctx)
  583. {
  584. int freq = avctx->sample_rate;
  585. int bitrate = avctx->bit_rate;
  586. AC3EncodeContext *s = avctx->priv_data;
  587. int i, j, ch;
  588. float alpha;
  589. int bw_code;
  590. avctx->frame_size = AC3_FRAME_SIZE;
  591. ac3_common_init();
  592. if (!avctx->channel_layout) {
  593. av_log(avctx, AV_LOG_WARNING, "No channel layout specified. The "
  594. "encoder will guess the layout, but it "
  595. "might be incorrect.\n");
  596. }
  597. if (set_channel_info(s, avctx->channels, &avctx->channel_layout)) {
  598. av_log(avctx, AV_LOG_ERROR, "invalid channel layout\n");
  599. return -1;
  600. }
  601. /* frequency */
  602. for(i=0;i<3;i++) {
  603. for(j=0;j<3;j++)
  604. if ((ff_ac3_sample_rate_tab[j] >> i) == freq)
  605. goto found;
  606. }
  607. return -1;
  608. found:
  609. s->sample_rate = freq;
  610. s->sr_shift = i;
  611. s->sr_code = j;
  612. s->bitstream_id = 8 + s->sr_shift;
  613. s->bitstream_mode = 0; /* complete main audio service */
  614. /* bitrate & frame size */
  615. for(i=0;i<19;i++) {
  616. if ((ff_ac3_bitrate_tab[i] >> s->sr_shift)*1000 == bitrate)
  617. break;
  618. }
  619. if (i == 19)
  620. return -1;
  621. s->bit_rate = bitrate;
  622. s->frame_size_code = i << 1;
  623. s->frame_size_min = ff_ac3_frame_size_tab[s->frame_size_code][s->sr_code];
  624. s->bits_written = 0;
  625. s->samples_written = 0;
  626. s->frame_size = s->frame_size_min;
  627. /* bit allocation init */
  628. if(avctx->cutoff) {
  629. /* calculate bandwidth based on user-specified cutoff frequency */
  630. int cutoff = av_clip(avctx->cutoff, 1, s->sample_rate >> 1);
  631. int fbw_coeffs = cutoff * 512 / s->sample_rate;
  632. bw_code = av_clip((fbw_coeffs - 73) / 3, 0, 60);
  633. } else {
  634. /* use default bandwidth setting */
  635. /* XXX: should compute the bandwidth according to the frame
  636. size, so that we avoid annoying high frequency artifacts */
  637. bw_code = 50;
  638. }
  639. for(ch=0;ch<s->nb_channels;ch++) {
  640. /* bandwidth for each channel */
  641. s->chbwcod[ch] = bw_code;
  642. s->nb_coefs[ch] = bw_code * 3 + 73;
  643. }
  644. if (s->lfe) {
  645. s->nb_coefs[s->lfe_channel] = 7; /* fixed */
  646. }
  647. /* initial snr offset */
  648. s->coarse_snr_offset = 40;
  649. /* mdct init */
  650. fft_init(MDCT_NBITS - 2);
  651. for(i=0;i<N/4;i++) {
  652. alpha = 2 * M_PI * (i + 1.0 / 8.0) / (float)N;
  653. xcos1[i] = fix15(-cos(alpha));
  654. xsin1[i] = fix15(-sin(alpha));
  655. }
  656. avctx->coded_frame= avcodec_alloc_frame();
  657. avctx->coded_frame->key_frame= 1;
  658. return 0;
  659. }
  660. /* output the AC-3 frame header */
  661. static void output_frame_header(AC3EncodeContext *s, unsigned char *frame)
  662. {
  663. init_put_bits(&s->pb, frame, AC3_MAX_CODED_FRAME_SIZE);
  664. put_bits(&s->pb, 16, 0x0b77); /* frame header */
  665. put_bits(&s->pb, 16, 0); /* crc1: will be filled later */
  666. put_bits(&s->pb, 2, s->sr_code);
  667. put_bits(&s->pb, 6, s->frame_size_code + (s->frame_size - s->frame_size_min));
  668. put_bits(&s->pb, 5, s->bitstream_id);
  669. put_bits(&s->pb, 3, s->bitstream_mode);
  670. put_bits(&s->pb, 3, s->channel_mode);
  671. if ((s->channel_mode & 0x01) && s->channel_mode != AC3_CHMODE_MONO)
  672. put_bits(&s->pb, 2, 1); /* XXX -4.5 dB */
  673. if (s->channel_mode & 0x04)
  674. put_bits(&s->pb, 2, 1); /* XXX -6 dB */
  675. if (s->channel_mode == AC3_CHMODE_STEREO)
  676. put_bits(&s->pb, 2, 0); /* surround not indicated */
  677. put_bits(&s->pb, 1, s->lfe); /* LFE */
  678. put_bits(&s->pb, 5, 31); /* dialog norm: -31 db */
  679. put_bits(&s->pb, 1, 0); /* no compression control word */
  680. put_bits(&s->pb, 1, 0); /* no lang code */
  681. put_bits(&s->pb, 1, 0); /* no audio production info */
  682. put_bits(&s->pb, 1, 0); /* no copyright */
  683. put_bits(&s->pb, 1, 1); /* original bitstream */
  684. put_bits(&s->pb, 1, 0); /* no time code 1 */
  685. put_bits(&s->pb, 1, 0); /* no time code 2 */
  686. put_bits(&s->pb, 1, 0); /* no additional bit stream info */
  687. }
  688. /* symetric quantization on 'levels' levels */
  689. static inline int sym_quant(int c, int e, int levels)
  690. {
  691. int v;
  692. if (c >= 0) {
  693. v = (levels * (c << e)) >> 24;
  694. v = (v + 1) >> 1;
  695. v = (levels >> 1) + v;
  696. } else {
  697. v = (levels * ((-c) << e)) >> 24;
  698. v = (v + 1) >> 1;
  699. v = (levels >> 1) - v;
  700. }
  701. assert (v >= 0 && v < levels);
  702. return v;
  703. }
  704. /* asymetric quantization on 2^qbits levels */
  705. static inline int asym_quant(int c, int e, int qbits)
  706. {
  707. int lshift, m, v;
  708. lshift = e + qbits - 24;
  709. if (lshift >= 0)
  710. v = c << lshift;
  711. else
  712. v = c >> (-lshift);
  713. /* rounding */
  714. v = (v + 1) >> 1;
  715. m = (1 << (qbits-1));
  716. if (v >= m)
  717. v = m - 1;
  718. assert(v >= -m);
  719. return v & ((1 << qbits)-1);
  720. }
  721. /* Output one audio block. There are NB_BLOCKS audio blocks in one AC-3
  722. frame */
  723. static void output_audio_block(AC3EncodeContext *s,
  724. uint8_t exp_strategy[AC3_MAX_CHANNELS],
  725. uint8_t encoded_exp[AC3_MAX_CHANNELS][N/2],
  726. uint8_t bap[AC3_MAX_CHANNELS][N/2],
  727. int32_t mdct_coefs[AC3_MAX_CHANNELS][N/2],
  728. int8_t global_exp[AC3_MAX_CHANNELS],
  729. int block_num)
  730. {
  731. int ch, nb_groups, group_size, i, baie, rbnd;
  732. uint8_t *p;
  733. uint16_t qmant[AC3_MAX_CHANNELS][N/2];
  734. int exp0, exp1;
  735. int mant1_cnt, mant2_cnt, mant4_cnt;
  736. uint16_t *qmant1_ptr, *qmant2_ptr, *qmant4_ptr;
  737. int delta0, delta1, delta2;
  738. for(ch=0;ch<s->nb_channels;ch++)
  739. put_bits(&s->pb, 1, 0); /* 512 point MDCT */
  740. for(ch=0;ch<s->nb_channels;ch++)
  741. put_bits(&s->pb, 1, 1); /* no dither */
  742. put_bits(&s->pb, 1, 0); /* no dynamic range */
  743. if (block_num == 0) {
  744. /* for block 0, even if no coupling, we must say it. This is a
  745. waste of bit :-) */
  746. put_bits(&s->pb, 1, 1); /* coupling strategy present */
  747. put_bits(&s->pb, 1, 0); /* no coupling strategy */
  748. } else {
  749. put_bits(&s->pb, 1, 0); /* no new coupling strategy */
  750. }
  751. if (s->channel_mode == AC3_CHMODE_STEREO)
  752. {
  753. if(block_num==0)
  754. {
  755. /* first block must define rematrixing (rematstr) */
  756. put_bits(&s->pb, 1, 1);
  757. /* dummy rematrixing rematflg(1:4)=0 */
  758. for (rbnd=0;rbnd<4;rbnd++)
  759. put_bits(&s->pb, 1, 0);
  760. }
  761. else
  762. {
  763. /* no matrixing (but should be used in the future) */
  764. put_bits(&s->pb, 1, 0);
  765. }
  766. }
  767. #if defined(DEBUG)
  768. {
  769. static int count = 0;
  770. av_log(NULL, AV_LOG_DEBUG, "Block #%d (%d)\n", block_num, count++);
  771. }
  772. #endif
  773. /* exponent strategy */
  774. for(ch=0;ch<s->nb_channels;ch++) {
  775. put_bits(&s->pb, 2, exp_strategy[ch]);
  776. }
  777. if (s->lfe) {
  778. put_bits(&s->pb, 1, exp_strategy[s->lfe_channel]);
  779. }
  780. for(ch=0;ch<s->nb_channels;ch++) {
  781. if (exp_strategy[ch] != EXP_REUSE)
  782. put_bits(&s->pb, 6, s->chbwcod[ch]);
  783. }
  784. /* exponents */
  785. for (ch = 0; ch < s->nb_all_channels; ch++) {
  786. switch(exp_strategy[ch]) {
  787. case EXP_REUSE:
  788. continue;
  789. case EXP_D15:
  790. group_size = 1;
  791. break;
  792. case EXP_D25:
  793. group_size = 2;
  794. break;
  795. default:
  796. case EXP_D45:
  797. group_size = 4;
  798. break;
  799. }
  800. nb_groups = (s->nb_coefs[ch] + (group_size * 3) - 4) / (3 * group_size);
  801. p = encoded_exp[ch];
  802. /* first exponent */
  803. exp1 = *p++;
  804. put_bits(&s->pb, 4, exp1);
  805. /* next ones are delta encoded */
  806. for(i=0;i<nb_groups;i++) {
  807. /* merge three delta in one code */
  808. exp0 = exp1;
  809. exp1 = p[0];
  810. p += group_size;
  811. delta0 = exp1 - exp0 + 2;
  812. exp0 = exp1;
  813. exp1 = p[0];
  814. p += group_size;
  815. delta1 = exp1 - exp0 + 2;
  816. exp0 = exp1;
  817. exp1 = p[0];
  818. p += group_size;
  819. delta2 = exp1 - exp0 + 2;
  820. put_bits(&s->pb, 7, ((delta0 * 5 + delta1) * 5) + delta2);
  821. }
  822. if (ch != s->lfe_channel)
  823. put_bits(&s->pb, 2, 0); /* no gain range info */
  824. }
  825. /* bit allocation info */
  826. baie = (block_num == 0);
  827. put_bits(&s->pb, 1, baie);
  828. if (baie) {
  829. put_bits(&s->pb, 2, s->slow_decay_code);
  830. put_bits(&s->pb, 2, s->fast_decay_code);
  831. put_bits(&s->pb, 2, s->slow_gain_code);
  832. put_bits(&s->pb, 2, s->db_per_bit_code);
  833. put_bits(&s->pb, 3, s->floor_code);
  834. }
  835. /* snr offset */
  836. put_bits(&s->pb, 1, baie); /* always present with bai */
  837. if (baie) {
  838. put_bits(&s->pb, 6, s->coarse_snr_offset);
  839. for(ch=0;ch<s->nb_all_channels;ch++) {
  840. put_bits(&s->pb, 4, s->fine_snr_offset[ch]);
  841. put_bits(&s->pb, 3, s->fast_gain_code[ch]);
  842. }
  843. }
  844. put_bits(&s->pb, 1, 0); /* no delta bit allocation */
  845. put_bits(&s->pb, 1, 0); /* no data to skip */
  846. /* mantissa encoding : we use two passes to handle the grouping. A
  847. one pass method may be faster, but it would necessitate to
  848. modify the output stream. */
  849. /* first pass: quantize */
  850. mant1_cnt = mant2_cnt = mant4_cnt = 0;
  851. qmant1_ptr = qmant2_ptr = qmant4_ptr = NULL;
  852. for (ch = 0; ch < s->nb_all_channels; ch++) {
  853. int b, c, e, v;
  854. for(i=0;i<s->nb_coefs[ch];i++) {
  855. c = mdct_coefs[ch][i];
  856. e = encoded_exp[ch][i] - global_exp[ch];
  857. b = bap[ch][i];
  858. switch(b) {
  859. case 0:
  860. v = 0;
  861. break;
  862. case 1:
  863. v = sym_quant(c, e, 3);
  864. switch(mant1_cnt) {
  865. case 0:
  866. qmant1_ptr = &qmant[ch][i];
  867. v = 9 * v;
  868. mant1_cnt = 1;
  869. break;
  870. case 1:
  871. *qmant1_ptr += 3 * v;
  872. mant1_cnt = 2;
  873. v = 128;
  874. break;
  875. default:
  876. *qmant1_ptr += v;
  877. mant1_cnt = 0;
  878. v = 128;
  879. break;
  880. }
  881. break;
  882. case 2:
  883. v = sym_quant(c, e, 5);
  884. switch(mant2_cnt) {
  885. case 0:
  886. qmant2_ptr = &qmant[ch][i];
  887. v = 25 * v;
  888. mant2_cnt = 1;
  889. break;
  890. case 1:
  891. *qmant2_ptr += 5 * v;
  892. mant2_cnt = 2;
  893. v = 128;
  894. break;
  895. default:
  896. *qmant2_ptr += v;
  897. mant2_cnt = 0;
  898. v = 128;
  899. break;
  900. }
  901. break;
  902. case 3:
  903. v = sym_quant(c, e, 7);
  904. break;
  905. case 4:
  906. v = sym_quant(c, e, 11);
  907. switch(mant4_cnt) {
  908. case 0:
  909. qmant4_ptr = &qmant[ch][i];
  910. v = 11 * v;
  911. mant4_cnt = 1;
  912. break;
  913. default:
  914. *qmant4_ptr += v;
  915. mant4_cnt = 0;
  916. v = 128;
  917. break;
  918. }
  919. break;
  920. case 5:
  921. v = sym_quant(c, e, 15);
  922. break;
  923. case 14:
  924. v = asym_quant(c, e, 14);
  925. break;
  926. case 15:
  927. v = asym_quant(c, e, 16);
  928. break;
  929. default:
  930. v = asym_quant(c, e, b - 1);
  931. break;
  932. }
  933. qmant[ch][i] = v;
  934. }
  935. }
  936. /* second pass : output the values */
  937. for (ch = 0; ch < s->nb_all_channels; ch++) {
  938. int b, q;
  939. for(i=0;i<s->nb_coefs[ch];i++) {
  940. q = qmant[ch][i];
  941. b = bap[ch][i];
  942. switch(b) {
  943. case 0:
  944. break;
  945. case 1:
  946. if (q != 128)
  947. put_bits(&s->pb, 5, q);
  948. break;
  949. case 2:
  950. if (q != 128)
  951. put_bits(&s->pb, 7, q);
  952. break;
  953. case 3:
  954. put_bits(&s->pb, 3, q);
  955. break;
  956. case 4:
  957. if (q != 128)
  958. put_bits(&s->pb, 7, q);
  959. break;
  960. case 14:
  961. put_bits(&s->pb, 14, q);
  962. break;
  963. case 15:
  964. put_bits(&s->pb, 16, q);
  965. break;
  966. default:
  967. put_bits(&s->pb, b - 1, q);
  968. break;
  969. }
  970. }
  971. }
  972. }
  973. #define CRC16_POLY ((1 << 0) | (1 << 2) | (1 << 15) | (1 << 16))
  974. static unsigned int mul_poly(unsigned int a, unsigned int b, unsigned int poly)
  975. {
  976. unsigned int c;
  977. c = 0;
  978. while (a) {
  979. if (a & 1)
  980. c ^= b;
  981. a = a >> 1;
  982. b = b << 1;
  983. if (b & (1 << 16))
  984. b ^= poly;
  985. }
  986. return c;
  987. }
  988. static unsigned int pow_poly(unsigned int a, unsigned int n, unsigned int poly)
  989. {
  990. unsigned int r;
  991. r = 1;
  992. while (n) {
  993. if (n & 1)
  994. r = mul_poly(r, a, poly);
  995. a = mul_poly(a, a, poly);
  996. n >>= 1;
  997. }
  998. return r;
  999. }
  1000. /* compute log2(max(abs(tab[]))) */
  1001. static int log2_tab(int16_t *tab, int n)
  1002. {
  1003. int i, v;
  1004. v = 0;
  1005. for(i=0;i<n;i++) {
  1006. v |= abs(tab[i]);
  1007. }
  1008. return av_log2(v);
  1009. }
  1010. static void lshift_tab(int16_t *tab, int n, int lshift)
  1011. {
  1012. int i;
  1013. if (lshift > 0) {
  1014. for(i=0;i<n;i++) {
  1015. tab[i] <<= lshift;
  1016. }
  1017. } else if (lshift < 0) {
  1018. lshift = -lshift;
  1019. for(i=0;i<n;i++) {
  1020. tab[i] >>= lshift;
  1021. }
  1022. }
  1023. }
  1024. /* fill the end of the frame and compute the two crcs */
  1025. static int output_frame_end(AC3EncodeContext *s)
  1026. {
  1027. int frame_size, frame_size_58, n, crc1, crc2, crc_inv;
  1028. uint8_t *frame;
  1029. frame_size = s->frame_size; /* frame size in words */
  1030. /* align to 8 bits */
  1031. flush_put_bits(&s->pb);
  1032. /* add zero bytes to reach the frame size */
  1033. frame = s->pb.buf;
  1034. n = 2 * s->frame_size - (put_bits_ptr(&s->pb) - frame) - 2;
  1035. assert(n >= 0);
  1036. if(n>0)
  1037. memset(put_bits_ptr(&s->pb), 0, n);
  1038. /* Now we must compute both crcs : this is not so easy for crc1
  1039. because it is at the beginning of the data... */
  1040. frame_size_58 = (frame_size >> 1) + (frame_size >> 3);
  1041. crc1 = av_bswap16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
  1042. frame + 4, 2 * frame_size_58 - 4));
  1043. /* XXX: could precompute crc_inv */
  1044. crc_inv = pow_poly((CRC16_POLY >> 1), (16 * frame_size_58) - 16, CRC16_POLY);
  1045. crc1 = mul_poly(crc_inv, crc1, CRC16_POLY);
  1046. AV_WB16(frame+2,crc1);
  1047. crc2 = av_bswap16(av_crc(av_crc_get_table(AV_CRC_16_ANSI), 0,
  1048. frame + 2 * frame_size_58,
  1049. (frame_size - frame_size_58) * 2 - 2));
  1050. AV_WB16(frame+2*frame_size-2,crc2);
  1051. // printf("n=%d frame_size=%d\n", n, frame_size);
  1052. return frame_size * 2;
  1053. }
  1054. static int AC3_encode_frame(AVCodecContext *avctx,
  1055. unsigned char *frame, int buf_size, void *data)
  1056. {
  1057. AC3EncodeContext *s = avctx->priv_data;
  1058. const int16_t *samples = data;
  1059. int i, j, k, v, ch;
  1060. int16_t input_samples[N];
  1061. int32_t mdct_coef[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  1062. uint8_t exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  1063. uint8_t exp_strategy[NB_BLOCKS][AC3_MAX_CHANNELS];
  1064. uint8_t encoded_exp[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  1065. uint8_t bap[NB_BLOCKS][AC3_MAX_CHANNELS][N/2];
  1066. int8_t exp_samples[NB_BLOCKS][AC3_MAX_CHANNELS];
  1067. int frame_bits;
  1068. frame_bits = 0;
  1069. for(ch=0;ch<s->nb_all_channels;ch++) {
  1070. int ich = s->channel_map[ch];
  1071. /* fixed mdct to the six sub blocks & exponent computation */
  1072. for(i=0;i<NB_BLOCKS;i++) {
  1073. const int16_t *sptr;
  1074. int sinc;
  1075. /* compute input samples */
  1076. memcpy(input_samples, s->last_samples[ich], N/2 * sizeof(int16_t));
  1077. sinc = s->nb_all_channels;
  1078. sptr = samples + (sinc * (N/2) * i) + ich;
  1079. for(j=0;j<N/2;j++) {
  1080. v = *sptr;
  1081. input_samples[j + N/2] = v;
  1082. s->last_samples[ich][j] = v;
  1083. sptr += sinc;
  1084. }
  1085. /* apply the MDCT window */
  1086. for(j=0;j<N/2;j++) {
  1087. input_samples[j] = MUL16(input_samples[j],
  1088. ff_ac3_window[j]) >> 15;
  1089. input_samples[N-j-1] = MUL16(input_samples[N-j-1],
  1090. ff_ac3_window[j]) >> 15;
  1091. }
  1092. /* Normalize the samples to use the maximum available
  1093. precision */
  1094. v = 14 - log2_tab(input_samples, N);
  1095. if (v < 0)
  1096. v = 0;
  1097. exp_samples[i][ch] = v - 9;
  1098. lshift_tab(input_samples, N, v);
  1099. /* do the MDCT */
  1100. mdct512(mdct_coef[i][ch], input_samples);
  1101. /* compute "exponents". We take into account the
  1102. normalization there */
  1103. for(j=0;j<N/2;j++) {
  1104. int e;
  1105. v = abs(mdct_coef[i][ch][j]);
  1106. if (v == 0)
  1107. e = 24;
  1108. else {
  1109. e = 23 - av_log2(v) + exp_samples[i][ch];
  1110. if (e >= 24) {
  1111. e = 24;
  1112. mdct_coef[i][ch][j] = 0;
  1113. }
  1114. }
  1115. exp[i][ch][j] = e;
  1116. }
  1117. }
  1118. compute_exp_strategy(exp_strategy, exp, ch, ch == s->lfe_channel);
  1119. /* compute the exponents as the decoder will see them. The
  1120. EXP_REUSE case must be handled carefully : we select the
  1121. min of the exponents */
  1122. i = 0;
  1123. while (i < NB_BLOCKS) {
  1124. j = i + 1;
  1125. while (j < NB_BLOCKS && exp_strategy[j][ch] == EXP_REUSE) {
  1126. exponent_min(exp[i][ch], exp[j][ch], s->nb_coefs[ch]);
  1127. j++;
  1128. }
  1129. frame_bits += encode_exp(encoded_exp[i][ch],
  1130. exp[i][ch], s->nb_coefs[ch],
  1131. exp_strategy[i][ch]);
  1132. /* copy encoded exponents for reuse case */
  1133. for(k=i+1;k<j;k++) {
  1134. memcpy(encoded_exp[k][ch], encoded_exp[i][ch],
  1135. s->nb_coefs[ch] * sizeof(uint8_t));
  1136. }
  1137. i = j;
  1138. }
  1139. }
  1140. /* adjust for fractional frame sizes */
  1141. while(s->bits_written >= s->bit_rate && s->samples_written >= s->sample_rate) {
  1142. s->bits_written -= s->bit_rate;
  1143. s->samples_written -= s->sample_rate;
  1144. }
  1145. s->frame_size = s->frame_size_min + (s->bits_written * s->sample_rate < s->samples_written * s->bit_rate);
  1146. s->bits_written += s->frame_size * 16;
  1147. s->samples_written += AC3_FRAME_SIZE;
  1148. compute_bit_allocation(s, bap, encoded_exp, exp_strategy, frame_bits);
  1149. /* everything is known... let's output the frame */
  1150. output_frame_header(s, frame);
  1151. for(i=0;i<NB_BLOCKS;i++) {
  1152. output_audio_block(s, exp_strategy[i], encoded_exp[i],
  1153. bap[i], mdct_coef[i], exp_samples[i], i);
  1154. }
  1155. return output_frame_end(s);
  1156. }
  1157. static av_cold int AC3_encode_close(AVCodecContext *avctx)
  1158. {
  1159. av_freep(&avctx->coded_frame);
  1160. return 0;
  1161. }
  1162. #if 0
  1163. /*************************************************************************/
  1164. /* TEST */
  1165. #undef random
  1166. #define FN (N/4)
  1167. void fft_test(void)
  1168. {
  1169. IComplex in[FN], in1[FN];
  1170. int k, n, i;
  1171. float sum_re, sum_im, a;
  1172. /* FFT test */
  1173. for(i=0;i<FN;i++) {
  1174. in[i].re = random() % 65535 - 32767;
  1175. in[i].im = random() % 65535 - 32767;
  1176. in1[i] = in[i];
  1177. }
  1178. fft(in, 7);
  1179. /* do it by hand */
  1180. for(k=0;k<FN;k++) {
  1181. sum_re = 0;
  1182. sum_im = 0;
  1183. for(n=0;n<FN;n++) {
  1184. a = -2 * M_PI * (n * k) / FN;
  1185. sum_re += in1[n].re * cos(a) - in1[n].im * sin(a);
  1186. sum_im += in1[n].re * sin(a) + in1[n].im * cos(a);
  1187. }
  1188. printf("%3d: %6d,%6d %6.0f,%6.0f\n",
  1189. k, in[k].re, in[k].im, sum_re / FN, sum_im / FN);
  1190. }
  1191. }
  1192. void mdct_test(void)
  1193. {
  1194. int16_t input[N];
  1195. int32_t output[N/2];
  1196. float input1[N];
  1197. float output1[N/2];
  1198. float s, a, err, e, emax;
  1199. int i, k, n;
  1200. for(i=0;i<N;i++) {
  1201. input[i] = (random() % 65535 - 32767) * 9 / 10;
  1202. input1[i] = input[i];
  1203. }
  1204. mdct512(output, input);
  1205. /* do it by hand */
  1206. for(k=0;k<N/2;k++) {
  1207. s = 0;
  1208. for(n=0;n<N;n++) {
  1209. a = (2*M_PI*(2*n+1+N/2)*(2*k+1) / (4 * N));
  1210. s += input1[n] * cos(a);
  1211. }
  1212. output1[k] = -2 * s / N;
  1213. }
  1214. err = 0;
  1215. emax = 0;
  1216. for(i=0;i<N/2;i++) {
  1217. printf("%3d: %7d %7.0f\n", i, output[i], output1[i]);
  1218. e = output[i] - output1[i];
  1219. if (e > emax)
  1220. emax = e;
  1221. err += e * e;
  1222. }
  1223. printf("err2=%f emax=%f\n", err / (N/2), emax);
  1224. }
  1225. void test_ac3(void)
  1226. {
  1227. AC3EncodeContext ctx;
  1228. unsigned char frame[AC3_MAX_CODED_FRAME_SIZE];
  1229. short samples[AC3_FRAME_SIZE];
  1230. int ret, i;
  1231. AC3_encode_init(&ctx, 44100, 64000, 1);
  1232. fft_test();
  1233. mdct_test();
  1234. for(i=0;i<AC3_FRAME_SIZE;i++)
  1235. samples[i] = (int)(sin(2*M_PI*i*1000.0/44100) * 10000);
  1236. ret = AC3_encode_frame(&ctx, frame, samples);
  1237. printf("ret=%d\n", ret);
  1238. }
  1239. #endif
  1240. AVCodec ac3_encoder = {
  1241. "ac3",
  1242. AVMEDIA_TYPE_AUDIO,
  1243. CODEC_ID_AC3,
  1244. sizeof(AC3EncodeContext),
  1245. AC3_encode_init,
  1246. AC3_encode_frame,
  1247. AC3_encode_close,
  1248. NULL,
  1249. .sample_fmts = (const enum SampleFormat[]){SAMPLE_FMT_S16,SAMPLE_FMT_NONE},
  1250. .long_name = NULL_IF_CONFIG_SMALL("ATSC A/52A (AC-3)"),
  1251. .channel_layouts = (const int64_t[]){
  1252. CH_LAYOUT_MONO,
  1253. CH_LAYOUT_STEREO,
  1254. CH_LAYOUT_2_1,
  1255. CH_LAYOUT_SURROUND,
  1256. CH_LAYOUT_2_2,
  1257. CH_LAYOUT_QUAD,
  1258. CH_LAYOUT_4POINT0,
  1259. CH_LAYOUT_5POINT0,
  1260. CH_LAYOUT_5POINT0_BACK,
  1261. (CH_LAYOUT_MONO | CH_LOW_FREQUENCY),
  1262. (CH_LAYOUT_STEREO | CH_LOW_FREQUENCY),
  1263. (CH_LAYOUT_2_1 | CH_LOW_FREQUENCY),
  1264. (CH_LAYOUT_SURROUND | CH_LOW_FREQUENCY),
  1265. (CH_LAYOUT_2_2 | CH_LOW_FREQUENCY),
  1266. (CH_LAYOUT_QUAD | CH_LOW_FREQUENCY),
  1267. (CH_LAYOUT_4POINT0 | CH_LOW_FREQUENCY),
  1268. CH_LAYOUT_5POINT1,
  1269. CH_LAYOUT_5POINT1_BACK,
  1270. 0 },
  1271. };