FFmpeg: libavcodec/mlpdec.c Source File

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

Generated on Sun Jul 20 2014 23:05:51 for FFmpeg by   doxygen 1.8.2

AltStyle によって変換されたページ (->オリジナル) /