FFmpeg
mlpdec.c
Go to the documentation of this file.
1 /*
2  * MLP decoder
3  * Copyright (c) 2007-2008 Ian Caulfield
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  * MLP decoder
25  */
26 
27 #include "config_components.h"
28 
29 #include <stdint.h>
30 
31 #include "avcodec.h"
32 #include "libavutil/internal.h"
33 #include "libavutil/intreadwrite.h"
35 #include "libavutil/mem_internal.h"
36 #include "libavutil/thread.h"
37 #include "libavutil/opt.h"
38 #include "codec_internal.h"
39 #include "decode.h"
40 #include "get_bits.h"
41 #include "mlp_parse.h"
42 #include "mlpdsp.h"
43 #include "mlp.h"
44 #include "config.h"
45 #include "profiles.h"
46 
47 /** number of bits used for VLC lookup - longest Huffman code is 9 */
48 #if ARCH_ARM
49 #define VLC_BITS 5
50 #define VLC_STATIC_SIZE 64
51 #else
52 #define VLC_BITS 9
53 #define VLC_STATIC_SIZE 512
54 #endif
55 
56 typedef struct SubStream {
57  /// Set if a valid restart header has been read. Otherwise the substream cannot be decoded.
58  uint8_t restart_seen;
59  /// Set if end of stream is encountered
60  uint8_t end_of_stream;
61 
62  //@{
63  /** restart header data */
64  /// The type of noise to be used in the rematrix stage.
65  uint16_t noise_type;
66 
67  /// The index of the first channel coded in this substream.
68  uint8_t min_channel;
69  /// The index of the last channel coded in this substream.
70  uint8_t max_channel;
71  /// The coded channels mask in this substream.
72  uint64_t coded_channels;
73  /// The number of channels input into the rematrix stage.
75  /// For each channel output by the matrix, the output channel to map it to
77  /// The channel layout for this substream
78  uint64_t mask;
79  /// The matrix encoding mode for this substream
82 
83  /// Channel coding parameters for channels in the substream
85 
86  /// The left shift applied to random noise in 0x31ea substreams.
87  uint8_t noise_shift;
88  /// The current seed value for the pseudorandom noise generator(s).
89  uint32_t noisegen_seed;
90 
91  /// Set if the substream contains extra info to check the size of VLC blocks.
93 
94  /// Bitmask of which parameter sets are conveyed in a decoding parameter block.
96 #define PARAM_BLOCKSIZE (1 << 7)
97 #define PARAM_MATRIX (1 << 6)
98 #define PARAM_OUTSHIFT (1 << 5)
99 #define PARAM_QUANTSTEP (1 << 4)
100 #define PARAM_FIR (1 << 3)
101 #define PARAM_IIR (1 << 2)
102 #define PARAM_HUFFOFFSET (1 << 1)
103 #define PARAM_PRESENCE (1 << 0)
104  //@}
105 
106  //@{
107  /** matrix data */
108 
109  /// Number of matrices to be applied.
111 
112  /// matrix output channel
114 
115  /// Whether the LSBs of the matrix output are encoded in the bitstream.
117  /// Matrix coefficients, stored as 2.14 fixed point.
119  /// Left shift to apply to noise values in 0x31eb substreams.
121  //@}
122 
123  /// Left shift to apply to Huffman-decoded residuals.
125 
126  /// number of PCM samples in current audio block
127  uint16_t blocksize;
128  /// Number of PCM samples decoded so far in this frame.
129  uint16_t blockpos;
130 
131  /// Left shift to apply to decoded PCM values to get final 24-bit output.
133 
134  /// Running XOR of all output samples.
136 
137 } SubStream;
138 
139 typedef struct MLPDecodeContext {
140  const AVClass *class;
142 
144 
145  /// Current access unit being read has a major sync.
147 
148  /// Size of the major sync unit, in bytes
150 
151  /// Set if a valid major sync block has been read. Otherwise no decoding is possible.
152  uint8_t params_valid;
153 
154  /// Number of substreams contained within this stream.
155  uint8_t num_substreams;
156 
157  /// Which substream of substreams carry 16-channel presentation
159 
160  /// Which substream of substreams carry 2/6/8-channel presentation
161  uint8_t substream_info;
162 
163  /// Index of the last substream to decode - further substreams are skipped.
165 
166  /// Stream needs channel reordering to comply with FFmpeg's channel order
168 
169  /// number of PCM samples contained in each frame
171  /// next power of two above the number of samples in each frame
173 
175 
178 
182 
185 
186 static const enum AVChannel thd_channel_order[] = {
189  AV_CHAN_LOW_FREQUENCY, // LFE
194  AV_CHAN_BACK_CENTER, // Cs
195  AV_CHAN_TOP_CENTER, // Ts
199  AV_CHAN_LOW_FREQUENCY_2, // LFE2
200 };
201 
203 {
206  av_channel_layout_subset(layout, UINT64_MAX);
207 }
208 
209 static enum AVChannel thd_channel_layout_extract_channel(uint64_t channel_layout,
210  int index)
211 {
212  int i;
213 
214  if (av_popcount64(channel_layout) <= index)
215  return AV_CHAN_NONE;
216 
217  for (i = 0; i < FF_ARRAY_ELEMS(thd_channel_order); i++)
218  if (channel_layout & (1ULL << thd_channel_order[i]) && !index--)
219  return thd_channel_order[i];
220  return AV_CHAN_NONE;
221 }
222 
223 static VLC huff_vlc[3];
224 
225 /** Initialize static data, constant between all invocations of the codec. */
226 
227 static av_cold void init_static(void)
228 {
229  for (int i = 0; i < 3; i++) {
230  static VLCElem vlc_buf[3 * VLC_STATIC_SIZE];
233  vlc_init(&huff_vlc[i], VLC_BITS, 18,
234  &ff_mlp_huffman_tables[i][0][1], 2, 1,
236  }
237 
238  ff_mlp_init_crc();
239 }
240 
242  unsigned int substr, unsigned int ch)
243 {
244  SubStream *s = &m->substream[substr];
245  ChannelParams *cp = &s->channel_params[ch];
246  int lsb_bits = cp->huff_lsbs - s->quant_step_size[ch];
247  int sign_shift = lsb_bits + (cp->codebook ? 2 - cp->codebook : -1);
248  int32_t sign_huff_offset = cp->huff_offset;
249 
250  if (cp->codebook > 0)
251  sign_huff_offset -= 7 << lsb_bits;
252 
253  if (sign_shift >= 0)
254  sign_huff_offset -= 1 << sign_shift;
255 
256  return sign_huff_offset;
257 }
258 
259 /** Read a sample, consisting of either, both or neither of entropy-coded MSBs
260  * and plain LSBs. */
261 
263  unsigned int substr, unsigned int pos)
264 {
265  SubStream *s = &m->substream[substr];
266  unsigned int mat, channel;
267 
268  for (mat = 0; mat < s->num_primitive_matrices; mat++)
269  if (s->lsb_bypass[mat])
270  m->bypassed_lsbs[pos + s->blockpos][mat] = get_bits1(gbp);
271 
272  for (channel = s->min_channel; channel <= s->max_channel; channel++) {
273  ChannelParams *cp = &s->channel_params[channel];
274  int codebook = cp->codebook;
275  int quant_step_size = s->quant_step_size[channel];
276  int lsb_bits = cp->huff_lsbs - quant_step_size;
277  int result = 0;
278 
279  if (codebook > 0)
281  VLC_BITS, (9 + VLC_BITS - 1) / VLC_BITS);
282 
283  if (result < 0)
284  return AVERROR_INVALIDDATA;
285 
286  if (lsb_bits > 0)
287  result = (result << lsb_bits) + get_bits_long(gbp, lsb_bits);
288 
289  result += cp->sign_huff_offset;
290  result *= 1 << quant_step_size;
291 
292  m->sample_buffer[pos + s->blockpos][channel] = result;
293  }
294 
295  return 0;
296 }
297 
299 {
300  static AVOnce init_static_once = AV_ONCE_INIT;
301  MLPDecodeContext *m = avctx->priv_data;
302  int substr;
303 
304  m->avctx = avctx;
305  for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
306  m->substream[substr].lossless_check_data = 0xffffffff;
307  ff_mlpdsp_init(&m->dsp);
308 
309 #if FF_API_OLD_CHANNEL_LAYOUT
311  if (avctx->request_channel_layout) {
313  av_channel_layout_from_mask(&m->downmix_layout, avctx->request_channel_layout);
314  }
316 #endif
317  ff_thread_once(&init_static_once, init_static);
318 
319  return 0;
320 }
321 
322 /** Read a major sync info header - contains high level information about
323  * the stream - sample rate, channel arrangement etc. Most of this
324  * information is not actually necessary for decoding, only for playback.
325  */
326 
328 {
330  int substr, ret;
331 
332  if ((ret = ff_mlp_read_major_sync(m->avctx, &mh, gb)) != 0)
333  return ret;
334 
335  if (mh.group1_bits == 0) {
336  av_log(m->avctx, AV_LOG_ERROR, "invalid/unknown bits per sample\n");
337  return AVERROR_INVALIDDATA;
338  }
339  if (mh.group2_bits > mh.group1_bits) {
341  "Channel group 2 cannot have more bits per sample than group 1.\n");
342  return AVERROR_INVALIDDATA;
343  }
344 
345  if (mh.group2_samplerate && mh.group2_samplerate != mh.group1_samplerate) {
347  "Channel groups with differing sample rates are not currently supported.\n");
348  return AVERROR_INVALIDDATA;
349  }
350 
351  if (mh.group1_samplerate == 0) {
352  av_log(m->avctx, AV_LOG_ERROR, "invalid/unknown sampling rate\n");
353  return AVERROR_INVALIDDATA;
354  }
355  if (mh.group1_samplerate > MAX_SAMPLERATE) {
357  "Sampling rate %d is greater than the supported maximum (%d).\n",
358  mh.group1_samplerate, MAX_SAMPLERATE);
359  return AVERROR_INVALIDDATA;
360  }
361  if (mh.access_unit_size > MAX_BLOCKSIZE) {
363  "Block size %d is greater than the supported maximum (%d).\n",
364  mh.access_unit_size, MAX_BLOCKSIZE);
365  return AVERROR_INVALIDDATA;
366  }
367  if (mh.access_unit_size_pow2 > MAX_BLOCKSIZE_POW2) {
369  "Block size pow2 %d is greater than the supported maximum (%d).\n",
370  mh.access_unit_size_pow2, MAX_BLOCKSIZE_POW2);
371  return AVERROR_INVALIDDATA;
372  }
373 
374  if (mh.num_substreams == 0)
375  return AVERROR_INVALIDDATA;
376  if (m->avctx->codec_id == AV_CODEC_ID_MLP && mh.num_substreams > 2) {
377  av_log(m->avctx, AV_LOG_ERROR, "MLP only supports up to 2 substreams.\n");
378  return AVERROR_INVALIDDATA;
379  }
380  if (mh.num_substreams > MAX_SUBSTREAMS) {
382  "%d substreams (more than the "
383  "maximum supported by the decoder)",
384  mh.num_substreams);
385  return AVERROR_PATCHWELCOME;
386  }
387 
388  m->major_sync_header_size = mh.header_size;
389 
390  m->access_unit_size = mh.access_unit_size;
391  m->access_unit_size_pow2 = mh.access_unit_size_pow2;
392 
393  m->num_substreams = mh.num_substreams;
394  m->substream_info = mh.substream_info;
395 
396  /* If there is a 4th substream and the MSB of substream_info is set,
397  * there is a 16-channel spatial presentation (Atmos in TrueHD).
398  */
400  && m->num_substreams == 4 && m->substream_info >> 7 == 1) {
402  }
403 
404  /* limit to decoding 3 substreams, as the 4th is used by Dolby Atmos for non-audio data */
406 
407  m->avctx->sample_rate = mh.group1_samplerate;
408  m->avctx->frame_size = mh.access_unit_size;
409 
410  m->avctx->bits_per_raw_sample = mh.group1_bits;
411  if (mh.group1_bits > 16)
413  else
419 
420  m->params_valid = 1;
421  for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
422  m->substream[substr].restart_seen = 0;
423 
424  /* Set the layout for each substream. When there's more than one, the first
425  * substream is Stereo. Subsequent substreams' layouts are indicated in the
426  * major sync. */
427  if (m->avctx->codec_id == AV_CODEC_ID_MLP) {
428  if (mh.stream_type != SYNC_MLP) {
430  "unexpected stream_type %X in MLP",
431  mh.stream_type);
432  return AVERROR_PATCHWELCOME;
433  }
434  if ((substr = (mh.num_substreams > 1)))
436  m->substream[substr].mask = mh.channel_layout_mlp;
437  } else {
438  if (mh.stream_type != SYNC_TRUEHD) {
440  "unexpected stream_type %X in !MLP",
441  mh.stream_type);
442  return AVERROR_PATCHWELCOME;
443  }
444  m->substream[1].mask = mh.channel_layout_thd_stream1;
445  if (mh.channels_thd_stream1 == 2 &&
446  mh.channels_thd_stream2 == 2 &&
447  m->avctx->ch_layout.nb_channels == 2)
449  if ((substr = (mh.num_substreams > 1)))
451  if (mh.num_substreams == 1 &&
452  mh.channels_thd_stream1 == 1 &&
453  mh.channels_thd_stream2 == 1 &&
454  m->avctx->ch_layout.nb_channels == 1)
456  if (mh.num_substreams > 2)
457  if (mh.channel_layout_thd_stream2)
458  m->substream[2].mask = mh.channel_layout_thd_stream2;
459  else
460  m->substream[2].mask = mh.channel_layout_thd_stream1;
461  if (m->avctx->ch_layout.nb_channels > 2)
462  m->substream[mh.num_substreams > 1].mask = mh.channel_layout_thd_stream1;
463  }
464 
465  m->needs_reordering = mh.channel_arrangement >= 18 && mh.channel_arrangement <= 20;
466 
467  /* Parse the TrueHD decoder channel modifiers and set each substream's
468  * AVMatrixEncoding accordingly.
469  *
470  * The meaning of the modifiers depends on the channel layout:
471  *
472  * - THD_CH_MODIFIER_LTRT, THD_CH_MODIFIER_LBINRBIN only apply to 2-channel
473  *
474  * - THD_CH_MODIFIER_MONO applies to 1-channel or 2-channel (dual mono)
475  *
476  * - THD_CH_MODIFIER_SURROUNDEX, THD_CH_MODIFIER_NOTSURROUNDEX only apply to
477  * layouts with an Ls/Rs channel pair
478  */
479  for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
482  if (mh.num_substreams > 2 &&
483  mh.channel_layout_thd_stream2 & AV_CH_SIDE_LEFT &&
484  mh.channel_layout_thd_stream2 & AV_CH_SIDE_RIGHT &&
485  mh.channel_modifier_thd_stream2 == THD_CH_MODIFIER_SURROUNDEX)
487 
488  if (mh.num_substreams > 1 &&
489  mh.channel_layout_thd_stream1 & AV_CH_SIDE_LEFT &&
490  mh.channel_layout_thd_stream1 & AV_CH_SIDE_RIGHT &&
491  mh.channel_modifier_thd_stream1 == THD_CH_MODIFIER_SURROUNDEX)
493 
494  if (mh.num_substreams > 0)
495  switch (mh.channel_modifier_thd_stream0) {
498  break;
501  break;
502  default:
503  break;
504  }
505  }
506 
507  return 0;
508 }
509 
510 /** Read a restart header from a block in a substream. This contains parameters
511  * required to decode the audio that do not change very often. Generally
512  * (always) present only in blocks following a major sync. */
513 
515  const uint8_t *buf, unsigned int substr)
516 {
517  SubStream *s = &m->substream[substr];
518  unsigned int ch;
519  int sync_word, tmp;
520  uint8_t checksum;
521  uint8_t lossless_check;
522  int start_count = get_bits_count(gbp);
523  int min_channel, max_channel, max_matrix_channel, noise_type;
524  const int std_max_matrix_channel = m->avctx->codec_id == AV_CODEC_ID_MLP
527 
528  sync_word = get_bits(gbp, 13);
529 
530  if (sync_word != 0x31ea >> 1) {
532  "restart header sync incorrect (got 0x%04x)\n", sync_word);
533  return AVERROR_INVALIDDATA;
534  }
535 
536  noise_type = get_bits1(gbp);
537 
538  if (m->avctx->codec_id == AV_CODEC_ID_MLP && noise_type) {
539  av_log(m->avctx, AV_LOG_ERROR, "MLP must have 0x31ea sync word.\n");
540  return AVERROR_INVALIDDATA;
541  }
542 
543  skip_bits(gbp, 16); /* Output timestamp */
544 
545  min_channel = get_bits(gbp, 4);
546  max_channel = get_bits(gbp, 4);
547  max_matrix_channel = get_bits(gbp, 4);
548 
549  if (max_matrix_channel > std_max_matrix_channel) {
551  "Max matrix channel cannot be greater than %d.\n",
552  std_max_matrix_channel);
553  return AVERROR_INVALIDDATA;
554  }
555 
556  /* This should happen for TrueHD streams with >6 channels and MLP's noise
557  * type. It is not yet known if this is allowed. */
558  if (max_matrix_channel > MAX_MATRIX_CHANNEL_MLP && !noise_type) {
560  "%d channels (more than the "
561  "maximum supported by the decoder)",
562  max_channel + 2);
563  return AVERROR_PATCHWELCOME;
564  }
565 
566  if (max_channel + 1 > MAX_CHANNELS || max_channel + 1 < min_channel)
567  return AVERROR_INVALIDDATA;
568 
569  s->min_channel = min_channel;
570  s->max_channel = max_channel;
571  s->coded_channels = ((1LL << (max_channel - min_channel + 1)) - 1) << min_channel;
572  s->max_matrix_channel = max_matrix_channel;
573  s->noise_type = noise_type;
574 
575  if (mlp_channel_layout_subset(&m->downmix_layout, s->mask) &&
576  m->max_decoded_substream > substr) {
578  "Extracting %d-channel downmix (0x%"PRIx64") from substream %d. "
579  "Further substreams will be skipped.\n",
580  s->max_channel + 1, s->mask, substr);
581  m->max_decoded_substream = substr;
582  }
583 
584  s->noise_shift = get_bits(gbp, 4);
585  s->noisegen_seed = get_bits(gbp, 23);
586 
587  skip_bits(gbp, 19);
588 
589  s->data_check_present = get_bits1(gbp);
590  lossless_check = get_bits(gbp, 8);
591  if (substr == m->max_decoded_substream
592  && s->lossless_check_data != 0xffffffff) {
593  tmp = xor_32_to_8(s->lossless_check_data);
594  if (tmp != lossless_check)
596  "Lossless check failed - expected %02x, calculated %02x.\n",
597  lossless_check, tmp);
598  }
599 
600  skip_bits(gbp, 16);
601 
602  memset(s->ch_assign, 0, sizeof(s->ch_assign));
603 
604  for (ch = 0; ch <= s->max_matrix_channel; ch++) {
605  int ch_assign = get_bits(gbp, 6);
606  if (m->avctx->codec_id == AV_CODEC_ID_TRUEHD) {
607  AVChannelLayout l;
608  enum AVChannel channel = thd_channel_layout_extract_channel(s->mask, ch_assign);
609 
610  av_channel_layout_from_mask(&l, s->mask);
612  }
613  if (ch_assign < 0 || ch_assign > s->max_matrix_channel) {
615  "Assignment of matrix channel %d to invalid output channel %d",
616  ch, ch_assign);
617  return AVERROR_PATCHWELCOME;
618  }
619  s->ch_assign[ch_assign] = ch;
620  }
621 
622  checksum = ff_mlp_restart_checksum(buf, get_bits_count(gbp) - start_count);
623 
624  if (checksum != get_bits(gbp, 8))
625  av_log(m->avctx, AV_LOG_ERROR, "restart header checksum error\n");
626 
627  /* Set default decoding parameters. */
628  s->param_presence_flags = 0xff;
629  s->num_primitive_matrices = 0;
630  s->blocksize = 8;
631  s->lossless_check_data = 0;
632 
633  memset(s->output_shift , 0, sizeof(s->output_shift ));
634  memset(s->quant_step_size, 0, sizeof(s->quant_step_size));
635 
636  for (ch = s->min_channel; ch <= s->max_channel; ch++) {
637  ChannelParams *cp = &s->channel_params[ch];
638  cp->filter_params[FIR].order = 0;
639  cp->filter_params[IIR].order = 0;
640  cp->filter_params[FIR].shift = 0;
641  cp->filter_params[IIR].shift = 0;
642 
643  /* Default audio coding is 24-bit raw PCM. */
644  cp->huff_offset = 0;
645  cp->sign_huff_offset = -(1 << 23);
646  cp->codebook = 0;
647  cp->huff_lsbs = 24;
648  }
649 
650  if (substr == m->max_decoded_substream) {
653  m->dsp.mlp_pack_output = m->dsp.mlp_select_pack_output(s->ch_assign,
654  s->output_shift,
655  s->max_matrix_channel,
657 
658  if (m->avctx->codec_id == AV_CODEC_ID_MLP && m->needs_reordering) {
659  if (s->mask == (AV_CH_LAYOUT_QUAD|AV_CH_LOW_FREQUENCY) ||
660  s->mask == AV_CH_LAYOUT_5POINT0_BACK) {
661  int i = s->ch_assign[4];
662  s->ch_assign[4] = s->ch_assign[3];
663  s->ch_assign[3] = s->ch_assign[2];
664  s->ch_assign[2] = i;
665  } else if (s->mask == AV_CH_LAYOUT_5POINT1_BACK) {
666  FFSWAP(int, s->ch_assign[2], s->ch_assign[4]);
667  FFSWAP(int, s->ch_assign[3], s->ch_assign[5]);
668  }
669  }
670 
671  }
672 
673  return 0;
674 }
675 
676 /** Read parameters for one of the prediction filters. */
677 
679  unsigned int substr, unsigned int channel,
680  unsigned int filter)
681 {
682  SubStream *s = &m->substream[substr];
683  FilterParams *fp = &s->channel_params[channel].filter_params[filter];
684  const int max_order = filter ? MAX_IIR_ORDER : MAX_FIR_ORDER;
685  const char fchar = filter ? 'I' : 'F';
686  int i, order;
687 
688  // Filter is 0 for FIR, 1 for IIR.
689  av_assert0(filter < 2);
690 
691  if (m->filter_changed[channel][filter]++ > 1) {
692  av_log(m->avctx, AV_LOG_ERROR, "Filters may change only once per access unit.\n");
693  return AVERROR_INVALIDDATA;
694  }
695 
696  order = get_bits(gbp, 4);
697  if (order > max_order) {
699  "%cIR filter order %d is greater than maximum %d.\n",
700  fchar, order, max_order);
701  return AVERROR_INVALIDDATA;
702  }
703  fp->order = order;
704 
705  if (order > 0) {
706  int32_t *fcoeff = s->channel_params[channel].coeff[filter];
707  int coeff_bits, coeff_shift;
708 
709  fp->shift = get_bits(gbp, 4);
710 
711  coeff_bits = get_bits(gbp, 5);
712  coeff_shift = get_bits(gbp, 3);
713  if (coeff_bits < 1 || coeff_bits > 16) {
715  "%cIR filter coeff_bits must be between 1 and 16.\n",
716  fchar);
717  return AVERROR_INVALIDDATA;
718  }
719  if (coeff_bits + coeff_shift > 16) {
721  "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
722  fchar);
723  return AVERROR_INVALIDDATA;
724  }
725 
726  for (i = 0; i < order; i++)
727  fcoeff[i] = get_sbits(gbp, coeff_bits) * (1 << coeff_shift);
728 
729  if (get_bits1(gbp)) {
730  int state_bits, state_shift;
731 
732  if (filter == FIR) {
734  "FIR filter has state data specified.\n");
735  return AVERROR_INVALIDDATA;
736  }
737 
738  state_bits = get_bits(gbp, 4);
739  state_shift = get_bits(gbp, 4);
740 
741  /* TODO: Check validity of state data. */
742 
743  for (i = 0; i < order; i++)
744  fp->state[i] = state_bits ? get_sbits(gbp, state_bits) * (1 << state_shift) : 0;
745  }
746  }
747 
748  return 0;
749 }
750 
751 /** Read parameters for primitive matrices. */
752 
753 static int read_matrix_params(MLPDecodeContext *m, unsigned int substr, GetBitContext *gbp)
754 {
755  SubStream *s = &m->substream[substr];
756  unsigned int mat, ch;
757  const int max_primitive_matrices = m->avctx->codec_id == AV_CODEC_ID_MLP
760 
761  if (m->matrix_changed++ > 1) {
762  av_log(m->avctx, AV_LOG_ERROR, "Matrices may change only once per access unit.\n");
763  return AVERROR_INVALIDDATA;
764  }
765 
766  s->num_primitive_matrices = get_bits(gbp, 4);
767 
768  if (s->num_primitive_matrices > max_primitive_matrices) {
770  "Number of primitive matrices cannot be greater than %d.\n",
771  max_primitive_matrices);
772  goto error;
773  }
774 
775  for (mat = 0; mat < s->num_primitive_matrices; mat++) {
776  int frac_bits, max_chan;
777  s->matrix_out_ch[mat] = get_bits(gbp, 4);
778  frac_bits = get_bits(gbp, 4);
779  s->lsb_bypass [mat] = get_bits1(gbp);
780 
781  if (s->matrix_out_ch[mat] > s->max_matrix_channel) {
783  "Invalid channel %d specified as output from matrix.\n",
784  s->matrix_out_ch[mat]);
785  goto error;
786  }
787  if (frac_bits > 14) {
789  "Too many fractional bits specified.\n");
790  goto error;
791  }
792 
793  max_chan = s->max_matrix_channel;
794  if (!s->noise_type)
795  max_chan+=2;
796 
797  for (ch = 0; ch <= max_chan; ch++) {
798  int coeff_val = 0;
799  if (get_bits1(gbp))
800  coeff_val = get_sbits(gbp, frac_bits + 2);
801 
802  s->matrix_coeff[mat][ch] = coeff_val * (1 << (14 - frac_bits));
803  }
804 
805  if (s->noise_type)
806  s->matrix_noise_shift[mat] = get_bits(gbp, 4);
807  else
808  s->matrix_noise_shift[mat] = 0;
809  }
810 
811  return 0;
812 error:
813  s->num_primitive_matrices = 0;
814  memset(s->matrix_out_ch, 0, sizeof(s->matrix_out_ch));
815 
816  return AVERROR_INVALIDDATA;
817 }
818 
819 /** Read channel parameters. */
820 
821 static int read_channel_params(MLPDecodeContext *m, unsigned int substr,
822  GetBitContext *gbp, unsigned int ch)
823 {
824  SubStream *s = &m->substream[substr];
825  ChannelParams *cp = &s->channel_params[ch];
826  FilterParams *fir = &cp->filter_params[FIR];
827  FilterParams *iir = &cp->filter_params[IIR];
828  int ret;
829 
830  if (s->param_presence_flags & PARAM_FIR)
831  if (get_bits1(gbp))
832  if ((ret = read_filter_params(m, gbp, substr, ch, FIR)) < 0)
833  return ret;
834 
835  if (s->param_presence_flags & PARAM_IIR)
836  if (get_bits1(gbp))
837  if ((ret = read_filter_params(m, gbp, substr, ch, IIR)) < 0)
838  return ret;
839 
840  if (fir->order + iir->order > 8) {
841  av_log(m->avctx, AV_LOG_ERROR, "Total filter orders too high.\n");
842  return AVERROR_INVALIDDATA;
843  }
844 
845  if (fir->order && iir->order &&
846  fir->shift != iir->shift) {
848  "FIR and IIR filters must use the same precision.\n");
849  return AVERROR_INVALIDDATA;
850  }
851  /* The FIR and IIR filters must have the same precision.
852  * To simplify the filtering code, only the precision of the
853  * FIR filter is considered. If only the IIR filter is employed,
854  * the FIR filter precision is set to that of the IIR filter, so
855  * that the filtering code can use it. */
856  if (!fir->order && iir->order)
857  fir->shift = iir->shift;
858 
859  if (s->param_presence_flags & PARAM_HUFFOFFSET)
860  if (get_bits1(gbp))
861  cp->huff_offset = get_sbits(gbp, 15);
862 
863  cp->codebook = get_bits(gbp, 2);
864  cp->huff_lsbs = get_bits(gbp, 5);
865 
866  if (cp->codebook > 0 && cp->huff_lsbs > 24) {
867  av_log(m->avctx, AV_LOG_ERROR, "Invalid huff_lsbs.\n");
868  cp->huff_lsbs = 0;
869  return AVERROR_INVALIDDATA;
870  }
871 
872  return 0;
873 }
874 
875 /** Read decoding parameters that change more often than those in the restart
876  * header. */
877 
879  unsigned int substr)
880 {
881  SubStream *s = &m->substream[substr];
882  unsigned int ch;
883  int ret = 0;
884  unsigned recompute_sho = 0;
885 
886  if (s->param_presence_flags & PARAM_PRESENCE)
887  if (get_bits1(gbp))
888  s->param_presence_flags = get_bits(gbp, 8);
889 
890  if (s->param_presence_flags & PARAM_BLOCKSIZE)
891  if (get_bits1(gbp)) {
892  s->blocksize = get_bits(gbp, 9);
893  if (s->blocksize < 8 || s->blocksize > m->access_unit_size) {
894  av_log(m->avctx, AV_LOG_ERROR, "Invalid blocksize.\n");
895  s->blocksize = 0;
896  return AVERROR_INVALIDDATA;
897  }
898  }
899 
900  if (s->param_presence_flags & PARAM_MATRIX)
901  if (get_bits1(gbp))
902  if ((ret = read_matrix_params(m, substr, gbp)) < 0)
903  return ret;
904 
905  if (s->param_presence_flags & PARAM_OUTSHIFT)
906  if (get_bits1(gbp)) {
907  for (ch = 0; ch <= s->max_matrix_channel; ch++) {
908  s->output_shift[ch] = get_sbits(gbp, 4);
909  if (s->output_shift[ch] < 0) {
910  avpriv_request_sample(m->avctx, "Negative output_shift");
911  s->output_shift[ch] = 0;
912  }
913  }
914  if (substr == m->max_decoded_substream)
915  m->dsp.mlp_pack_output = m->dsp.mlp_select_pack_output(s->ch_assign,
916  s->output_shift,
917  s->max_matrix_channel,
919  }
920 
921  if (s->param_presence_flags & PARAM_QUANTSTEP)
922  if (get_bits1(gbp))
923  for (ch = 0; ch <= s->max_channel; ch++) {
924  s->quant_step_size[ch] = get_bits(gbp, 4);
925 
926  recompute_sho |= 1<<ch;
927  }
928 
929  for (ch = s->min_channel; ch <= s->max_channel; ch++)
930  if (get_bits1(gbp)) {
931  recompute_sho |= 1<<ch;
932  if ((ret = read_channel_params(m, substr, gbp, ch)) < 0)
933  goto fail;
934  }
935 
936 
937 fail:
938  for (ch = 0; ch <= s->max_channel; ch++) {
939  if (recompute_sho & (1<<ch)) {
940  ChannelParams *cp = &s->channel_params[ch];
941 
942  if (cp->codebook > 0 && cp->huff_lsbs < s->quant_step_size[ch]) {
943  if (ret >= 0) {
944  av_log(m->avctx, AV_LOG_ERROR, "quant_step_size larger than huff_lsbs\n");
946  }
947  s->quant_step_size[ch] = 0;
948  }
949 
950  cp->sign_huff_offset = calculate_sign_huff(m, substr, ch);
951  }
952  }
953  return ret;
954 }
955 
956 #define MSB_MASK(bits) (-(1 << (bits)))
957 
958 /** Generate PCM samples using the prediction filters and residual values
959  * read from the data stream, and update the filter state. */
960 
961 static void filter_channel(MLPDecodeContext *m, unsigned int substr,
962  unsigned int channel)
963 {
964  SubStream *s = &m->substream[substr];
965  const int32_t *fircoeff = s->channel_params[channel].coeff[FIR];
967  int32_t *firbuf = state_buffer[FIR] + MAX_BLOCKSIZE;
968  int32_t *iirbuf = state_buffer[IIR] + MAX_BLOCKSIZE;
969  FilterParams *fir = &s->channel_params[channel].filter_params[FIR];
970  FilterParams *iir = &s->channel_params[channel].filter_params[IIR];
971  unsigned int filter_shift = fir->shift;
972  int32_t mask = MSB_MASK(s->quant_step_size[channel]);
973 
974  memcpy(firbuf, fir->state, MAX_FIR_ORDER * sizeof(int32_t));
975  memcpy(iirbuf, iir->state, MAX_IIR_ORDER * sizeof(int32_t));
976 
977  m->dsp.mlp_filter_channel(firbuf, fircoeff,
978  fir->order, iir->order,
979  filter_shift, mask, s->blocksize,
980  &m->sample_buffer[s->blockpos][channel]);
981 
982  memcpy(fir->state, firbuf - s->blocksize, MAX_FIR_ORDER * sizeof(int32_t));
983  memcpy(iir->state, iirbuf - s->blocksize, MAX_IIR_ORDER * sizeof(int32_t));
984 }
985 
986 /** Read a block of PCM residual data (or actual if no filtering active). */
987 
989  unsigned int substr)
990 {
991  SubStream *s = &m->substream[substr];
992  unsigned int i, ch, expected_stream_pos = 0;
993  int ret;
994 
995  if (s->data_check_present) {
996  expected_stream_pos = get_bits_count(gbp);
997  expected_stream_pos += get_bits(gbp, 16);
999  "Substreams with VLC block size check info");
1000  }
1001 
1002  if (s->blockpos + s->blocksize > m->access_unit_size) {
1003  av_log(m->avctx, AV_LOG_ERROR, "too many audio samples in frame\n");
1004  return AVERROR_INVALIDDATA;
1005  }
1006 
1007  memset(&m->bypassed_lsbs[s->blockpos][0], 0,
1008  s->blocksize * sizeof(m->bypassed_lsbs[0]));
1009 
1010  for (i = 0; i < s->blocksize; i++)
1011  if ((ret = read_huff_channels(m, gbp, substr, i)) < 0)
1012  return ret;
1013 
1014  for (ch = s->min_channel; ch <= s->max_channel; ch++)
1015  filter_channel(m, substr, ch);
1016 
1017  s->blockpos += s->blocksize;
1018 
1019  if (s->data_check_present) {
1020  if (get_bits_count(gbp) != expected_stream_pos)
1021  av_log(m->avctx, AV_LOG_ERROR, "block data length mismatch\n");
1022  skip_bits(gbp, 8);
1023  }
1024 
1025  return 0;
1026 }
1027 
1028 /** Data table used for TrueHD noise generation function. */
1029 
1030 static const int8_t noise_table[256] = {
1031  30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
1032  52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
1033  10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
1034  51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
1035  38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
1036  61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
1037  67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
1038  48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
1039  0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
1040  16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
1041  13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
1042  89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
1043  36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
1044  39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
1045  45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
1046  -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
1047 };
1048 
1049 /** Noise generation functions.
1050  * I'm not sure what these are for - they seem to be some kind of pseudorandom
1051  * sequence generators, used to generate noise data which is used when the
1052  * channels are rematrixed. I'm not sure if they provide a practical benefit
1053  * to compression, or just obfuscate the decoder. Are they for some kind of
1054  * dithering? */
1055 
1056 /** Generate two channels of noise, used in the matrix when
1057  * restart sync word == 0x31ea. */
1058 
1059 static void generate_2_noise_channels(MLPDecodeContext *m, unsigned int substr)
1060 {
1061  SubStream *s = &m->substream[substr];
1062  unsigned int i;
1063  uint32_t seed = s->noisegen_seed;
1064  unsigned int maxchan = s->max_matrix_channel;
1065 
1066  for (i = 0; i < s->blockpos; i++) {
1067  uint16_t seed_shr7 = seed >> 7;
1068  m->sample_buffer[i][maxchan+1] = ((int8_t)(seed >> 15)) * (1 << s->noise_shift);
1069  m->sample_buffer[i][maxchan+2] = ((int8_t) seed_shr7) * (1 << s->noise_shift);
1070 
1071  seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
1072  }
1073 
1074  s->noisegen_seed = seed;
1075 }
1076 
1077 /** Generate a block of noise, used when restart sync word == 0x31eb. */
1078 
1079 static void fill_noise_buffer(MLPDecodeContext *m, unsigned int substr)
1080 {
1081  SubStream *s = &m->substream[substr];
1082  unsigned int i;
1083  uint32_t seed = s->noisegen_seed;
1084 
1085  for (i = 0; i < m->access_unit_size_pow2; i++) {
1086  uint8_t seed_shr15 = seed >> 15;
1087  m->noise_buffer[i] = noise_table[seed_shr15];
1088  seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
1089  }
1090 
1091  s->noisegen_seed = seed;
1092 }
1093 
1094 /** Write the audio data into the output buffer. */
1095 
1096 static int output_data(MLPDecodeContext *m, unsigned int substr,
1097  AVFrame *frame, int *got_frame_ptr)
1098 {
1099  AVCodecContext *avctx = m->avctx;
1100  SubStream *s = &m->substream[substr];
1101  unsigned int mat;
1102  unsigned int maxchan;
1103  int ret;
1104  int is32 = (m->avctx->sample_fmt == AV_SAMPLE_FMT_S32);
1105 
1106  if (m->avctx->ch_layout.nb_channels != s->max_matrix_channel + 1) {
1107  av_log(m->avctx, AV_LOG_ERROR, "channel count mismatch\n");
1108  return AVERROR_INVALIDDATA;
1109  }
1110 
1111  if (!s->blockpos) {
1112  av_log(avctx, AV_LOG_ERROR, "No samples to output.\n");
1113  return AVERROR_INVALIDDATA;
1114  }
1115 
1116  maxchan = s->max_matrix_channel;
1117  if (!s->noise_type) {
1118  generate_2_noise_channels(m, substr);
1119  maxchan += 2;
1120  } else {
1121  fill_noise_buffer(m, substr);
1122  }
1123 
1124  /* Apply the channel matrices in turn to reconstruct the original audio
1125  * samples. */
1126  for (mat = 0; mat < s->num_primitive_matrices; mat++) {
1127  unsigned int dest_ch = s->matrix_out_ch[mat];
1128  m->dsp.mlp_rematrix_channel(&m->sample_buffer[0][0],
1129  s->matrix_coeff[mat],
1130  &m->bypassed_lsbs[0][mat],
1131  m->noise_buffer,
1132  s->num_primitive_matrices - mat,
1133  dest_ch,
1134  s->blockpos,
1135  maxchan,
1136  s->matrix_noise_shift[mat],
1138  MSB_MASK(s->quant_step_size[dest_ch]));
1139  }
1140 
1141  /* get output buffer */
1142  frame->nb_samples = s->blockpos;
1143  if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
1144  return ret;
1145  s->lossless_check_data = m->dsp.mlp_pack_output(s->lossless_check_data,
1146  s->blockpos,
1147  m->sample_buffer,
1148  frame->data[0],
1149  s->ch_assign,
1150  s->output_shift,
1151  s->max_matrix_channel,
1152  is32);
1153 
1154  /* Update matrix encoding side data */
1155  if (s->matrix_encoding != s->prev_matrix_encoding) {
1156  if ((ret = ff_side_data_update_matrix_encoding(frame, s->matrix_encoding)) < 0)
1157  return ret;
1158 
1159  s->prev_matrix_encoding = s->matrix_encoding;
1160  }
1161 
1162  *got_frame_ptr = 1;
1163 
1164  return 0;
1165 }
1166 
1167 /** Read an access unit from the stream.
1168  * @return negative on error, 0 if not enough data is present in the input stream,
1169  * otherwise the number of bytes consumed. */
1170 
1172  int *got_frame_ptr, AVPacket *avpkt)
1173 {
1174  const uint8_t *buf = avpkt->data;
1175  int buf_size = avpkt->size;
1176  MLPDecodeContext *m = avctx->priv_data;
1177  GetBitContext gb;
1178  unsigned int length, substr;
1179  unsigned int substream_start;
1180  unsigned int header_size = 4;
1181  unsigned int substr_header_size = 0;
1182  uint8_t substream_parity_present[MAX_SUBSTREAMS];
1183  uint16_t substream_data_len[MAX_SUBSTREAMS];
1184  uint8_t parity_bits;
1185  int ret;
1186 
1187  if (buf_size < 4)
1188  return AVERROR_INVALIDDATA;
1189 
1190  length = (AV_RB16(buf) & 0xfff) * 2;
1191 
1192  if (length < 4 || length > buf_size)
1193  return AVERROR_INVALIDDATA;
1194 
1195  init_get_bits(&gb, (buf + 4), (length - 4) * 8);
1196 
1197  m->is_major_sync_unit = 0;
1198  if (show_bits_long(&gb, 31) == (0xf8726fba >> 1)) {
1199  if (read_major_sync(m, &gb) < 0)
1200  goto error;
1201  m->is_major_sync_unit = 1;
1202  header_size += m->major_sync_header_size;
1203  }
1204 
1205  if (!m->params_valid) {
1207  "Stream parameters not seen; skipping frame.\n");
1208  *got_frame_ptr = 0;
1209  return length;
1210  }
1211 
1212  substream_start = 0;
1213 
1214  for (substr = 0; substr < m->num_substreams; substr++) {
1215  int extraword_present, checkdata_present, end, nonrestart_substr;
1216 
1217  extraword_present = get_bits1(&gb);
1218  nonrestart_substr = get_bits1(&gb);
1219  checkdata_present = get_bits1(&gb);
1220  skip_bits1(&gb);
1221 
1222  end = get_bits(&gb, 12) * 2;
1223 
1224  substr_header_size += 2;
1225 
1226  if (extraword_present) {
1227  if (m->avctx->codec_id == AV_CODEC_ID_MLP) {
1228  av_log(m->avctx, AV_LOG_ERROR, "There must be no extraword for MLP.\n");
1229  goto error;
1230  }
1231  skip_bits(&gb, 16);
1232  substr_header_size += 2;
1233  }
1234 
1235  if (length < header_size + substr_header_size) {
1236  av_log(m->avctx, AV_LOG_ERROR, "Insufficient data for headers\n");
1237  goto error;
1238  }
1239 
1240  if (!(nonrestart_substr ^ m->is_major_sync_unit)) {
1241  av_log(m->avctx, AV_LOG_ERROR, "Invalid nonrestart_substr.\n");
1242  goto error;
1243  }
1244 
1245  if (end + header_size + substr_header_size > length) {
1247  "Indicated length of substream %d data goes off end of "
1248  "packet.\n", substr);
1249  end = length - header_size - substr_header_size;
1250  }
1251 
1252  if (end < substream_start) {
1253  av_log(avctx, AV_LOG_ERROR,
1254  "Indicated end offset of substream %d data "
1255  "is smaller than calculated start offset.\n",
1256  substr);
1257  goto error;
1258  }
1259 
1260  if (substr > m->max_decoded_substream)
1261  continue;
1262 
1263  substream_parity_present[substr] = checkdata_present;
1264  substream_data_len[substr] = end - substream_start;
1265  substream_start = end;
1266  }
1267 
1268  parity_bits = ff_mlp_calculate_parity(buf, 4);
1269  parity_bits ^= ff_mlp_calculate_parity(buf + header_size, substr_header_size);
1270 
1271  if ((((parity_bits >> 4) ^ parity_bits) & 0xF) != 0xF) {
1272  av_log(avctx, AV_LOG_ERROR, "Parity check failed.\n");
1273  goto error;
1274  }
1275 
1276  buf += header_size + substr_header_size;
1277 
1278  for (substr = 0; substr <= m->max_decoded_substream; substr++) {
1279  SubStream *s = &m->substream[substr];
1280 
1281  init_get_bits(&gb, buf, substream_data_len[substr] * 8);
1282 
1283  m->matrix_changed = 0;
1284  memset(m->filter_changed, 0, sizeof(m->filter_changed));
1285 
1286  s->blockpos = 0;
1287  do {
1288  if (get_bits1(&gb)) {
1289  if (get_bits1(&gb)) {
1290  /* A restart header should be present. */
1291  if (read_restart_header(m, &gb, buf, substr) < 0)
1292  goto next_substr;
1293  s->restart_seen = 1;
1294  }
1295 
1296  if (!s->restart_seen)
1297  goto next_substr;
1298  if (read_decoding_params(m, &gb, substr) < 0)
1299  goto next_substr;
1300  }
1301 
1302  if (!s->restart_seen)
1303  goto next_substr;
1304 
1305  if (((avctx->ch_layout.nb_channels == 6 &&
1306  ((m->substream_info >> 2) & 0x3) != 0x3) ||
1307  (avctx->ch_layout.nb_channels == 8 &&
1308  ((m->substream_info >> 4) & 0x7) != 0x7 &&
1309  ((m->substream_info >> 4) & 0x7) != 0x6 &&
1310  ((m->substream_info >> 4) & 0x7) != 0x3)) &&
1311  substr > 0 && substr < m->max_decoded_substream &&
1312  (s->min_channel <= m->substream[substr - 1].max_channel)) {
1313  av_log(avctx, AV_LOG_DEBUG,
1314  "Previous substream(%d) channels overlaps current substream(%d) channels, skipping.\n",
1315  substr - 1, substr);
1316  goto next_substr;
1317  }
1318 
1319  if (substr != m->max_decoded_substream &&
1320  ((s->coded_channels & m->substream[m->max_decoded_substream].coded_channels) != 0)) {
1321  av_log(avctx, AV_LOG_DEBUG,
1322  "Current substream(%d) channels overlaps final substream(%d) channels, skipping.\n",
1323  substr, m->max_decoded_substream);
1324  goto next_substr;
1325  }
1326 
1327  if ((ret = read_block_data(m, &gb, substr)) < 0)
1328  return ret;
1329 
1330  if (get_bits_count(&gb) >= substream_data_len[substr] * 8)
1331  goto substream_length_mismatch;
1332 
1333  } while (!get_bits1(&gb));
1334 
1335  skip_bits(&gb, (-get_bits_count(&gb)) & 15);
1336 
1337  if (substream_data_len[substr] * 8 - get_bits_count(&gb) >= 32) {
1338  int shorten_by;
1339 
1340  if (get_bits(&gb, 16) != 0xD234)
1341  return AVERROR_INVALIDDATA;
1342 
1343  shorten_by = get_bits(&gb, 16);
1344  if (m->avctx->codec_id == AV_CODEC_ID_TRUEHD && shorten_by & 0x2000)
1345  s->blockpos -= FFMIN(shorten_by & 0x1FFF, s->blockpos);
1346  else if (m->avctx->codec_id == AV_CODEC_ID_MLP && shorten_by != 0xD234)
1347  return AVERROR_INVALIDDATA;
1348 
1349  av_log(m->avctx, AV_LOG_DEBUG, "End of stream indicated.\n");
1350  s->end_of_stream = 1;
1351  }
1352 
1353  if (substream_parity_present[substr]) {
1354  uint8_t parity, checksum;
1355 
1356  if (substream_data_len[substr] * 8 - get_bits_count(&gb) != 16)
1357  goto substream_length_mismatch;
1358 
1359  parity = ff_mlp_calculate_parity(buf, substream_data_len[substr] - 2);
1360  checksum = ff_mlp_checksum8 (buf, substream_data_len[substr] - 2);
1361 
1362  if ((get_bits(&gb, 8) ^ parity) != 0xa9 )
1363  av_log(m->avctx, AV_LOG_ERROR, "Substream %d parity check failed.\n", substr);
1364  if ( get_bits(&gb, 8) != checksum)
1365  av_log(m->avctx, AV_LOG_ERROR, "Substream %d checksum failed.\n" , substr);
1366  }
1367 
1368  if (substream_data_len[substr] * 8 != get_bits_count(&gb))
1369  goto substream_length_mismatch;
1370 
1371 next_substr:
1372  if (!s->restart_seen)
1374  "No restart header present in substream %d.\n", substr);
1375 
1376  buf += substream_data_len[substr];
1377  }
1378 
1379  if ((ret = output_data(m, m->max_decoded_substream, frame, got_frame_ptr)) < 0)
1380  return ret;
1381 
1382  for (substr = 0; substr <= m->max_decoded_substream; substr++){
1383  SubStream *s = &m->substream[substr];
1384 
1385  if (s->end_of_stream) {
1386  s->lossless_check_data = 0xffffffff;
1387  s->end_of_stream = 0;
1388  m->params_valid = 0;
1389  }
1390  }
1391 
1392  return length;
1393 
1394 substream_length_mismatch:
1395  av_log(m->avctx, AV_LOG_ERROR, "substream %d length mismatch\n", substr);
1396  return AVERROR_INVALIDDATA;
1397 
1398 error:
1399  m->params_valid = 0;
1400  return AVERROR_INVALIDDATA;
1401 }
1402 
1404 {
1405  MLPDecodeContext *m = avctx->priv_data;
1406 
1407  m->params_valid = 0;
1408  for (int substr = 0; substr <= m->max_decoded_substream; substr++){
1409  SubStream *s = &m->substream[substr];
1410 
1411  s->lossless_check_data = 0xffffffff;
1412  s->prev_matrix_encoding = 0;
1413  }
1414 }
1415 
1416 #define OFFSET(x) offsetof(MLPDecodeContext, x)
1417 #define FLAGS (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM)
1418 static const AVOption options[] = {
1419  { "downmix", "Request a specific channel layout from the decoder", OFFSET(downmix_layout),
1420  AV_OPT_TYPE_CHLAYOUT, {.str = NULL}, .flags = FLAGS },
1421  { NULL },
1422 };
1423 
1424 static const AVClass mlp_decoder_class = {
1425  .class_name = "MLP decoder",
1426  .item_name = av_default_item_name,
1427  .option = options,
1428  .version = LIBAVUTIL_VERSION_INT,
1429 };
1430 
1432  .class_name = "TrueHD decoder",
1433  .item_name = av_default_item_name,
1434  .option = options,
1435  .version = LIBAVUTIL_VERSION_INT,
1436 };
1437 
1438 #if CONFIG_MLP_DECODER
1439 const FFCodec ff_mlp_decoder = {
1440  .p.name = "mlp",
1441  CODEC_LONG_NAME("MLP (Meridian Lossless Packing)"),
1442  .p.type = AVMEDIA_TYPE_AUDIO,
1443  .p.id = AV_CODEC_ID_MLP,
1444  .priv_data_size = sizeof(MLPDecodeContext),
1445  .p.priv_class = &mlp_decoder_class,
1446  .init = mlp_decode_init,
1448  .flush = mlp_decode_flush,
1449  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
1450 };
1451 #endif
1452 #if CONFIG_TRUEHD_DECODER
1453 const FFCodec ff_truehd_decoder = {
1454  .p.name = "truehd",
1455  CODEC_LONG_NAME("TrueHD"),
1456  .p.type = AVMEDIA_TYPE_AUDIO,
1457  .p.id = AV_CODEC_ID_TRUEHD,
1458  .priv_data_size = sizeof(MLPDecodeContext),
1459  .p.priv_class = &truehd_decoder_class,
1460  .init = mlp_decode_init,
1462  .flush = mlp_decode_flush,
1463  .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_CHANNEL_CONF,
1465 };
1466 #endif /* CONFIG_TRUEHD_DECODER */
MLPDecodeContext::params_valid
uint8_t params_valid
Set if a valid major sync block has been read. Otherwise no decoding is possible.
Definition: mlpdec.c:152
error
static void error(const char *err)
Definition: target_bsf_fuzzer.c:31
AVCodecContext::frame_size
int frame_size
Number of samples per channel in an audio frame.
Definition: avcodec.h:1088
PARAM_QUANTSTEP
#define PARAM_QUANTSTEP
Definition: mlpdec.c:99
FF_ENABLE_DEPRECATION_WARNINGS
#define FF_ENABLE_DEPRECATION_WARNINGS
Definition: internal.h:73
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:186
noise_table
static const int8_t noise_table[256]
Data table used for TrueHD noise generation function.
Definition: mlpdec.c:1030
AV_CH_LAYOUT_5POINT0_BACK
#define AV_CH_LAYOUT_5POINT0_BACK
Definition: channel_layout.h:222
show_bits_long
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
Definition: get_bits.h:495
ChannelParams::codebook
uint8_t codebook
Which VLC codebook to use to read residuals.
Definition: mlp.h:94
opt.h
PARAM_IIR
#define PARAM_IIR
Definition: mlpdec.c:101
xor_32_to_8
static uint8_t xor_32_to_8(uint32_t value)
XOR four bytes into one.
Definition: mlp.h:166
SubStream::matrix_coeff
int32_t matrix_coeff[MAX_MATRICES][MAX_CHANNELS]
Matrix coefficients, stored as 2.14 fixed point.
Definition: mlpdec.c:118
mem_internal.h
SubStream::prev_matrix_encoding
enum AVMatrixEncoding prev_matrix_encoding
Definition: mlpdec.c:81
AVCodecContext::sample_rate
int sample_rate
samples per second
Definition: avcodec.h:1060
av_popcount64
#define av_popcount64
Definition: common.h:153
FLAGS
#define FLAGS
Definition: mlpdec.c:1417
thread.h
SubStream::end_of_stream
uint8_t end_of_stream
Set if end of stream is encountered.
Definition: mlpdec.c:60
AV_CHAN_WIDE_LEFT
@ AV_CHAN_WIDE_LEFT
Definition: channel_layout.h:72
AV_CH_LAYOUT_MONO
#define AV_CH_LAYOUT_MONO
Definition: channel_layout.h:210
get_bits_long
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
Definition: get_bits.h:421
SubStream::output_shift
int8_t output_shift[MAX_CHANNELS]
Left shift to apply to decoded PCM values to get final 24-bit output.
Definition: mlpdec.c:132
THD_CH_MODIFIER_SURROUNDEX
@ THD_CH_MODIFIER_SURROUNDEX
Definition: mlp.h:180
get_bits_count
static int get_bits_count(const GetBitContext *s)
Definition: get_bits.h:266
read_decoding_params
static int read_decoding_params(MLPDecodeContext *m, GetBitContext *gbp, unsigned int substr)
Read decoding parameters that change more often than those in the restart header.
Definition: mlpdec.c:878
MAX_SAMPLERATE
#define MAX_SAMPLERATE
maximum sample frequency seen in files
Definition: mlp.h:56
init_static
static av_cold void init_static(void)
Initialize static data, constant between all invocations of the codec.
Definition: mlpdec.c:227
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:340
tmp
static uint8_t tmp[11]
Definition: aes_ctr.c:28
AVPacket::data
uint8_t * data
Definition: packet.h:374
ff_mlp_calculate_parity
uint8_t ff_mlp_calculate_parity(const uint8_t *buf, unsigned int buf_size)
XOR together all the bytes of a buffer.
Definition: mlp.c:133
AVOption
AVOption.
Definition: opt.h:251
mh
#define mh
Definition: vf_colormatrix.c:105
table
static const uint16_t table[]
Definition: prosumer.c:205
filter_channel
static void filter_channel(MLPDecodeContext *m, unsigned int substr, unsigned int channel)
Generate PCM samples using the prediction filters and residual values read from the data stream,...
Definition: mlpdec.c:961
SubStream::restart_seen
uint8_t restart_seen
Set if a valid restart header has been read. Otherwise the substream cannot be decoded.
Definition: mlpdec.c:58
FFCodec
Definition: codec_internal.h:127
output_data
static int output_data(MLPDecodeContext *m, unsigned int substr, AVFrame *frame, int *got_frame_ptr)
Write the audio data into the output buffer.
Definition: mlpdec.c:1096
SubStream::mask
uint64_t mask
The channel layout for this substream.
Definition: mlpdec.c:78
SubStream::min_channel
uint8_t min_channel
The index of the first channel coded in this substream.
Definition: mlpdec.c:68
MLPDecodeContext::major_sync_header_size
int major_sync_header_size
Size of the major sync unit, in bytes.
Definition: mlpdec.c:149
OFFSET
#define OFFSET(x)
Definition: mlpdec.c:1416
SubStream
Definition: mlpdec.c:56
filter
filter_frame For filters that do not use the this method is called when a frame is pushed to the filter s input It can be called at any time except in a reentrant way If the input frame is enough to produce then the filter should push the output frames on the output link immediately As an exception to the previous rule if the input frame is enough to produce several output frames then the filter needs output only at least one per link The additional frames can be left buffered in the filter
Definition: filter_design.txt:228
AVChannelLayout::nb_channels
int nb_channels
Number of channels in this layout.
Definition: channel_layout.h:311
AV_CODEC_ID_TRUEHD
@ AV_CODEC_ID_TRUEHD
Definition: codec_id.h:486
ff_mlpdsp_init
av_cold void ff_mlpdsp_init(MLPDSPContext *c)
Definition: mlpdsp.c:128
init_get_bits
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
Definition: get_bits.h:514
SubStream::max_channel
uint8_t max_channel
The index of the last channel coded in this substream.
Definition: mlpdec.c:70
SubStream::ch_assign
uint8_t ch_assign[MAX_CHANNELS]
For each channel output by the matrix, the output channel to map it to.
Definition: mlpdec.c:76
MLPDSPContext::mlp_pack_output
int32_t(* mlp_pack_output)(int32_t lossless_check_data, uint16_t blockpos, int32_t(*sample_buffer)[MAX_CHANNELS], void *data, uint8_t *ch_assign, int8_t *output_shift, uint8_t max_matrix_channel, int is32)
Definition: mlpdsp.h:69
skip_bits
static void skip_bits(GetBitContext *s, int n)
Definition: get_bits.h:381
MLPDecodeContext::substream_info
uint8_t substream_info
Which substream of substreams carry 2/6/8-channel presentation.
Definition: mlpdec.c:161
get_bits
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
Definition: get_bits.h:335
AV_CHAN_SURROUND_DIRECT_LEFT
@ AV_CHAN_SURROUND_DIRECT_LEFT
Definition: channel_layout.h:74
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
ChannelParams::filter_params
FilterParams filter_params[NUM_FILTERS]
Definition: mlp.h:89
ff_mlp_checksum8
uint8_t ff_mlp_checksum8(const uint8_t *buf, unsigned int buf_size)
MLP uses checksums that seem to be based on the standard CRC algorithm, but are not (in implementatio...
Definition: mlp.c:107
AVCodecContext::ch_layout
AVChannelLayout ch_layout
Audio channel layout.
Definition: avcodec.h:2101
fail
#define fail()
Definition: checkasm.h:138
MAX_MATRICES
#define MAX_MATRICES
Definition: mlp.h:46
ChannelParams::huff_lsbs
uint8_t huff_lsbs
Size of residual suffix not encoded using VLC.
Definition: mlp.h:95
GetBitContext
Definition: get_bits.h:108
MAX_IIR_ORDER
#define MAX_IIR_ORDER
Definition: mlp.h:68
SYNC_TRUEHD
#define SYNC_TRUEHD
Definition: mlp.h:30
AV_PROFILE_TRUEHD_ATMOS
#define AV_PROFILE_TRUEHD_ATMOS
Definition: defs.h:97
calculate_sign_huff
static int32_t calculate_sign_huff(MLPDecodeContext *m, unsigned int substr, unsigned int ch)
Definition: mlpdec.c:241
AV_CH_LAYOUT_STEREO
#define AV_CH_LAYOUT_STEREO
Definition: channel_layout.h:211
AV_CH_LAYOUT_QUAD
#define AV_CH_LAYOUT_QUAD
Definition: channel_layout.h:219
MAX_MATRICES_MLP
#define MAX_MATRICES_MLP
Maximum number of matrices used in decoding; most streams have one matrix per output channel,...
Definition: mlp.h:44
ff_thread_once
static int ff_thread_once(char *control, void(*routine)(void))
Definition: thread.h:203
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:180
MLPDecodeContext::needs_reordering
uint8_t needs_reordering
Stream needs channel reordering to comply with FFmpeg's channel order.
Definition: mlpdec.c:167
FIR
#define FIR
Definition: mlp.h:73
mlp_decoder_class
static const AVClass mlp_decoder_class
Definition: mlpdec.c:1424
FF_ARRAY_ELEMS
#define FF_ARRAY_ELEMS(a)
Definition: sinewin_tablegen.c:29
av_cold
#define av_cold
Definition: attributes.h:90
ff_side_data_update_matrix_encoding
int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding)
Add or update AV_FRAME_DATA_MATRIXENCODING side data.
Definition: utils.c:121
AV_MATRIX_ENCODING_DOLBY
@ AV_MATRIX_ENCODING_DOLBY
Definition: channel_layout.h:244
MLPDecodeContext::dsp
MLPDSPContext dsp
Definition: mlpdec.c:183
SubStream::channel_params
ChannelParams channel_params[MAX_CHANNELS]
Channel coding parameters for channels in the substream.
Definition: mlpdec.c:84
AV_CH_LOW_FREQUENCY
#define AV_CH_LOW_FREQUENCY
Definition: channel_layout.h:167
mask
static const uint16_t mask[17]
Definition: lzw.c:38
PARAM_MATRIX
#define PARAM_MATRIX
Definition: mlpdec.c:97
FF_CODEC_DECODE_CB
#define FF_CODEC_DECODE_CB(func)
Definition: codec_internal.h:306
intreadwrite.h
s
#define s(width, name)
Definition: cbs_vp9.c:198
PARAM_FIR
#define PARAM_FIR
Definition: mlpdec.c:100
MLPDecodeContext::matrix_changed
int matrix_changed
Definition: mlpdec.c:176
AVMEDIA_TYPE_AUDIO
@ AVMEDIA_TYPE_AUDIO
Definition: avutil.h:202
av_channel_layout_from_mask
FF_ENABLE_DEPRECATION_WARNINGS int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask)
Initialize a native channel layout from a bitmask indicating which channels are present.
Definition: channel_layout.c:395
MLPDSPContext::mlp_filter_channel
void(* mlp_filter_channel)(int32_t *state, const int32_t *coeff, int firorder, int iirorder, unsigned int filter_shift, int32_t mask, int blocksize, int32_t *sample_buffer)
Definition: mlpdsp.h:50
AV_CHAN_SIDE_RIGHT
@ AV_CHAN_SIDE_RIGHT
Definition: channel_layout.h:60
vlc_buf
static VLCElem vlc_buf[16716]
Definition: clearvideo.c:80
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:40
vlc_init
#define vlc_init(vlc, nb_bits, nb_codes, bits, bits_wrap, bits_size, codes, codes_wrap, codes_size, flags)
Definition: vlc.h:56
AVCodecContext::bits_per_raw_sample
int bits_per_raw_sample
Bits per sample/pixel of internal libavcodec pixel/sample format.
Definition: avcodec.h:1513
get_sbits
static int get_sbits(GetBitContext *s, int n)
Definition: get_bits.h:320
AV_LOG_DEBUG
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
Definition: log.h:201
decode.h
get_bits.h
THD_CH_MODIFIER_LTRT
@ THD_CH_MODIFIER_LTRT
Definition: mlp.h:176
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:272
MLPDSPContext::mlp_select_pack_output
int32_t(*(* mlp_select_pack_output)(uint8_t *ch_assign, int8_t *output_shift, uint8_t max_matrix_channel, int is32))(int32_t
Definition: mlpdsp.h:65
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:447
if
if(ret)
Definition: filter_design.txt:179
AVMatrixEncoding
AVMatrixEncoding
Definition: channel_layout.h:242
AV_MATRIX_ENCODING_DOLBYHEADPHONE
@ AV_MATRIX_ENCODING_DOLBYHEADPHONE
Definition: channel_layout.h:249
read_access_unit
static int read_access_unit(AVCodecContext *avctx, AVFrame *frame, int *got_frame_ptr, AVPacket *avpkt)
Read an access unit from the stream.
Definition: mlpdec.c:1171
LIBAVUTIL_VERSION_INT
#define LIBAVUTIL_VERSION_INT
Definition: version.h:85
AV_ONCE_INIT
#define AV_ONCE_INIT
Definition: thread.h:201
AVClass
Describe the class of an AVClass context structure.
Definition: log.h:66
result
and forward the result(frame or status change) to the corresponding input. If nothing is possible
NULL
#define NULL
Definition: coverity.c:32
AVERROR_PATCHWELCOME
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Definition: error.h:64
SubStream::lossless_check_data
int32_t lossless_check_data
Running XOR of all output samples.
Definition: mlpdec.c:135
MLPDecodeContext::bypassed_lsbs
int8_t bypassed_lsbs[MAX_BLOCKSIZE][MAX_CHANNELS]
Definition: mlpdec.c:180
SubStream::quant_step_size
uint8_t quant_step_size[MAX_CHANNELS]
Left shift to apply to Huffman-decoded residuals.
Definition: mlpdec.c:124
av_default_item_name
const char * av_default_item_name(void *ptr)
Return the context name.
Definition: log.c:237
get_bits1
static unsigned int get_bits1(GetBitContext *s)
Definition: get_bits.h:388
profiles.h
quant_step_size
static const float quant_step_size[]
Definition: hca_data.h:125
MLPDecodeContext::filter_changed
int filter_changed[MAX_CHANNELS][NUM_FILTERS]
Definition: mlpdec.c:177
AV_CHAN_TOP_CENTER
@ AV_CHAN_TOP_CENTER
Definition: channel_layout.h:61
AV_OPT_TYPE_CHLAYOUT
@ AV_OPT_TYPE_CHLAYOUT
Definition: opt.h:245
fp
#define fp
Definition: regdef.h:44
seed
static unsigned int seed
Definition: videogen.c:78
get_vlc2
static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table, int bits, int max_depth)
Parse a vlc code.
Definition: get_bits.h:652
AVOnce
#define AVOnce
Definition: thread.h:200
MLPDecodeContext::access_unit_size
int access_unit_size
number of PCM samples contained in each frame
Definition: mlpdec.c:170
index
int index
Definition: gxfenc.c:89
AV_CHAN_FRONT_RIGHT_OF_CENTER
@ AV_CHAN_FRONT_RIGHT_OF_CENTER
Definition: channel_layout.h:57
SubStream::max_matrix_channel
uint8_t max_matrix_channel
The number of channels input into the rematrix stage.
Definition: mlpdec.c:74
MLPDecodeContext::extended_substream_info
uint8_t extended_substream_info
Which substream of substreams carry 16-channel presentation.
Definition: mlpdec.c:158
THD_CH_MODIFIER_LBINRBIN
@ THD_CH_MODIFIER_LBINRBIN
Definition: mlp.h:177
AV_CHAN_FRONT_RIGHT
@ AV_CHAN_FRONT_RIGHT
Definition: channel_layout.h:51
AV_CHAN_FRONT_CENTER
@ AV_CHAN_FRONT_CENTER
Definition: channel_layout.h:52
AV_CODEC_CAP_CHANNEL_CONF
#define AV_CODEC_CAP_CHANNEL_CONF
Codec should fill in channel configuration and samplerate instead of container.
Definition: codec.h:106
FilterParams
filter data
Definition: mlp.h:77
VLC::table_allocated
int table_allocated
Definition: vlc.h:36
MLPDecodeContext::sample_buffer
int32_t sample_buffer[MAX_BLOCKSIZE][MAX_CHANNELS]
Definition: mlpdec.c:181
huff_vlc
static VLC huff_vlc[3]
Definition: mlpdec.c:223
ff_mlp_restart_checksum
uint8_t ff_mlp_restart_checksum(const uint8_t *buf, unsigned int bit_size)
Calculate an 8-bit checksum over a restart header – a non-multiple-of-8 number of bits,...
Definition: mlp.c:114
options
static const AVOption options[]
Definition: mlpdec.c:1418
thd_channel_order
static enum AVChannel thd_channel_order[]
Definition: mlpdec.c:186
ff_get_buffer
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
Definition: decode.c:1575
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AVPacket::size
int size
Definition: packet.h:375
MAX_MATRIX_CHANNEL_MLP
#define MAX_MATRIX_CHANNEL_MLP
Last possible matrix channel for each codec.
Definition: mlp.h:33
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:106
SubStream::noise_type
uint16_t noise_type
restart header data
Definition: mlpdec.c:65
AVChannelLayout
An AVChannelLayout holds information about the channel layout of audio data.
Definition: channel_layout.h:301
codec_internal.h
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:87
MLPDecodeContext::num_substreams
uint8_t num_substreams
Number of substreams contained within this stream.
Definition: mlpdec.c:155
MLPDecodeContext::avctx
AVCodecContext * avctx
Definition: mlpdec.c:141
MLPDecodeContext::substream
SubStream substream[MAX_SUBSTREAMS]
Definition: mlpdec.c:174
MSB_MASK
#define MSB_MASK(bits)
Definition: mlpdec.c:956
AV_MATRIX_ENCODING_NONE
@ AV_MATRIX_ENCODING_NONE
Definition: channel_layout.h:243
AVCodecContext::sample_fmt
enum AVSampleFormat sample_fmt
audio sample format
Definition: avcodec.h:1076
mlpdsp.h
AV_CHAN_LOW_FREQUENCY
@ AV_CHAN_LOW_FREQUENCY
Definition: channel_layout.h:53
MAX_SUBSTREAMS
#define MAX_SUBSTREAMS
Maximum number of substreams that can be decoded.
Definition: mlp.h:51
MLPDecodeContext::is_major_sync_unit
int is_major_sync_unit
Current access unit being read has a major sync.
Definition: mlpdec.c:146
MAX_MATRIX_CHANNEL_TRUEHD
#define MAX_MATRIX_CHANNEL_TRUEHD
Definition: mlp.h:34
mlp_decode_init
static av_cold int mlp_decode_init(AVCodecContext *avctx)
Definition: mlpdec.c:298
VLCElem
Definition: vlc.h:29
AV_CHAN_BACK_RIGHT
@ AV_CHAN_BACK_RIGHT
Definition: channel_layout.h:55
parity
mcdeint parity
Definition: vf_mcdeint.c:281
MAX_MATRICES_TRUEHD
#define MAX_MATRICES_TRUEHD
Definition: mlp.h:45
AV_CHAN_SIDE_LEFT
@ AV_CHAN_SIDE_LEFT
Definition: channel_layout.h:59
NUM_FILTERS
#define NUM_FILTERS
number of allowed filters
Definition: mlp.h:64
FilterParams::order
uint8_t order
number of taps in filter
Definition: mlp.h:78
MLPDecodeContext
Definition: mlpdec.c:139
ff_mlp_read_major_sync
int ff_mlp_read_major_sync(void *log, MLPHeaderInfo *mh, GetBitContext *gb)
Read a major sync info header - contains high level information about the stream - sample rate,...
Definition: mlp_parse.c:86
AV_CH_LAYOUT_5POINT1_BACK
#define AV_CH_LAYOUT_5POINT1_BACK
Definition: channel_layout.h:223
AV_CHAN_TOP_FRONT_RIGHT
@ AV_CHAN_TOP_FRONT_RIGHT
Definition: channel_layout.h:64
ChannelParams::huff_offset
int16_t huff_offset
Offset to apply to residual values.
Definition: mlp.h:92
skip_bits1
static void skip_bits1(GetBitContext *s)
Definition: get_bits.h:413
MLPDecodeContext::downmix_layout
AVChannelLayout downmix_layout
Definition: mlpdec.c:143
SubStream::noisegen_seed
uint32_t noisegen_seed
The current seed value for the pseudorandom noise generator(s).
Definition: mlpdec.c:89
AV_CHAN_FRONT_LEFT_OF_CENTER
@ AV_CHAN_FRONT_LEFT_OF_CENTER
Definition: channel_layout.h:56
MLPDecodeContext::max_decoded_substream
uint8_t max_decoded_substream
Index of the last substream to decode - further substreams are skipped.
Definition: mlpdec.c:164
SubStream::lsb_bypass
uint8_t lsb_bypass[MAX_MATRICES]
Whether the LSBs of the matrix output are encoded in the bitstream.
Definition: mlpdec.c:116
ff_mlp_decoder
const FFCodec ff_mlp_decoder
SubStream::matrix_out_ch
uint8_t matrix_out_ch[MAX_MATRICES]
matrix output channel
Definition: mlpdec.c:113
MAX_CHANNELS
#define MAX_CHANNELS
Definition: aac.h:46
MAX_FIR_ORDER
#define MAX_FIR_ORDER
The maximum number of taps in IIR and FIR filters.
Definition: mlp.h:67
MLPDSPContext::mlp_rematrix_channel
void(* mlp_rematrix_channel)(int32_t *samples, const int32_t *coeffs, const uint8_t *bypassed_lsbs, const int8_t *noise_buffer, int index, unsigned int dest_ch, uint16_t blockpos, unsigned int maxchan, int matrix_noise_shift, int access_unit_size_pow2, int32_t mask)
Definition: mlpdsp.h:54
layout
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel layout
Definition: filter_design.txt:18
AVChannel
AVChannel
Definition: channel_layout.h:47
read_restart_header
static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp, const uint8_t *buf, unsigned int substr)
Read a restart header from a block in a substream.
Definition: mlpdec.c:514
mlp_parse.h
SubStream::coded_channels
uint64_t coded_channels
The coded channels mask in this substream.
Definition: mlpdec.c:72
AV_CHAN_SURROUND_DIRECT_RIGHT
@ AV_CHAN_SURROUND_DIRECT_RIGHT
Definition: channel_layout.h:75
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:244
SubStream::blockpos
uint16_t blockpos
Number of PCM samples decoded so far in this frame.
Definition: mlpdec.c:129
SubStream::noise_shift
uint8_t noise_shift
The left shift applied to random noise in 0x31ea substreams.
Definition: mlpdec.c:87
SubStream::blocksize
uint16_t blocksize
number of PCM samples in current audio block
Definition: mlpdec.c:127
internal.h
FFMIN
#define FFMIN(a, b)
Definition: macros.h:49
MLPHeaderInfo
Definition: mlp_parse.h:30
AV_SAMPLE_FMT_S16
@ AV_SAMPLE_FMT_S16
signed 16 bits
Definition: samplefmt.h:58
read_channel_params
static int read_channel_params(MLPDecodeContext *m, unsigned int substr, GetBitContext *gbp, unsigned int ch)
Read channel parameters.
Definition: mlpdec.c:821
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:194
ChannelParams
sample data coding information
Definition: mlp.h:88
AV_CH_SIDE_RIGHT
#define AV_CH_SIDE_RIGHT
Definition: channel_layout.h:174
MAX_BLOCKSIZE
#define MAX_BLOCKSIZE
Definition: diracdec.c:54
fill_noise_buffer
static void fill_noise_buffer(MLPDecodeContext *m, unsigned int substr)
Generate a block of noise, used when restart sync word == 0x31eb.
Definition: mlpdec.c:1079
ff_mlp_init_crc
av_cold void ff_mlp_init_crc(void)
Definition: mlp.c:92
ChannelParams::sign_huff_offset
int32_t sign_huff_offset
sign/rounding-corrected version of huff_offset
Definition: mlp.h:93
mlp_channel_layout_subset
static int mlp_channel_layout_subset(AVChannelLayout *layout, uint64_t mask)
Definition: mlpdec.c:202
MLPDecodeContext::access_unit_size_pow2
int access_unit_size_pow2
next power of two above the number of samples in each frame
Definition: mlpdec.c:172
thd_channel_layout_extract_channel
static enum AVChannel thd_channel_layout_extract_channel(uint64_t channel_layout, int index)
Definition: mlpdec.c:209
avcodec.h
PARAM_HUFFOFFSET
#define PARAM_HUFFOFFSET
Definition: mlpdec.c:102
ret
ret
Definition: filter_design.txt:187
FFSWAP
#define FFSWAP(type, a, b)
Definition: macros.h:52
AVClass::class_name
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
Definition: log.h:71
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
mlp_decode_flush
static void mlp_decode_flush(AVCodecContext *avctx)
Definition: mlpdec.c:1403
ff_truehd_decoder
const FFCodec ff_truehd_decoder
SubStream::num_primitive_matrices
uint8_t num_primitive_matrices
matrix data
Definition: mlpdec.c:110
av_channel_layout_check
int av_channel_layout_check(const AVChannelLayout *channel_layout)
Check whether a channel layout is valid, i.e.
Definition: channel_layout.c:912
pos
unsigned int pos
Definition: spdifenc.c:413
FilterParams::state
int32_t state[MAX_FIR_ORDER]
Definition: mlp.h:81
SYNC_MLP
#define SYNC_MLP
Definition: mlp.h:29
PARAM_PRESENCE
#define PARAM_PRESENCE
Definition: mlpdec.c:103
AV_CHAN_BACK_CENTER
@ AV_CHAN_BACK_CENTER
Definition: channel_layout.h:58
SubStream::data_check_present
uint8_t data_check_present
Set if the substream contains extra info to check the size of VLC blocks.
Definition: mlpdec.c:92
AV_CHAN_NONE
@ AV_CHAN_NONE
Invalid channel index.
Definition: channel_layout.h:49
SubStream::matrix_noise_shift
uint8_t matrix_noise_shift[MAX_MATRICES]
Left shift to apply to noise values in 0x31eb substreams.
Definition: mlpdec.c:120
AVCodecContext
main external API structure.
Definition: avcodec.h:437
PARAM_OUTSHIFT
#define PARAM_OUTSHIFT
Definition: mlpdec.c:98
VLC_BITS
#define VLC_BITS
number of bits used for VLC lookup - longest Huffman code is 9
Definition: mlpdec.c:52
PARAM_BLOCKSIZE
#define PARAM_BLOCKSIZE
Definition: mlpdec.c:96
channel_layout.h
AV_CHAN_LOW_FREQUENCY_2
@ AV_CHAN_LOW_FREQUENCY_2
Definition: channel_layout.h:76
VLC_STATIC_SIZE
#define VLC_STATIC_SIZE
Definition: mlpdec.c:53
av_channel_layout_subset
uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, uint64_t mask)
Find out what channels from a given set are present in a channel layout, without regard for their pos...
Definition: channel_layout.c:994
AV_MATRIX_ENCODING_DOLBYEX
@ AV_MATRIX_ENCODING_DOLBYEX
Definition: channel_layout.h:248
av_channel_layout_index_from_channel
int av_channel_layout_index_from_channel(const AVChannelLayout *channel_layout, enum AVChannel channel)
Get the index of a given channel in a channel layout.
Definition: channel_layout.c:842
VLC
Definition: vlc.h:33
AVCodecContext::profile
int profile
profile
Definition: avcodec.h:1592
av_channel_layout_uninit
void av_channel_layout_uninit(AVChannelLayout *channel_layout)
Free any allocated data in the channel layout and reset the channel count to 0.
Definition: channel_layout.c:636
AV_CHAN_BACK_LEFT
@ AV_CHAN_BACK_LEFT
Definition: channel_layout.h:54
VLC::table
VLCElem * table
Definition: vlc.h:35
IIR
#define IIR
Definition: mlp.h:74
FF_DISABLE_DEPRECATION_WARNINGS
#define FF_DISABLE_DEPRECATION_WARNINGS
Definition: internal.h:72
AV_CHAN_TOP_FRONT_CENTER
@ AV_CHAN_TOP_FRONT_CENTER
Definition: channel_layout.h:63
read_filter_params
static int read_filter_params(MLPDecodeContext *m, GetBitContext *gbp, unsigned int substr, unsigned int channel, unsigned int filter)
Read parameters for one of the prediction filters.
Definition: mlpdec.c:678
AV_CHAN_WIDE_RIGHT
@ AV_CHAN_WIDE_RIGHT
Definition: channel_layout.h:73
read_huff_channels
static int read_huff_channels(MLPDecodeContext *m, GetBitContext *gbp, unsigned int substr, unsigned int pos)
Read a sample, consisting of either, both or neither of entropy-coded MSBs and plain LSBs.
Definition: mlpdec.c:262
avpriv_request_sample
#define avpriv_request_sample(...)
Definition: tableprint_vlc.h:36
read_major_sync
static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
Read a major sync info header - contains high level information about the stream - sample rate,...
Definition: mlpdec.c:327
mlp.h
ff_mlp_huffman_tables
const uint8_t ff_mlp_huffman_tables[3][18][2]
Tables defining the Huffman codes.
Definition: mlp.c:30
SubStream::param_presence_flags
uint8_t param_presence_flags
Bitmask of which parameter sets are conveyed in a decoding parameter block.
Definition: mlpdec.c:95
AVPacket
This structure stores compressed data.
Definition: packet.h:351
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:464
AV_CHAN_TOP_FRONT_LEFT
@ AV_CHAN_TOP_FRONT_LEFT
Definition: channel_layout.h:62
int32_t
int32_t
Definition: audioconvert.c:56
truehd_decoder_class
static const AVClass truehd_decoder_class
Definition: mlpdec.c:1431
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
read_matrix_params
static int read_matrix_params(MLPDecodeContext *m, unsigned int substr, GetBitContext *gbp)
Read parameters for primitive matrices.
Definition: mlpdec.c:753
AVERROR_INVALIDDATA
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
Definition: error.h:61
VLC_INIT_USE_STATIC
#define VLC_INIT_USE_STATIC
Definition: vlc.h:176
AV_CHAN_FRONT_LEFT
@ AV_CHAN_FRONT_LEFT
Definition: channel_layout.h:50
MLPDSPContext
Definition: mlpdsp.h:49
ff_truehd_profiles
const AVProfile ff_truehd_profiles[]
Definition: profiles.c:55
FilterParams::shift
uint8_t shift
Right shift to apply to output of filter.
Definition: mlp.h:79
AV_SAMPLE_FMT_S32
@ AV_SAMPLE_FMT_S32
signed 32 bits
Definition: samplefmt.h:59
generate_2_noise_channels
static void generate_2_noise_channels(MLPDecodeContext *m, unsigned int substr)
Noise generation functions.
Definition: mlpdec.c:1059
SubStream::matrix_encoding
enum AVMatrixEncoding matrix_encoding
The matrix encoding mode for this substream.
Definition: mlpdec.c:80
channel
channel
Definition: ebur128.h:39
MAX_BLOCKSIZE_POW2
#define MAX_BLOCKSIZE_POW2
next power of two greater than MAX_BLOCKSIZE
Definition: mlp.h:61
MLPDecodeContext::noise_buffer
int8_t noise_buffer[MAX_BLOCKSIZE_POW2]
Definition: mlpdec.c:179
codebook
static const unsigned codebook[256][2]
Definition: cfhdenc.c:42
AV_CODEC_ID_MLP
@ AV_CODEC_ID_MLP
Definition: codec_id.h:471
AV_CH_SIDE_LEFT
#define AV_CH_SIDE_LEFT
Definition: channel_layout.h:173
AV_RB16
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_WB24 unsigned int_TMPL AV_RB16
Definition: bytestream.h:98
read_block_data
static int read_block_data(MLPDecodeContext *m, GetBitContext *gbp, unsigned int substr)
Read a block of PCM residual data (or actual if no filtering active).
Definition: mlpdec.c:988