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