libavcodec/mpc8.c
Go to the documentation of this file.
1 /*
2  * Musepack SV8 decoder
3  * Copyright (c) 2007 Konstantin Shishkov
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 /**
23  * @file
24  * MPEG Audio Layer 1/2 -like codec with frames of 1152 samples
25  * divided into 32 subbands.
26  */
27 
29 #include "libavutil/lfg.h"
30 #include "avcodec.h"
31 #include "get_bits.h"
32 #include "dsputil.h"
33 #include "internal.h"
34 #include "mpegaudiodsp.h"
35 
36 #include "mpc.h"
37 #include "mpc8data.h"
38 #include "mpc8huff.h"
39 
40 static VLC band_vlc, scfi_vlc[2], dscf_vlc[2], res_vlc[2];
41 static VLC q1_vlc, q2_vlc[2], q3_vlc[2], quant_vlc[4][2], q9up_vlc;
42 
43 static const int q3_offsets[2] = { MPC8_Q3_OFFSET, MPC8_Q4_OFFSET };
45 
46 static inline int mpc8_dec_base(GetBitContext *gb, int k, int n)
47 {
48  int len = mpc8_cnk_len[k-1][n-1] - 1;
49  int code = len ? get_bits_long(gb, len) : 0;
50 
51  if (code >= mpc8_cnk_lost[k-1][n-1])
52  code = ((code << 1) | get_bits1(gb)) - mpc8_cnk_lost[k-1][n-1];
53 
54  return code;
55 }
56 
57 static inline int mpc8_dec_enum(GetBitContext *gb, int k, int n)
58 {
59  int bits = 0;
60  const uint32_t * C = mpc8_cnk[k-1];
61  int code = mpc8_dec_base(gb, k, n);
62 
63  do {
64  n--;
65  if (code >= C[n]) {
66  bits |= 1 << n;
67  code -= C[n];
68  C -= 32;
69  k--;
70  }
71  } while(k > 0);
72 
73  return bits;
74 }
75 
76 static inline int mpc8_get_mod_golomb(GetBitContext *gb, int m)
77 {
78  if(mpc8_cnk_len[0][m] < 1) return 0;
79  return mpc8_dec_base(gb, 1, m+1);
80 }
81 
82 static int mpc8_get_mask(GetBitContext *gb, int size, int t)
83 {
84  int mask = 0;
85 
86  if(t && t != size)
87  mask = mpc8_dec_enum(gb, FFMIN(t, size - t), size);
88  if((t << 1) > size) mask = ~mask;
89 
90  return mask;
91 }
92 
93 static const uint16_t vlc_offsets[13] = {
94  0, 640, 1184, 1748, 2298, 2426, 2554, 3066, 3578, 4106, 4618, 5196, 5708
95 };
96 
98 {
99  int i;
100  MPCContext *c = avctx->priv_data;
101  GetBitContext gb;
102  static int vlc_initialized = 0;
103  int channels;
104 
105  static VLC_TYPE band_table[542][2];
106  static VLC_TYPE q1_table[520][2];
107  static VLC_TYPE q9up_table[524][2];
108  static VLC_TYPE scfi0_table[1 << MPC8_SCFI0_BITS][2];
109  static VLC_TYPE scfi1_table[1 << MPC8_SCFI1_BITS][2];
110  static VLC_TYPE dscf0_table[560][2];
111  static VLC_TYPE dscf1_table[598][2];
112  static VLC_TYPE q3_0_table[512][2];
113  static VLC_TYPE q3_1_table[516][2];
114  static VLC_TYPE codes_table[5708][2];
115 
116  if(avctx->extradata_size < 2){
117  av_log(avctx, AV_LOG_ERROR, "Too small extradata size (%i)!\n", avctx->extradata_size);
118  return -1;
119  }
120  memset(c->oldDSCF, 0, sizeof(c->oldDSCF));
121  av_lfg_init(&c->rnd, 0xDEADBEEF);
122  ff_dsputil_init(&c->dsp, avctx);
123  ff_mpadsp_init(&c->mpadsp);
124 
125  ff_mpc_init();
126 
127  init_get_bits(&gb, avctx->extradata, 16);
128 
129  skip_bits(&gb, 3);//sample rate
130  c->maxbands = get_bits(&gb, 5) + 1;
131  if (c->maxbands >= BANDS) {
132  av_log(avctx,AV_LOG_ERROR, "maxbands %d too high\n", c->maxbands);
133  return AVERROR_INVALIDDATA;
134  }
135  channels = get_bits(&gb, 4) + 1;
136  if (channels > 2) {
137  avpriv_request_sample(avctx, "Multichannel MPC SV8");
138  return AVERROR_PATCHWELCOME;
139  }
140  c->MSS = get_bits1(&gb);
141  c->frames = 1 << (get_bits(&gb, 3) * 2);
142 
144  avctx->channel_layout = (channels==2) ? AV_CH_LAYOUT_STEREO : AV_CH_LAYOUT_MONO;
145  avctx->channels = channels;
146 
147  if(vlc_initialized) return 0;
148  av_log(avctx, AV_LOG_DEBUG, "Initing VLC\n");
149 
150  band_vlc.table = band_table;
151  band_vlc.table_allocated = 542;
153  mpc8_bands_bits, 1, 1,
155 
156  q1_vlc.table = q1_table;
157  q1_vlc.table_allocated = 520;
159  mpc8_q1_bits, 1, 1,
161  q9up_vlc.table = q9up_table;
162  q9up_vlc.table_allocated = 524;
164  mpc8_q9up_bits, 1, 1,
166 
167  scfi_vlc[0].table = scfi0_table;
168  scfi_vlc[0].table_allocated = 1 << MPC8_SCFI0_BITS;
170  mpc8_scfi0_bits, 1, 1,
172  scfi_vlc[1].table = scfi1_table;
173  scfi_vlc[1].table_allocated = 1 << MPC8_SCFI1_BITS;
175  mpc8_scfi1_bits, 1, 1,
177 
178  dscf_vlc[0].table = dscf0_table;
179  dscf_vlc[0].table_allocated = 560;
181  mpc8_dscf0_bits, 1, 1,
183  dscf_vlc[1].table = dscf1_table;
184  dscf_vlc[1].table_allocated = 598;
186  mpc8_dscf1_bits, 1, 1,
188 
189  q3_vlc[0].table = q3_0_table;
190  q3_vlc[0].table_allocated = 512;
192  mpc8_q3_bits, 1, 1,
193  mpc8_q3_codes, 1, 1,
195  q3_vlc[1].table = q3_1_table;
196  q3_vlc[1].table_allocated = 516;
198  mpc8_q4_bits, 1, 1,
199  mpc8_q4_codes, 1, 1,
201 
202  for(i = 0; i < 2; i++){
203  res_vlc[i].table = &codes_table[vlc_offsets[0+i]];
204  res_vlc[i].table_allocated = vlc_offsets[1+i] - vlc_offsets[0+i];
205  init_vlc(&res_vlc[i], MPC8_RES_BITS, MPC8_RES_SIZE,
206  &mpc8_res_bits[i], 1, 1,
208 
209  q2_vlc[i].table = &codes_table[vlc_offsets[2+i]];
210  q2_vlc[i].table_allocated = vlc_offsets[3+i] - vlc_offsets[2+i];
211  init_vlc(&q2_vlc[i], MPC8_Q2_BITS, MPC8_Q2_SIZE,
212  &mpc8_q2_bits[i], 1, 1,
214 
215  quant_vlc[0][i].table = &codes_table[vlc_offsets[4+i]];
216  quant_vlc[0][i].table_allocated = vlc_offsets[5+i] - vlc_offsets[4+i];
217  init_vlc(&quant_vlc[0][i], MPC8_Q5_BITS, MPC8_Q5_SIZE,
218  &mpc8_q5_bits[i], 1, 1,
220  quant_vlc[1][i].table = &codes_table[vlc_offsets[6+i]];
221  quant_vlc[1][i].table_allocated = vlc_offsets[7+i] - vlc_offsets[6+i];
222  init_vlc(&quant_vlc[1][i], MPC8_Q6_BITS, MPC8_Q6_SIZE,
223  &mpc8_q6_bits[i], 1, 1,
225  quant_vlc[2][i].table = &codes_table[vlc_offsets[8+i]];
226  quant_vlc[2][i].table_allocated = vlc_offsets[9+i] - vlc_offsets[8+i];
227  init_vlc(&quant_vlc[2][i], MPC8_Q7_BITS, MPC8_Q7_SIZE,
228  &mpc8_q7_bits[i], 1, 1,
230  quant_vlc[3][i].table = &codes_table[vlc_offsets[10+i]];
231  quant_vlc[3][i].table_allocated = vlc_offsets[11+i] - vlc_offsets[10+i];
232  init_vlc(&quant_vlc[3][i], MPC8_Q8_BITS, MPC8_Q8_SIZE,
233  &mpc8_q8_bits[i], 1, 1,
235  }
236  vlc_initialized = 1;
237 
238  return 0;
239 }
240 
241 static int mpc8_decode_frame(AVCodecContext * avctx, void *data,
242  int *got_frame_ptr, AVPacket *avpkt)
243 {
244  AVFrame *frame = data;
245  const uint8_t *buf = avpkt->data;
246  int buf_size = avpkt->size;
247  MPCContext *c = avctx->priv_data;
248  GetBitContext gb2, *gb = &gb2;
249  int i, j, k, ch, cnt, res, t;
250  Band *bands = c->bands;
251  int off;
252  int maxband, keyframe;
253  int last[2];
254 
255  /* get output buffer */
256  frame->nb_samples = MPC_FRAME_SIZE;
257  if ((res = ff_get_buffer(avctx, frame, 0)) < 0)
258  return res;
259 
260  keyframe = c->cur_frame == 0;
261 
262  if(keyframe){
263  memset(c->Q, 0, sizeof(c->Q));
264  c->last_bits_used = 0;
265  }
266  init_get_bits(gb, buf, buf_size * 8);
267  skip_bits(gb, c->last_bits_used & 7);
268 
269  if(keyframe)
270  maxband = mpc8_get_mod_golomb(gb, c->maxbands + 1);
271  else{
272  maxband = c->last_max_band + get_vlc2(gb, band_vlc.table, MPC8_BANDS_BITS, 2);
273  if(maxband > 32) maxband -= 33;
274  }
275 
276  if(maxband > c->maxbands + 1) {
277  av_log(avctx, AV_LOG_ERROR, "maxband %d too large\n",maxband);
278  return AVERROR_INVALIDDATA;
279  }
280  c->last_max_band = maxband;
281 
282  /* read subband indexes */
283  if(maxband){
284  last[0] = last[1] = 0;
285  for(i = maxband - 1; i >= 0; i--){
286  for(ch = 0; ch < 2; ch++){
287  last[ch] = get_vlc2(gb, res_vlc[last[ch] > 2].table, MPC8_RES_BITS, 2) + last[ch];
288  if(last[ch] > 15) last[ch] -= 17;
289  bands[i].res[ch] = last[ch];
290  }
291  }
292  if(c->MSS){
293  int mask;
294 
295  cnt = 0;
296  for(i = 0; i < maxband; i++)
297  if(bands[i].res[0] || bands[i].res[1])
298  cnt++;
299  t = mpc8_get_mod_golomb(gb, cnt);
300  mask = mpc8_get_mask(gb, cnt, t);
301  for(i = maxband - 1; i >= 0; i--)
302  if(bands[i].res[0] || bands[i].res[1]){
303  bands[i].msf = mask & 1;
304  mask >>= 1;
305  }
306  }
307  }
308  for(i = maxband; i < c->maxbands; i++)
309  bands[i].res[0] = bands[i].res[1] = 0;
310 
311  if(keyframe){
312  for(i = 0; i < 32; i++)
313  c->oldDSCF[0][i] = c->oldDSCF[1][i] = 1;
314  }
315 
316  for(i = 0; i < maxband; i++){
317  if(bands[i].res[0] || bands[i].res[1]){
318  cnt = !!bands[i].res[0] + !!bands[i].res[1] - 1;
319  if(cnt >= 0){
320  t = get_vlc2(gb, scfi_vlc[cnt].table, scfi_vlc[cnt].bits, 1);
321  if(bands[i].res[0]) bands[i].scfi[0] = t >> (2 * cnt);
322  if(bands[i].res[1]) bands[i].scfi[1] = t & 3;
323  }
324  }
325  }
326 
327  for(i = 0; i < maxband; i++){
328  for(ch = 0; ch < 2; ch++){
329  if(!bands[i].res[ch]) continue;
330 
331  if(c->oldDSCF[ch][i]){
332  bands[i].scf_idx[ch][0] = get_bits(gb, 7) - 6;
333  c->oldDSCF[ch][i] = 0;
334  }else{
335  t = get_vlc2(gb, dscf_vlc[1].table, MPC8_DSCF1_BITS, 2);
336  if(t == 64)
337  t += get_bits(gb, 6);
338  bands[i].scf_idx[ch][0] = ((bands[i].scf_idx[ch][2] + t - 25) & 0x7F) - 6;
339  }
340  for(j = 0; j < 2; j++){
341  if((bands[i].scfi[ch] << j) & 2)
342  bands[i].scf_idx[ch][j + 1] = bands[i].scf_idx[ch][j];
343  else{
344  t = get_vlc2(gb, dscf_vlc[0].table, MPC8_DSCF0_BITS, 2);
345  if(t == 31)
346  t = 64 + get_bits(gb, 6);
347  bands[i].scf_idx[ch][j + 1] = ((bands[i].scf_idx[ch][j] + t - 25) & 0x7F) - 6;
348  }
349  }
350  }
351  }
352 
353  for(i = 0, off = 0; i < maxband; i++, off += SAMPLES_PER_BAND){
354  for(ch = 0; ch < 2; ch++){
355  res = bands[i].res[ch];
356  switch(res){
357  case -1:
358  for(j = 0; j < SAMPLES_PER_BAND; j++)
359  c->Q[ch][off + j] = (av_lfg_get(&c->rnd) & 0x3FC) - 510;
360  break;
361  case 0:
362  break;
363  case 1:
364  for(j = 0; j < SAMPLES_PER_BAND; j += SAMPLES_PER_BAND / 2){
365  cnt = get_vlc2(gb, q1_vlc.table, MPC8_Q1_BITS, 2);
366  t = mpc8_get_mask(gb, 18, cnt);
367  for(k = 0; k < SAMPLES_PER_BAND / 2; k++, t <<= 1)
368  c->Q[ch][off + j + k] = (t & 0x20000) ? (get_bits1(gb) << 1) - 1 : 0;
369  }
370  break;
371  case 2:
372  cnt = 6;//2*mpc8_thres[res]
373  for(j = 0; j < SAMPLES_PER_BAND; j += 3){
374  t = get_vlc2(gb, q2_vlc[cnt > 3].table, MPC8_Q2_BITS, 2);
375  c->Q[ch][off + j + 0] = mpc8_idx50[t];
376  c->Q[ch][off + j + 1] = mpc8_idx51[t];
377  c->Q[ch][off + j + 2] = mpc8_idx52[t];
378  cnt = (cnt >> 1) + mpc8_huffq2[t];
379  }
380  break;
381  case 3:
382  case 4:
383  for(j = 0; j < SAMPLES_PER_BAND; j += 2){
384  t = get_vlc2(gb, q3_vlc[res - 3].table, MPC8_Q3_BITS, 2) + q3_offsets[res - 3];
385  c->Q[ch][off + j + 1] = t >> 4;
386  c->Q[ch][off + j + 0] = (t & 8) ? (t & 0xF) - 16 : (t & 0xF);
387  }
388  break;
389  case 5:
390  case 6:
391  case 7:
392  case 8:
393  cnt = 2 * mpc8_thres[res];
394  for(j = 0; j < SAMPLES_PER_BAND; j++){
395  t = get_vlc2(gb, quant_vlc[res - 5][cnt > mpc8_thres[res]].table, quant_vlc[res - 5][cnt > mpc8_thres[res]].bits, 2) + quant_offsets[res - 5];
396  c->Q[ch][off + j] = t;
397  cnt = (cnt >> 1) + FFABS(c->Q[ch][off + j]);
398  }
399  break;
400  default:
401  for(j = 0; j < SAMPLES_PER_BAND; j++){
402  c->Q[ch][off + j] = get_vlc2(gb, q9up_vlc.table, MPC8_Q9UP_BITS, 2);
403  if(res != 9){
404  c->Q[ch][off + j] <<= res - 9;
405  c->Q[ch][off + j] |= get_bits(gb, res - 9);
406  }
407  c->Q[ch][off + j] -= (1 << (res - 2)) - 1;
408  }
409  }
410  }
411  }
412 
413  ff_mpc_dequantize_and_synth(c, maxband - 1,
414  (int16_t **)frame->extended_data,
415  avctx->channels);
416 
417  c->cur_frame++;
418 
420  if(get_bits_left(gb) < 8) // we have only padding left
421  c->last_bits_used = buf_size << 3;
422  if(c->cur_frame >= c->frames)
423  c->cur_frame = 0;
424 
425  *got_frame_ptr = 1;
426 
427  return c->cur_frame ? c->last_bits_used >> 3 : buf_size;
428 }
429 
431 {
432  MPCContext *c = avctx->priv_data;
433  c->cur_frame = 0;
434 }
435 
437  .name = "mpc8",
438  .type = AVMEDIA_TYPE_AUDIO,
439  .id = AV_CODEC_ID_MUSEPACK8,
440  .priv_data_size = sizeof(MPCContext),
444  .capabilities = CODEC_CAP_DR1,
445  .long_name = NULL_IF_CONFIG_SMALL("Musepack SV8"),
446  .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_S16P,
448 };
static const int quant_offsets[6]
void ff_mpc_dequantize_and_synth(MPCContext *c, int maxband, int16_t **out, int channels)
av_cold void ff_dsputil_init(DSPContext *c, AVCodecContext *avctx)
Definition: dsputil.c:2675
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:59
This structure describes decoded (raw) audio or video data.
Definition: frame.h:76
static const int8_t mpc8_q5_bits[2][MPC8_Q5_SIZE]
Definition: mpc8huff.h:404
static VLC q2_vlc[2]
#define MPC8_Q8_BITS
Definition: mpc8huff.h:498
#define C
MPADSPContext mpadsp
Definition: mpc.h:54
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:240
static const int8_t mpc8_bands_bits[MPC8_BANDS_SIZE]
Definition: mpc8huff.h:37
static av_cold int init(AVCodecContext *avctx)
Definition: avrndec.c:35
#define MPC8_SCFI0_SIZE
Definition: mpc8huff.h:45
int msf
mid-stereo flag
Definition: mpc.h:45
int Q[2][MPC_FRAME_SIZE]
Definition: mpc.h:62
int res[2]
Definition: mpc.h:46
AVLFG rnd
Definition: mpc.h:66
#define MPC8_DSCF0_SIZE
Definition: mpc8huff.h:69
#define VLC_TYPE
Definition: get_bits.h:61
int last_max_band
Definition: mpc.h:58
#define AV_CH_LAYOUT_STEREO
#define MPC8_Q8_SIZE
Definition: mpc8huff.h:497
#define MPC8_RES_SIZE
Definition: mpc8huff.h:120
static const uint8_t mpc8_q8_codes[2][MPC8_Q8_SIZE]
Definition: mpc8huff.h:501
static const int8_t mpc8_q7_bits[2][MPC8_Q7_SIZE]
Definition: mpc8huff.h:474
#define MPC8_Q3_BITS
Definition: mpc8huff.h:315
static const int8_t mpc8_q8_bits[2][MPC8_Q8_SIZE]
Definition: mpc8huff.h:539
#define MPC8_DSCF1_SIZE
Definition: mpc8huff.h:94
static const uint32_t mpc8_cnk_lost[16][33]
Definition: mpc8data.h:101
#define MPC8_Q6_BITS
Definition: mpc8huff.h:416
void void avpriv_request_sample(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
static const int8_t mpc8_dscf1_bits[MPC8_DSCF1_SIZE]
Definition: mpc8huff.h:108
int ff_init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes, const void *bits, int bits_wrap, int bits_size, const void *codes, int codes_wrap, int codes_size, const void *symbols, int symbols_wrap, int symbols_size, int flags)
Definition: bitstream.c:262
uint8_t bits
Definition: crc.c:216
enum AVSampleFormat sample_fmt
audio sample format
static const int8_t mpc8_q4_syms[MPC8_Q4_SIZE]
Definition: mpc8huff.h:376
uint8_t
#define av_cold
Definition: attributes.h:78
#define MPC8_Q7_SIZE
Definition: mpc8huff.h:448
window constants for m
#define MPC8_Q1_BITS
Definition: mpc8huff.h:149
static VLC q3_vlc[2]
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static const uint8_t mpc8_dscf1_codes[MPC8_DSCF1_SIZE]
Definition: mpc8huff.h:97
#define CODEC_CAP_DR1
Codec uses get_buffer() for allocating buffers and supports custom allocators.
#define MPC8_BANDS_SIZE
Definition: mpc8huff.h:27
int scf_idx[2][3]
Definition: mpc.h:48
#define MPC8_DSCF1_BITS
Definition: mpc8huff.h:95
uint8_t * data
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:193
static const uint8_t mpc8_q1_codes[MPC8_Q1_SIZE]
Definition: mpc8huff.h:151
bitstream reader API header.
#define MPC8_SCFI0_BITS
Definition: mpc8huff.h:46
static const int8_t mpc8_dscf0_bits[MPC8_DSCF0_SIZE]
Definition: mpc8huff.h:82
int last_bits_used
Definition: mpc.h:59
static const int8_t mpc8_scfi1_bits[MPC8_SCFI1_SIZE]
Definition: mpc8huff.h:63
static const int8_t mpc8_huffq2[5 *5 *5]
Definition: mpc8data.h:50
frame
Definition: stft.m:14
#define MPC8_Q9UP_SIZE
Definition: mpc8huff.h:162
static int get_bits_left(GetBitContext *gb)
Definition: get_bits.h:557
#define MPC8_Q1_SIZE
Definition: mpc8huff.h:148
static const int8_t mpc8_q1_bits[MPC8_Q1_SIZE]
Definition: mpc8huff.h:156
static const uint8_t mpc8_dscf0_codes[MPC8_DSCF0_SIZE]
Definition: mpc8huff.h:72
static const int8_t mpc8_idx50[125]
Definition: mpc8data.h:27
#define MPC8_Q5_SIZE
Definition: mpc8huff.h:390
static const uint16_t mask[17]
Definition: lzw.c:37
int cur_frame
Definition: mpc.h:63
static VLC dscf_vlc[2]
static av_cold int mpc8_decode_init(AVCodecContext *avctx)
static const struct endianess table[]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Spectrum Plot time data
static VLC quant_vlc[4][2]
static const int8_t mpc8_scfi0_bits[MPC8_SCFI0_SIZE]
Definition: mpc8huff.h:51
static const int8_t mpc8_q3_bits[MPC8_Q3_SIZE]
Definition: mpc8huff.h:327
void av_log(void *avcl, int level, const char *fmt,...)
Definition: log.c:246
const char * name
Name of the codec implementation.
int maxbands
Definition: mpc.h:58
#define SAMPLES_PER_BAND
Definition: mpc.h:40
external API header
#define MPC8_Q4_BITS
Definition: mpc8huff.h:347
int size
Definition: get_bits.h:63
uint64_t channel_layout
Audio channel layout.
#define MPC8_Q4_OFFSET
Definition: mpc8huff.h:348
#define MPC8_SCFI1_SIZE
Definition: mpc8huff.h:55
void ff_mpadsp_init(MPADSPContext *s)
Definition: mpegaudiodsp.c:26
static const uint8_t mpc8_bands_codes[MPC8_BANDS_SIZE]
Definition: mpc8huff.h:30
static av_cold void mpc8_decode_flush(AVCodecContext *avctx)
static const int8_t mpc8_idx51[125]
Definition: mpc8data.h:34
audio channel layout utility functions
#define MPC_FRAME_SIZE
Definition: mpc.h:41
static int mpc8_decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr, AVPacket *avpkt)
#define FFMIN(a, b)
Definition: common.h:58
static int mpc8_get_mod_golomb(GetBitContext *gb, int m)
#define MPC8_Q8_OFFSET
Definition: mpc8huff.h:499
AVCodec ff_mpc8_decoder
t
Definition: genspecsines3.m:6
#define FFABS(a)
Definition: common.h:53
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:524
#define MPC8_Q7_OFFSET
Definition: mpc8huff.h:450
static const uint8_t mpc8_q5_codes[2][MPC8_Q5_SIZE]
Definition: mpc8huff.h:394
static const uint8_t mpc8_cnk_len[16][33]
Definition: mpc8data.h:80
#define MPC8_Q6_SIZE
Definition: mpc8huff.h:415
static VLC q9up_vlc
#define INIT_VLC_USE_NEW_STATIC
Definition: get_bits.h:443
static const uint8_t mpc8_q3_codes[MPC8_Q3_SIZE]
Definition: mpc8huff.h:318
static void flush(AVCodecContext *avctx)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:62
int table_allocated
Definition: get_bits.h:66
for k
or the Software in violation of any applicable export control laws in any jurisdiction Except as provided by mandatorily applicable UPF has no obligation to provide you with source code to the Software In the event Software contains any source code
Musepack decoder MPEG Audio Layer 1/2 -like codec with frames of 1152 samples divided into 32 subband...
#define MPC8_Q7_BITS
Definition: mpc8huff.h:449
int scfi[2]
Definition: mpc.h:47
main external API structure.
DSPContext dsp
Definition: mpc.h:53
#define MPC8_Q5_OFFSET
Definition: mpc8huff.h:392
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:148
#define init_vlc(vlc, nb_bits, nb_codes,bits, bits_wrap, bits_size,codes, codes_wrap, codes_size,flags)
Definition: get_bits.h:426
static unsigned int av_lfg_get(AVLFG *c)
Get the next random unsigned 32-bit number using an ALFG.
Definition: lfg.h:38
void * buf
Definition: avisynth_c.h:594
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:273
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:265
int oldDSCF[2][BANDS]
Definition: mpc.h:60
synthesis window for stochastic i
static VLC scfi_vlc[2]
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:379
static const uint32_t mpc8_cnk[16][32]
Definition: mpc8data.h:60
static int mpc8_dec_base(GetBitContext *gb, int k, int n)
#define MPC8_Q6_OFFSET
Definition: mpc8huff.h:417
av_cold void av_lfg_init(AVLFG *c, unsigned int seed)
Definition: lfg.c:30
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:306
static const uint16_t vlc_offsets[13]
static const unsigned int mpc8_thres[]
Definition: mpc8data.h:49
#define BANDS
Definition: imc.c:53
static const int8_t mpc8_q3_syms[MPC8_Q3_SIZE]
Definition: mpc8huff.h:336
#define MPC8_Q2_SIZE
Definition: mpc8huff.h:234
#define MPC8_SCFI1_BITS
Definition: mpc8huff.h:56
#define MPC8_Q9UP_BITS
Definition: mpc8huff.h:163
static const uint8_t mpc8_scfi1_codes[MPC8_SCFI1_SIZE]
Definition: mpc8huff.h:58
Band bands[BANDS]
Definition: mpc.h:61
static const int q3_offsets[2]
static const int8_t mpc8_q9up_bits[MPC8_Q9UP_SIZE]
Definition: mpc8huff.h:199
common internal api header.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:162
static const int8_t mpc8_idx52[125]
Definition: mpc8data.h:41
static const uint8_t mpc8_q9up_codes[MPC8_Q9UP_SIZE]
Definition: mpc8huff.h:165
#define MPC8_DSCF0_BITS
Definition: mpc8huff.h:70
static double c[64]
#define MPC8_RES_BITS
Definition: mpc8huff.h:121
static const uint8_t mpc8_q2_codes[2][MPC8_Q2_SIZE]
Definition: mpc8huff.h:237
AVSampleFormat
Audio Sample Formats.
Definition: samplefmt.h:49
static const int8_t mpc8_q2_bits[2][MPC8_Q2_SIZE]
Definition: mpc8huff.h:275
static VLC q1_vlc
int MSS
Definition: mpc.h:56
DSP utils.
void ff_mpc_init(void)
static const uint8_t mpc8_res_codes[2][MPC8_RES_SIZE]
Definition: mpc8huff.h:123
int len
int channels
number of audio channels
static VLC res_vlc[2]
int frames
Definition: mpc.h:63
VLC_TYPE(* table)[2]
code, bits
Definition: get_bits.h:65
#define MPC8_Q3_OFFSET
Definition: mpc8huff.h:316
static int mpc8_get_mask(GetBitContext *gb, int size, int t)
signed 16 bits, planar
Definition: samplefmt.h:58
static const int8_t mpc8_res_bits[2][MPC8_RES_SIZE]
Definition: mpc8huff.h:135
static const uint8_t mpc8_q6_codes[2][MPC8_Q6_SIZE]
Definition: mpc8huff.h:419
static const int8_t mpc8_q6_bits[2][MPC8_Q6_SIZE]
Definition: mpc8huff.h:433
static const uint8_t mpc8_q4_codes[MPC8_Q4_SIZE]
Definition: mpc8huff.h:350
static VLC band_vlc
static int decode(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
Definition: crystalhd.c:868
#define MPC8_Q5_BITS
Definition: mpc8huff.h:391
#define MPC8_Q4_SIZE
Definition: mpc8huff.h:346
#define MPC8_BANDS_BITS
Definition: mpc8huff.h:28
#define MPC8_Q3_SIZE
Definition: mpc8huff.h:314
struct MPCContext MPCContext
uint8_t ** extended_data
pointers to the data planes/channels.
Definition: frame.h:117
#define AV_CH_LAYOUT_MONO
Subband structure - hold all variables for each subband.
Definition: mpc.h:44
This structure stores compressed data.
static int mpc8_dec_enum(GetBitContext *gb, int k, int n)
int nb_samples
number of audio samples (per channel) described by this frame
Definition: frame.h:127
static const uint8_t mpc8_q7_codes[2][MPC8_Q7_SIZE]
Definition: mpc8huff.h:452
#define MPC8_Q2_BITS
Definition: mpc8huff.h:235
static const uint8_t mpc8_scfi0_codes[MPC8_SCFI0_SIZE]
Definition: mpc8huff.h:48
Definition: mpc.h:52
static const int8_t mpc8_q4_bits[MPC8_Q4_SIZE]
Definition: mpc8huff.h:363