sonic.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:22k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*
  2.  * Simple free lossless/lossy audio codec
  3.  * Copyright (c) 2004 Alex Beregszaszi
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it under the terms of the GNU Lesser General Public
  7.  * License as published by the Free Software Foundation; either
  8.  * version 2 of the License, or (at your option) any later version.
  9.  *
  10.  * This library is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  * Lesser General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU Lesser General Public
  16.  * License along with this library; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  */
  19. #include "avcodec.h"
  20. #include "bitstream.h"
  21. #include "golomb.h"
  22. /**
  23.  * @file sonic.c
  24.  * Simple free lossless/lossy audio codec
  25.  * Based on Paul Francis Harrison's Bonk (http://www.logarithmic.net/pfh/bonk)
  26.  * Written and designed by Alex Beregszaszi
  27.  *
  28.  * TODO:
  29.  *  - CABAC put/get_symbol
  30.  *  - independent quantizer for channels
  31.  *  - >2 channels support
  32.  *  - more decorrelation types
  33.  *  - more tap_quant tests
  34.  *  - selectable intlist writers/readers (bonk-style, golomb, cabac)
  35.  */
  36. #define MAX_CHANNELS 2
  37. #define MID_SIDE 0
  38. #define LEFT_SIDE 1
  39. #define RIGHT_SIDE 2
  40. typedef struct SonicContext {
  41.     int lossless, decorrelation;
  42.     
  43.     int num_taps, downsampling;
  44.     double quantization;
  45.     
  46.     int channels, samplerate, block_align, frame_size;
  47.     int *tap_quant;
  48.     int *int_samples;
  49.     int *coded_samples[MAX_CHANNELS];
  50.     // for encoding
  51.     int *tail;
  52.     int tail_size;
  53.     int *window;
  54.     int window_size;
  55.     // for decoding
  56.     int *predictor_k;
  57.     int *predictor_state[MAX_CHANNELS];
  58. } SonicContext;
  59. #define LATTICE_SHIFT 10
  60. #define SAMPLE_SHIFT 4
  61. #define LATTICE_FACTOR (1 << LATTICE_SHIFT)
  62. #define SAMPLE_FACTOR (1 << SAMPLE_SHIFT)
  63. #define BASE_QUANT 0.6
  64. #define RATE_VARIATION 3.0
  65. static inline int divide(int a, int b)
  66. {
  67.     if (a < 0)
  68. return -( (-a + b/2)/b );
  69.     else
  70. return (a + b/2)/b;
  71. }
  72. static inline int shift(int a,int b)
  73. {
  74.     return (a+(1<<(b-1))) >> b;
  75. }
  76. static inline int shift_down(int a,int b)
  77. {
  78.     return (a>>b)+((a<0)?1:0);
  79. }
  80. #if 1
  81. static inline int intlist_write(PutBitContext *pb, int *buf, int entries, int base_2_part)
  82. {
  83.     int i;
  84.     for (i = 0; i < entries; i++)
  85. set_se_golomb(pb, buf[i]);
  86.     return 1;
  87. }
  88. static inline int intlist_read(GetBitContext *gb, int *buf, int entries, int base_2_part)
  89. {
  90.     int i;
  91.     
  92.     for (i = 0; i < entries; i++)
  93. buf[i] = get_se_golomb(gb);
  94.     return 1;
  95. }
  96. #else
  97. #define ADAPT_LEVEL 8
  98. static int bits_to_store(uint64_t x)
  99. {
  100.     int res = 0;
  101.     
  102.     while(x)
  103.     {
  104. res++;
  105. x >>= 1;
  106.     }
  107.     return res;
  108. }
  109. static void write_uint_max(PutBitContext *pb, unsigned int value, unsigned int max)
  110. {
  111.     int i, bits;
  112.     if (!max)
  113. return;
  114.     bits = bits_to_store(max);
  115.     for (i = 0; i < bits-1; i++)
  116. put_bits(pb, 1, value & (1 << i));
  117.     if ( (value | (1 << (bits-1))) <= max)
  118. put_bits(pb, 1, value & (1 << (bits-1)));
  119. }
  120. static unsigned int read_uint_max(GetBitContext *gb, int max)
  121. {
  122.     int i, bits, value = 0;
  123.     
  124.     if (!max)
  125. return 0;
  126.     bits = bits_to_store(max);
  127.     for (i = 0; i < bits-1; i++)
  128. if (get_bits1(gb))
  129.     value += 1 << i;
  130.     if ( (value | (1<<(bits-1))) <= max)
  131. if (get_bits1(gb))
  132.     value += 1 << (bits-1);
  133.     return value;
  134. }
  135. static int intlist_write(PutBitContext *pb, int *buf, int entries, int base_2_part)
  136. {
  137.     int i, j, x = 0, low_bits = 0, max = 0;
  138.     int step = 256, pos = 0, dominant = 0, any = 0;
  139.     int *copy, *bits;
  140.     copy = av_mallocz(4* entries);
  141.     if (!copy)
  142. return -1;
  143.     
  144.     if (base_2_part)
  145.     {
  146. int energy = 0;
  147. for (i = 0; i < entries; i++)
  148.     energy += abs(buf[i]);
  149. low_bits = bits_to_store(energy / (entries * 2));
  150. if (low_bits > 15)
  151.     low_bits = 15;
  152. put_bits(pb, 4, low_bits);
  153.     }
  154.     
  155.     for (i = 0; i < entries; i++)
  156.     {
  157. put_bits(pb, low_bits, abs(buf[i]));
  158. copy[i] = abs(buf[i]) >> low_bits;
  159. if (copy[i] > max)
  160.     max = abs(copy[i]);
  161.     }
  162.     bits = av_mallocz(4* entries*max);
  163.     if (!bits)
  164.     {
  165. // av_free(copy);
  166. return -1;
  167.     }
  168.     
  169.     for (i = 0; i <= max; i++)
  170.     {
  171. for (j = 0; j < entries; j++)
  172.     if (copy[j] >= i)
  173. bits[x++] = copy[j] > i;
  174.     }
  175.     // store bitstream
  176.     while (pos < x)
  177.     {
  178. int steplet = step >> 8;
  179. if (pos + steplet > x)
  180.     steplet = x - pos;
  181. for (i = 0; i < steplet; i++)
  182.     if (bits[i+pos] != dominant)
  183. any = 1;
  184. put_bits(pb, 1, any);
  185. if (!any)
  186. {
  187.     pos += steplet;
  188.     step += step / ADAPT_LEVEL;
  189. }
  190. else
  191. {
  192.     int interloper = 0;
  193.     
  194.     while (((pos + interloper) < x) && (bits[pos + interloper] == dominant))
  195. interloper++;
  196.     // note change
  197.     write_uint_max(pb, interloper, (step >> 8) - 1);
  198.     
  199.     pos += interloper + 1;
  200.     step -= step / ADAPT_LEVEL;
  201. }
  202. if (step < 256)
  203. {
  204.     step = 65536 / step;
  205.     dominant = !dominant;
  206. }
  207.     }
  208.     
  209.     // store signs
  210.     for (i = 0; i < entries; i++)
  211. if (buf[i])
  212.     put_bits(pb, 1, buf[i] < 0);
  213. //    av_free(bits);
  214. //    av_free(copy);
  215.     return 0;
  216. }
  217. static int intlist_read(GetBitContext *gb, int *buf, int entries, int base_2_part)
  218. {
  219.     int i, low_bits = 0, x = 0;
  220.     int n_zeros = 0, step = 256, dominant = 0;
  221.     int pos = 0, level = 0;
  222.     int *bits = av_mallocz(4* entries);
  223.     if (!bits)
  224. return -1;
  225.     
  226.     if (base_2_part)
  227.     {
  228. low_bits = get_bits(gb, 4);
  229. if (low_bits)
  230.     for (i = 0; i < entries; i++)
  231. buf[i] = get_bits(gb, low_bits);
  232.     }
  233. //    av_log(NULL, AV_LOG_INFO, "entries: %d, low bits: %dn", entries, low_bits);
  234.     while (n_zeros < entries)
  235.     {
  236. int steplet = step >> 8;
  237. if (!get_bits1(gb))
  238. {
  239.     for (i = 0; i < steplet; i++)
  240. bits[x++] = dominant;
  241.     if (!dominant)
  242. n_zeros += steplet;
  243.     
  244.     step += step / ADAPT_LEVEL;
  245. }
  246. else
  247. {
  248.     int actual_run = read_uint_max(gb, steplet-1);
  249.     
  250. //     av_log(NULL, AV_LOG_INFO, "actual run: %dn", actual_run);
  251.     
  252.     for (i = 0; i < actual_run; i++)
  253. bits[x++] = dominant;
  254.     
  255.     bits[x++] = !dominant;
  256.     
  257.     if (!dominant)
  258. n_zeros += actual_run;
  259.     else
  260. n_zeros++;
  261.     step -= step / ADAPT_LEVEL;
  262. }
  263. if (step < 256)
  264. {
  265.     step = 65536 / step;
  266.     dominant = !dominant;
  267. }
  268.     }
  269.     
  270.     // reconstruct unsigned values
  271.     n_zeros = 0;
  272.     for (i = 0; n_zeros < entries; i++)
  273.     {
  274. while(1)
  275. {
  276.     if (pos >= entries)
  277.     {
  278. pos = 0;
  279. level += 1 << low_bits;
  280.     }
  281.     
  282.     if (buf[pos] >= level)
  283. break;
  284.     
  285.     pos++;
  286. }
  287. if (bits[i])
  288.     buf[pos] += 1 << low_bits;
  289. else
  290.     n_zeros++;
  291. pos++;
  292.     }
  293. //    av_free(bits);
  294.     
  295.     // read signs
  296.     for (i = 0; i < entries; i++)
  297. if (buf[i] && get_bits1(gb))
  298.     buf[i] = -buf[i];
  299. //    av_log(NULL, AV_LOG_INFO, "zeros: %d pos: %dn", n_zeros, pos);
  300.     return 0;
  301. }
  302. #endif
  303. static void predictor_init_state(int *k, int *state, int order)
  304. {
  305.     int i;
  306.     for (i = order-2; i >= 0; i--)
  307.     {
  308. int j, p, x = state[i];
  309. for (j = 0, p = i+1; p < order; j++,p++)
  310.      {
  311.     int tmp = x + shift_down(k[j] * state[p], LATTICE_SHIFT);
  312.     state[p] += shift_down(k[j]*x, LATTICE_SHIFT);
  313.     x = tmp;
  314. }
  315.     }
  316. }
  317. static int predictor_calc_error(int *k, int *state, int order, int error)
  318. {
  319.     int i, x = error - shift_down(k[order-1] * state[order-1], LATTICE_SHIFT);
  320. #if 1
  321.     int *k_ptr = &(k[order-2]),
  322. *state_ptr = &(state[order-2]);
  323.     for (i = order-2; i >= 0; i--, k_ptr--, state_ptr--)
  324.     {
  325. int k_value = *k_ptr, state_value = *state_ptr;
  326. x -= shift_down(k_value * state_value, LATTICE_SHIFT);
  327. state_ptr[1] = state_value + shift_down(k_value * x, LATTICE_SHIFT);
  328.     }
  329. #else
  330.     for (i = order-2; i >= 0; i--)
  331.     {
  332. x -= shift_down(k[i] * state[i], LATTICE_SHIFT);
  333. state[i+1] = state[i] + shift_down(k[i] * x, LATTICE_SHIFT);
  334.     }
  335. #endif
  336.     // don't drift too far, to avoid overflows 
  337.     if (x >  (SAMPLE_FACTOR<<16)) x =  (SAMPLE_FACTOR<<16);
  338.     if (x < -(SAMPLE_FACTOR<<16)) x = -(SAMPLE_FACTOR<<16);
  339.     state[0] = x;
  340.     return x;
  341. }
  342. // Heavily modified Levinson-Durbin algorithm which
  343. // copes better with quantization, and calculates the
  344. // actual whitened result as it goes.
  345. static void modified_levinson_durbin(int *window, int window_entries,
  346. int *out, int out_entries, int channels, int *tap_quant)
  347. {
  348.     int i;
  349.     int *state = av_mallocz(4* window_entries);
  350.     
  351.     memcpy(state, window, 4* window_entries);
  352.     
  353.     for (i = 0; i < out_entries; i++)
  354.     {
  355. int step = (i+1)*channels, k, j;
  356. double xx = 0.0, xy = 0.0;
  357. #if 1
  358. int *x_ptr = &(window[step]), *state_ptr = &(state[0]);
  359. j = window_entries - step;
  360. for (;j>=0;j--,x_ptr++,state_ptr++)
  361. {
  362.     double x_value = *x_ptr, state_value = *state_ptr;
  363.     xx += state_value*state_value;
  364.     xy += x_value*state_value;
  365. }
  366. #else
  367. for (j = 0; j <= (window_entries - step); j++);
  368. {
  369.     double stepval = window[step+j], stateval = window[j];
  370. //     xx += (double)window[j]*(double)window[j];
  371. //     xy += (double)window[step+j]*(double)window[j];
  372.     xx += stateval*stateval;
  373.     xy += stepval*stateval;
  374. }
  375. #endif
  376. if (xx == 0.0)
  377.     k = 0;
  378. else
  379.     k = (int)(floor(-xy/xx * (double)LATTICE_FACTOR / (double)(tap_quant[i]) + 0.5));
  380. if (k > (LATTICE_FACTOR/tap_quant[i]))
  381.     k = LATTICE_FACTOR/tap_quant[i];
  382. if (-k > (LATTICE_FACTOR/tap_quant[i]))
  383.     k = -(LATTICE_FACTOR/tap_quant[i]);
  384. out[i] = k;
  385. k *= tap_quant[i];
  386. #if 1
  387. x_ptr = &(window[step]);
  388. state_ptr = &(state[0]);
  389. j = window_entries - step;
  390. for (;j>=0;j--,x_ptr++,state_ptr++)
  391. {
  392.     int x_value = *x_ptr, state_value = *state_ptr;
  393.     *x_ptr = x_value + shift_down(k*state_value,LATTICE_SHIFT);
  394.     *state_ptr = state_value + shift_down(k*x_value, LATTICE_SHIFT);
  395. }
  396. #else
  397. for (j=0; j <= (window_entries - step); j++)
  398. {
  399.     int stepval = window[step+j], stateval=state[j];
  400.     window[step+j] += shift_down(k * stateval, LATTICE_SHIFT);
  401.     state[j] += shift_down(k * stepval, LATTICE_SHIFT);
  402. }
  403. #endif
  404.     }
  405.     
  406.     av_free(state);
  407. }
  408. static int samplerate_table[] =
  409.     { 44100, 22050, 11025, 96000, 48000, 32000, 24000, 16000, 8000 };
  410. #ifdef CONFIG_ENCODERS
  411. static inline int code_samplerate(int samplerate)
  412. {
  413.     switch (samplerate)
  414.     {
  415. case 44100: return 0;
  416. case 22050: return 1;
  417. case 11025: return 2;
  418. case 96000: return 3;
  419. case 48000: return 4;
  420. case 32000: return 5;
  421. case 24000: return 6;
  422. case 16000: return 7;
  423. case 8000: return 8;
  424.     }
  425.     return -1;
  426. }
  427. static int sonic_encode_init(AVCodecContext *avctx)
  428. {
  429.     SonicContext *s = avctx->priv_data;
  430.     PutBitContext pb;
  431.     int i, version = 0;
  432.     if (avctx->channels > MAX_CHANNELS)
  433.     {
  434. av_log(avctx, AV_LOG_ERROR, "Only mono and stereo streams are supported by nown");
  435.         return -1; /* only stereo or mono for now */
  436.     }
  437.     if (avctx->channels == 2)
  438. s->decorrelation = MID_SIDE;
  439.     if (avctx->codec->id == CODEC_ID_SONIC_LS)
  440.     {
  441. s->lossless = 1;
  442. s->num_taps = 32;
  443. s->downsampling = 1;
  444. s->quantization = 0.0;
  445.     }
  446.     else
  447.     {
  448. s->num_taps = 128;
  449. s->downsampling = 2;
  450. s->quantization = 1.0;
  451.     }
  452.     // max tap 2048
  453.     if ((s->num_taps < 32) || (s->num_taps > 1024) ||
  454. ((s->num_taps>>5)<<5 != s->num_taps))
  455.     {
  456. av_log(avctx, AV_LOG_ERROR, "Invalid number of tapsn");
  457. return -1;
  458.     }
  459.     // generate taps
  460.     s->tap_quant = av_mallocz(4* s->num_taps);
  461.     for (i = 0; i < s->num_taps; i++)
  462. s->tap_quant[i] = (int)(sqrt(i+1));
  463.     s->channels = avctx->channels;
  464.     s->samplerate = avctx->sample_rate;
  465.     s->block_align = (int)(2048.0*s->samplerate/44100)/s->downsampling;
  466.     s->frame_size = s->channels*s->block_align*s->downsampling;
  467.     s->tail = av_mallocz(4* s->num_taps*s->channels);
  468.     if (!s->tail)
  469. return -1;
  470.     s->tail_size = s->num_taps*s->channels;
  471.     s->predictor_k = av_mallocz(4 * s->num_taps);
  472.     if (!s->predictor_k)
  473. return -1;
  474.     for (i = 0; i < s->channels; i++)
  475.     {
  476. s->coded_samples[i] = av_mallocz(4* s->block_align);
  477. if (!s->coded_samples[i])
  478.     return -1;
  479.     }
  480.     
  481.     s->int_samples = av_mallocz(4* s->frame_size);
  482.     s->window_size = ((2*s->tail_size)+s->frame_size);
  483.     s->window = av_mallocz(4* s->window_size);
  484.     if (!s->window)
  485. return -1;
  486.     avctx->extradata = av_mallocz(16);
  487.     if (!avctx->extradata)
  488. return -1;
  489.     init_put_bits(&pb, avctx->extradata, 16*8);
  490.     put_bits(&pb, 2, version); // version
  491.     if (version == 1)
  492.     {
  493. put_bits(&pb, 2, s->channels);
  494. put_bits(&pb, 4, code_samplerate(s->samplerate));
  495.     }
  496.     put_bits(&pb, 1, s->lossless);
  497.     if (!s->lossless)
  498. put_bits(&pb, 3, SAMPLE_SHIFT); // XXX FIXME: sample precision
  499.     put_bits(&pb, 2, s->decorrelation);
  500.     put_bits(&pb, 2, s->downsampling);
  501.     put_bits(&pb, 5, (s->num_taps >> 5)-1); // 32..1024
  502.     put_bits(&pb, 1, 0); // XXX FIXME: no custom tap quant table
  503.     flush_put_bits(&pb);
  504.     avctx->extradata_size = put_bits_count(&pb)/8;
  505.     av_log(avctx, AV_LOG_INFO, "Sonic: ver: %d ls: %d dr: %d taps: %d block: %d frame: %d downsamp: %dn",
  506. version, s->lossless, s->decorrelation, s->num_taps, s->block_align, s->frame_size, s->downsampling);
  507.     avctx->coded_frame = avcodec_alloc_frame();
  508.     if (!avctx->coded_frame)
  509. return -ENOMEM;
  510.     avctx->coded_frame->key_frame = 1;
  511.     avctx->frame_size = s->block_align*s->downsampling;
  512.     return 0;
  513. }
  514. static int sonic_encode_close(AVCodecContext *avctx)
  515. {
  516.     SonicContext *s = avctx->priv_data;
  517.     int i;
  518.     av_freep(&avctx->coded_frame);
  519.     for (i = 0; i < s->channels; i++)
  520. av_free(s->coded_samples[i]);
  521.     av_free(s->predictor_k);
  522.     av_free(s->tail);
  523.     av_free(s->tap_quant);
  524.     av_free(s->window);
  525.     av_free(s->int_samples);
  526.     return 0;
  527. }
  528. static int sonic_encode_frame(AVCodecContext *avctx,
  529.     uint8_t *buf, int buf_size, void *data)
  530. {
  531.     SonicContext *s = avctx->priv_data;
  532.     PutBitContext pb;
  533.     int i, j, ch, quant = 0, x = 0;
  534.     short *samples = data;
  535.     init_put_bits(&pb, buf, buf_size*8);
  536.     // short -> internal
  537.     for (i = 0; i < s->frame_size; i++)
  538. s->int_samples[i] = samples[i];
  539.     if (!s->lossless)
  540. for (i = 0; i < s->frame_size; i++)
  541.     s->int_samples[i] = s->int_samples[i] << SAMPLE_SHIFT;
  542.     switch(s->decorrelation)
  543.     {
  544. case MID_SIDE:
  545.     for (i = 0; i < s->frame_size; i += s->channels)
  546.     {
  547. s->int_samples[i] += s->int_samples[i+1];
  548. s->int_samples[i+1] -= shift(s->int_samples[i], 1);
  549.     }
  550.     break;
  551. case LEFT_SIDE:
  552.     for (i = 0; i < s->frame_size; i += s->channels)
  553. s->int_samples[i+1] -= s->int_samples[i];
  554.     break;
  555. case RIGHT_SIDE:
  556.     for (i = 0; i < s->frame_size; i += s->channels)
  557. s->int_samples[i] -= s->int_samples[i+1];
  558.     break;
  559.     }
  560.     memset(s->window, 0, 4* s->window_size);
  561.     
  562.     for (i = 0; i < s->tail_size; i++)
  563. s->window[x++] = s->tail[i];
  564.     for (i = 0; i < s->frame_size; i++)
  565. s->window[x++] = s->int_samples[i];
  566.     
  567.     for (i = 0; i < s->tail_size; i++)
  568. s->window[x++] = 0;
  569.     for (i = 0; i < s->tail_size; i++)
  570. s->tail[i] = s->int_samples[s->frame_size - s->tail_size + i];
  571.     // generate taps
  572.     modified_levinson_durbin(s->window, s->window_size,
  573. s->predictor_k, s->num_taps, s->channels, s->tap_quant);
  574.     if (intlist_write(&pb, s->predictor_k, s->num_taps, 0) < 0)
  575. return -1;
  576.     for (ch = 0; ch < s->channels; ch++)
  577.     {
  578. x = s->tail_size+ch;
  579. for (i = 0; i < s->block_align; i++)
  580. {
  581.     int sum = 0;
  582.     for (j = 0; j < s->downsampling; j++, x += s->channels)
  583. sum += s->window[x];
  584.     s->coded_samples[ch][i] = sum;
  585. }
  586.     }
  587.     
  588.     // simple rate control code    
  589.     if (!s->lossless)
  590.     {
  591. double energy1 = 0.0, energy2 = 0.0;
  592. for (ch = 0; ch < s->channels; ch++)
  593. {
  594.     for (i = 0; i < s->block_align; i++)
  595.     {
  596. double sample = s->coded_samples[ch][i];
  597. energy2 += sample*sample;
  598. energy1 += fabs(sample);
  599.     }
  600. }
  601. energy2 = sqrt(energy2/(s->channels*s->block_align));
  602. energy1 = sqrt(2.0)*energy1/(s->channels*s->block_align);
  603. // increase bitrate when samples are like a gaussian distribution
  604. // reduce bitrate when samples are like a two-tailed exponential distribution
  605. if (energy2 > energy1)
  606.     energy2 += (energy2-energy1)*RATE_VARIATION;
  607. quant = (int)(BASE_QUANT*s->quantization*energy2/SAMPLE_FACTOR);
  608. // av_log(avctx, AV_LOG_DEBUG, "quant: %d energy: %f / %fn", quant, energy1, energy2);
  609. if (quant < 1)
  610.     quant = 1;
  611. if (quant > 65535)
  612.     quant = 65535;
  613. set_ue_golomb(&pb, quant);
  614. quant *= SAMPLE_FACTOR;
  615.     }
  616.     // write out coded samples
  617.     for (ch = 0; ch < s->channels; ch++)
  618.     {
  619. if (!s->lossless)
  620.     for (i = 0; i < s->block_align; i++)
  621. s->coded_samples[ch][i] = divide(s->coded_samples[ch][i], quant);
  622. if (intlist_write(&pb, s->coded_samples[ch], s->block_align, 1) < 0)
  623.     return -1;
  624.     }
  625. //    av_log(avctx, AV_LOG_DEBUG, "used bytes: %dn", (put_bits_count(&pb)+7)/8);
  626.     flush_put_bits(&pb);
  627.     return (put_bits_count(&pb)+7)/8;
  628. }
  629. #endif //CONFIG_ENCODERS
  630. static int sonic_decode_init(AVCodecContext *avctx)
  631. {
  632.     SonicContext *s = avctx->priv_data;
  633.     GetBitContext gb;
  634.     int i, version;
  635.     
  636.     s->channels = avctx->channels;
  637.     s->samplerate = avctx->sample_rate;
  638.     
  639.     if (!avctx->extradata)
  640.     {
  641. av_log(avctx, AV_LOG_ERROR, "No mandatory headers presentn");
  642. return -1;
  643.     }
  644.     
  645.     init_get_bits(&gb, avctx->extradata, avctx->extradata_size);
  646.     
  647.     version = get_bits(&gb, 2);
  648.     if (version > 1)
  649.     {
  650. av_log(avctx, AV_LOG_ERROR, "Unsupported Sonic version, please reportn");
  651. return -1;
  652.     }
  653.     if (version == 1)
  654.     {
  655. s->channels = get_bits(&gb, 2);
  656. s->samplerate = samplerate_table[get_bits(&gb, 4)];
  657. av_log(avctx, AV_LOG_INFO, "Sonicv2 chans: %d samprate: %dn",
  658.     s->channels, s->samplerate);
  659.     }
  660.     if (s->channels > MAX_CHANNELS)
  661.     {
  662. av_log(avctx, AV_LOG_ERROR, "Only mono and stereo streams are supported by nown");
  663. return -1;
  664.     }
  665.     s->lossless = get_bits1(&gb);
  666.     if (!s->lossless)
  667. skip_bits(&gb, 3); // XXX FIXME
  668.     s->decorrelation = get_bits(&gb, 2);
  669.     s->downsampling = get_bits(&gb, 2);
  670.     s->num_taps = (get_bits(&gb, 5)+1)<<5;
  671.     if (get_bits1(&gb)) // XXX FIXME
  672. av_log(avctx, AV_LOG_INFO, "Custom quant tablen");
  673.     
  674.     s->block_align = (int)(2048.0*(s->samplerate/44100))/s->downsampling;
  675.     s->frame_size = s->channels*s->block_align*s->downsampling;
  676. //    avctx->frame_size = s->block_align;
  677.     av_log(avctx, AV_LOG_INFO, "Sonic: ver: %d ls: %d dr: %d taps: %d block: %d frame: %d downsamp: %dn",
  678. version, s->lossless, s->decorrelation, s->num_taps, s->block_align, s->frame_size, s->downsampling);
  679.     // generate taps
  680.     s->tap_quant = av_mallocz(4* s->num_taps);
  681.     for (i = 0; i < s->num_taps; i++)
  682. s->tap_quant[i] = (int)(sqrt(i+1));
  683.     
  684.     s->predictor_k = av_mallocz(4* s->num_taps);
  685.     
  686.     for (i = 0; i < s->channels; i++)
  687.     {
  688. s->predictor_state[i] = av_mallocz(4* s->num_taps);
  689. if (!s->predictor_state[i])
  690.     return -1;
  691.     }
  692.     for (i = 0; i < s->channels; i++)
  693.     {
  694. s->coded_samples[i] = av_mallocz(4* s->block_align);
  695. if (!s->coded_samples[i])
  696.     return -1;
  697.     }
  698.     s->int_samples = av_mallocz(4* s->frame_size);
  699.     return 0;
  700. }
  701. static int sonic_decode_close(AVCodecContext *avctx)
  702. {
  703.     SonicContext *s = avctx->priv_data;
  704.     int i;
  705.     
  706.     av_free(s->int_samples);
  707.     av_free(s->tap_quant);
  708.     av_free(s->predictor_k);
  709.     
  710.     for (i = 0; i < s->channels; i++)
  711.     {
  712. av_free(s->predictor_state[i]);
  713. av_free(s->coded_samples[i]);
  714.     }
  715.     
  716.     return 0;
  717. }
  718. static int sonic_decode_frame(AVCodecContext *avctx,
  719.     void *data, int *data_size,
  720.     uint8_t *buf, int buf_size)
  721. {
  722.     SonicContext *s = avctx->priv_data;
  723.     GetBitContext gb;
  724.     int i, quant, ch, j;
  725.     short *samples = data;
  726.     if (buf_size == 0) return 0;
  727. //    av_log(NULL, AV_LOG_INFO, "buf_size: %dn", buf_size);
  728.     
  729.     init_get_bits(&gb, buf, buf_size*8);
  730.     
  731.     intlist_read(&gb, s->predictor_k, s->num_taps, 0);
  732.     // dequantize
  733.     for (i = 0; i < s->num_taps; i++)
  734. s->predictor_k[i] *= s->tap_quant[i];
  735.     if (s->lossless)
  736. quant = 1;
  737.     else
  738. quant = get_ue_golomb(&gb) * SAMPLE_FACTOR;
  739. //    av_log(NULL, AV_LOG_INFO, "quant: %dn", quant);
  740.     for (ch = 0; ch < s->channels; ch++)
  741.     {
  742. int x = ch;
  743. predictor_init_state(s->predictor_k, s->predictor_state[ch], s->num_taps);
  744. intlist_read(&gb, s->coded_samples[ch], s->block_align, 1);
  745. for (i = 0; i < s->block_align; i++)
  746. {
  747.     for (j = 0; j < s->downsampling - 1; j++)
  748.     {
  749. s->int_samples[x] = predictor_calc_error(s->predictor_k, s->predictor_state[ch], s->num_taps, 0);
  750. x += s->channels;
  751.     }
  752.     
  753.     s->int_samples[x] = predictor_calc_error(s->predictor_k, s->predictor_state[ch], s->num_taps, s->coded_samples[ch][i] * quant);
  754.     x += s->channels;
  755. }
  756. for (i = 0; i < s->num_taps; i++)
  757.     s->predictor_state[ch][i] = s->int_samples[s->frame_size - s->channels + ch - i*s->channels];
  758.     }
  759.     
  760.     switch(s->decorrelation)
  761.     {
  762. case MID_SIDE:
  763.     for (i = 0; i < s->frame_size; i += s->channels)
  764.     {
  765. s->int_samples[i+1] += shift(s->int_samples[i], 1);
  766. s->int_samples[i] -= s->int_samples[i+1];
  767.     }
  768.     break;
  769. case LEFT_SIDE:
  770.     for (i = 0; i < s->frame_size; i += s->channels)
  771. s->int_samples[i+1] += s->int_samples[i];
  772.     break;
  773. case RIGHT_SIDE:
  774.     for (i = 0; i < s->frame_size; i += s->channels)
  775. s->int_samples[i] += s->int_samples[i+1];
  776.     break;
  777.     }
  778.     if (!s->lossless)
  779. for (i = 0; i < s->frame_size; i++)
  780.     s->int_samples[i] = shift(s->int_samples[i], SAMPLE_SHIFT);
  781.     // internal -> short
  782.     for (i = 0; i < s->frame_size; i++)
  783.     {
  784. if (s->int_samples[i] > 32767)
  785.     samples[i] = 32767;
  786. else if (s->int_samples[i] < -32768)
  787.     samples[i] = -32768;
  788. else
  789.     samples[i] = s->int_samples[i];
  790.     }
  791.     align_get_bits(&gb);
  792.     *data_size = s->frame_size * 2;
  793.     return (get_bits_count(&gb)+7)/8;
  794. }
  795. #ifdef CONFIG_ENCODERS
  796. AVCodec sonic_encoder = {
  797.     "sonic",
  798.     CODEC_TYPE_AUDIO,
  799.     CODEC_ID_SONIC,
  800.     sizeof(SonicContext),
  801.     sonic_encode_init,
  802.     sonic_encode_frame,
  803.     sonic_encode_close,
  804.     NULL,
  805. };
  806. AVCodec sonic_ls_encoder = {
  807.     "sonicls",
  808.     CODEC_TYPE_AUDIO,
  809.     CODEC_ID_SONIC_LS,
  810.     sizeof(SonicContext),
  811.     sonic_encode_init,
  812.     sonic_encode_frame,
  813.     sonic_encode_close,
  814.     NULL,
  815. };
  816. #endif
  817. #ifdef CONFIG_DECODERS
  818. AVCodec sonic_decoder = {
  819.     "sonic",
  820.     CODEC_TYPE_AUDIO,
  821.     CODEC_ID_SONIC,
  822.     sizeof(SonicContext),
  823.     sonic_decode_init,
  824.     NULL,
  825.     sonic_decode_close,
  826.     sonic_decode_frame,
  827. };
  828. #endif