3 * Copyright (c) 2007-2008 Ian Caulfield
5 * This file is part of Libav.
7 * Libav 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.
12 * Libav 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.
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with Libav; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30 #include "libavutil/intreadwrite.h"
31 #include "libavutil/channel_layout.h"
34 #include "libavutil/crc.h"
36 #include "mlp_parser.h"
40 /** number of bits used for VLC lookup - longest Huffman code is 9 */
43 typedef struct SubStream {
44 /// Set if a valid restart header has been read. Otherwise the substream cannot be decoded.
48 /** restart header data */
49 /// The type of noise to be used in the rematrix stage.
52 /// The index of the first channel coded in this substream.
54 /// The index of the last channel coded in this substream.
56 /// The number of channels input into the rematrix stage.
57 uint8_t max_matrix_channel;
58 /// For each channel output by the matrix, the output channel to map it to
59 uint8_t ch_assign[MAX_CHANNELS];
60 /// The channel layout for this substream
63 /// Channel coding parameters for channels in the substream
64 ChannelParams channel_params[MAX_CHANNELS];
66 /// The left shift applied to random noise in 0x31ea substreams.
68 /// The current seed value for the pseudorandom noise generator(s).
69 uint32_t noisegen_seed;
71 /// Set if the substream contains extra info to check the size of VLC blocks.
72 uint8_t data_check_present;
74 /// Bitmask of which parameter sets are conveyed in a decoding parameter block.
75 uint8_t param_presence_flags;
76 #define PARAM_BLOCKSIZE (1 << 7)
77 #define PARAM_MATRIX (1 << 6)
78 #define PARAM_OUTSHIFT (1 << 5)
79 #define PARAM_QUANTSTEP (1 << 4)
80 #define PARAM_FIR (1 << 3)
81 #define PARAM_IIR (1 << 2)
82 #define PARAM_HUFFOFFSET (1 << 1)
83 #define PARAM_PRESENCE (1 << 0)
89 /// Number of matrices to be applied.
90 uint8_t num_primitive_matrices;
92 /// matrix output channel
93 uint8_t matrix_out_ch[MAX_MATRICES];
95 /// Whether the LSBs of the matrix output are encoded in the bitstream.
96 uint8_t lsb_bypass[MAX_MATRICES];
97 /// Matrix coefficients, stored as 2.14 fixed point.
98 int32_t matrix_coeff[MAX_MATRICES][MAX_CHANNELS];
99 /// Left shift to apply to noise values in 0x31eb substreams.
100 uint8_t matrix_noise_shift[MAX_MATRICES];
103 /// Left shift to apply to Huffman-decoded residuals.
104 uint8_t quant_step_size[MAX_CHANNELS];
106 /// number of PCM samples in current audio block
108 /// Number of PCM samples decoded so far in this frame.
111 /// Left shift to apply to decoded PCM values to get final 24-bit output.
112 int8_t output_shift[MAX_CHANNELS];
114 /// Running XOR of all output samples.
115 int32_t lossless_check_data;
119 typedef struct MLPDecodeContext {
120 AVCodecContext *avctx;
123 /// Current access unit being read has a major sync.
124 int is_major_sync_unit;
126 /// Set if a valid major sync block has been read. Otherwise no decoding is possible.
127 uint8_t params_valid;
129 /// Number of substreams contained within this stream.
130 uint8_t num_substreams;
132 /// Index of the last substream to decode - further substreams are skipped.
133 uint8_t max_decoded_substream;
135 /// number of PCM samples contained in each frame
136 int access_unit_size;
137 /// next power of two above the number of samples in each frame
138 int access_unit_size_pow2;
140 SubStream substream[MAX_SUBSTREAMS];
143 int filter_changed[MAX_CHANNELS][NUM_FILTERS];
145 int8_t noise_buffer[MAX_BLOCKSIZE_POW2];
146 int8_t bypassed_lsbs[MAX_BLOCKSIZE][MAX_CHANNELS];
147 int32_t sample_buffer[MAX_BLOCKSIZE][MAX_CHANNELS];
152 static const uint64_t thd_channel_order[] = {
153 AV_CH_FRONT_LEFT, AV_CH_FRONT_RIGHT, // LR
154 AV_CH_FRONT_CENTER, // C
155 AV_CH_LOW_FREQUENCY, // LFE
156 AV_CH_SIDE_LEFT, AV_CH_SIDE_RIGHT, // LRs
157 AV_CH_TOP_FRONT_LEFT, AV_CH_TOP_FRONT_RIGHT, // LRvh
158 AV_CH_FRONT_LEFT_OF_CENTER, AV_CH_FRONT_RIGHT_OF_CENTER, // LRc
159 AV_CH_BACK_LEFT, AV_CH_BACK_RIGHT, // LRrs
160 AV_CH_BACK_CENTER, // Cs
161 AV_CH_TOP_CENTER, // Ts
162 AV_CH_SURROUND_DIRECT_LEFT, AV_CH_SURROUND_DIRECT_RIGHT, // LRsd
163 AV_CH_WIDE_LEFT, AV_CH_WIDE_RIGHT, // LRw
164 AV_CH_TOP_FRONT_CENTER, // Cvh
165 AV_CH_LOW_FREQUENCY_2, // LFE2
168 static uint64_t thd_channel_layout_extract_channel(uint64_t channel_layout,
173 if (av_get_channel_layout_nb_channels(channel_layout) <= index)
176 for (i = 0; i < FF_ARRAY_ELEMS(thd_channel_order); i++)
177 if (channel_layout & thd_channel_order[i] && !index--)
178 return thd_channel_order[i];
182 static VLC huff_vlc[3];
184 /** Initialize static data, constant between all invocations of the codec. */
186 static av_cold void init_static(void)
188 if (!huff_vlc[0].bits) {
189 INIT_VLC_STATIC(&huff_vlc[0], VLC_BITS, 18,
190 &ff_mlp_huffman_tables[0][0][1], 2, 1,
191 &ff_mlp_huffman_tables[0][0][0], 2, 1, 512);
192 INIT_VLC_STATIC(&huff_vlc[1], VLC_BITS, 16,
193 &ff_mlp_huffman_tables[1][0][1], 2, 1,
194 &ff_mlp_huffman_tables[1][0][0], 2, 1, 512);
195 INIT_VLC_STATIC(&huff_vlc[2], VLC_BITS, 15,
196 &ff_mlp_huffman_tables[2][0][1], 2, 1,
197 &ff_mlp_huffman_tables[2][0][0], 2, 1, 512);
203 static inline int32_t calculate_sign_huff(MLPDecodeContext *m,
204 unsigned int substr, unsigned int ch)
206 SubStream *s = &m->substream[substr];
207 ChannelParams *cp = &s->channel_params[ch];
208 int lsb_bits = cp->huff_lsbs - s->quant_step_size[ch];
209 int sign_shift = lsb_bits + (cp->codebook ? 2 - cp->codebook : -1);
210 int32_t sign_huff_offset = cp->huff_offset;
212 if (cp->codebook > 0)
213 sign_huff_offset -= 7 << lsb_bits;
216 sign_huff_offset -= 1 << sign_shift;
218 return sign_huff_offset;
221 /** Read a sample, consisting of either, both or neither of entropy-coded MSBs
224 static inline int read_huff_channels(MLPDecodeContext *m, GetBitContext *gbp,
225 unsigned int substr, unsigned int pos)
227 SubStream *s = &m->substream[substr];
228 unsigned int mat, channel;
230 for (mat = 0; mat < s->num_primitive_matrices; mat++)
231 if (s->lsb_bypass[mat])
232 m->bypassed_lsbs[pos + s->blockpos][mat] = get_bits1(gbp);
234 for (channel = s->min_channel; channel <= s->max_channel; channel++) {
235 ChannelParams *cp = &s->channel_params[channel];
236 int codebook = cp->codebook;
237 int quant_step_size = s->quant_step_size[channel];
238 int lsb_bits = cp->huff_lsbs - quant_step_size;
242 result = get_vlc2(gbp, huff_vlc[codebook-1].table,
243 VLC_BITS, (9 + VLC_BITS - 1) / VLC_BITS);
246 return AVERROR_INVALIDDATA;
249 result = (result << lsb_bits) + get_bits(gbp, lsb_bits);
251 result += cp->sign_huff_offset;
252 result <<= quant_step_size;
254 m->sample_buffer[pos + s->blockpos][channel] = result;
260 static av_cold int mlp_decode_init(AVCodecContext *avctx)
262 MLPDecodeContext *m = avctx->priv_data;
267 for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
268 m->substream[substr].lossless_check_data = 0xffffffff;
269 ff_mlpdsp_init(&m->dsp);
271 avcodec_get_frame_defaults(&m->frame);
272 avctx->coded_frame = &m->frame;
277 /** Read a major sync info header - contains high level information about
278 * the stream - sample rate, channel arrangement etc. Most of this
279 * information is not actually necessary for decoding, only for playback.
282 static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
287 if ((ret = ff_mlp_read_major_sync(m->avctx, &mh, gb)) != 0)
290 if (mh.group1_bits == 0) {
291 av_log(m->avctx, AV_LOG_ERROR, "invalid/unknown bits per sample\n");
292 return AVERROR_INVALIDDATA;
294 if (mh.group2_bits > mh.group1_bits) {
295 av_log(m->avctx, AV_LOG_ERROR,
296 "Channel group 2 cannot have more bits per sample than group 1.\n");
297 return AVERROR_INVALIDDATA;
300 if (mh.group2_samplerate && mh.group2_samplerate != mh.group1_samplerate) {
301 av_log(m->avctx, AV_LOG_ERROR,
302 "Channel groups with differing sample rates are not currently supported.\n");
303 return AVERROR_INVALIDDATA;
306 if (mh.group1_samplerate == 0) {
307 av_log(m->avctx, AV_LOG_ERROR, "invalid/unknown sampling rate\n");
308 return AVERROR_INVALIDDATA;
310 if (mh.group1_samplerate > MAX_SAMPLERATE) {
311 av_log(m->avctx, AV_LOG_ERROR,
312 "Sampling rate %d is greater than the supported maximum (%d).\n",
313 mh.group1_samplerate, MAX_SAMPLERATE);
314 return AVERROR_INVALIDDATA;
316 if (mh.access_unit_size > MAX_BLOCKSIZE) {
317 av_log(m->avctx, AV_LOG_ERROR,
318 "Block size %d is greater than the supported maximum (%d).\n",
319 mh.access_unit_size, MAX_BLOCKSIZE);
320 return AVERROR_INVALIDDATA;
322 if (mh.access_unit_size_pow2 > MAX_BLOCKSIZE_POW2) {
323 av_log(m->avctx, AV_LOG_ERROR,
324 "Block size pow2 %d is greater than the supported maximum (%d).\n",
325 mh.access_unit_size_pow2, MAX_BLOCKSIZE_POW2);
326 return AVERROR_INVALIDDATA;
329 if (mh.num_substreams == 0)
330 return AVERROR_INVALIDDATA;
331 if (m->avctx->codec_id == AV_CODEC_ID_MLP && mh.num_substreams > 2) {
332 av_log(m->avctx, AV_LOG_ERROR, "MLP only supports up to 2 substreams.\n");
333 return AVERROR_INVALIDDATA;
335 if (mh.num_substreams > MAX_SUBSTREAMS) {
336 av_log_ask_for_sample(m->avctx,
337 "Number of substreams %d is larger than the maximum supported "
338 "by the decoder.\n", mh.num_substreams);
339 return AVERROR_PATCHWELCOME;
342 m->access_unit_size = mh.access_unit_size;
343 m->access_unit_size_pow2 = mh.access_unit_size_pow2;
345 m->num_substreams = mh.num_substreams;
346 m->max_decoded_substream = m->num_substreams - 1;
348 m->avctx->sample_rate = mh.group1_samplerate;
349 m->avctx->frame_size = mh.access_unit_size;
351 m->avctx->bits_per_raw_sample = mh.group1_bits;
352 if (mh.group1_bits > 16)
353 m->avctx->sample_fmt = AV_SAMPLE_FMT_S32;
355 m->avctx->sample_fmt = AV_SAMPLE_FMT_S16;
358 for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
359 m->substream[substr].restart_seen = 0;
361 /* Set the layout for each substream. When there's more than one, the first
362 * substream is Stereo. Subsequent substreams' layouts are indicated in the
364 if (m->avctx->codec_id == AV_CODEC_ID_MLP) {
365 if ((substr = (mh.num_substreams > 1)))
366 m->substream[0].ch_layout = AV_CH_LAYOUT_STEREO;
367 m->substream[substr].ch_layout = mh.channel_layout_mlp;
369 if ((substr = (mh.num_substreams > 1)))
370 m->substream[0].ch_layout = AV_CH_LAYOUT_STEREO;
371 if (mh.num_substreams > 2)
372 if (mh.channel_layout_thd_stream2)
373 m->substream[2].ch_layout = mh.channel_layout_thd_stream2;
375 m->substream[2].ch_layout = mh.channel_layout_thd_stream1;
376 m->substream[substr].ch_layout = mh.channel_layout_thd_stream1;
382 /** Read a restart header from a block in a substream. This contains parameters
383 * required to decode the audio that do not change very often. Generally
384 * (always) present only in blocks following a major sync. */
386 static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp,
387 const uint8_t *buf, unsigned int substr)
389 SubStream *s = &m->substream[substr];
393 uint8_t lossless_check;
394 int start_count = get_bits_count(gbp);
395 const int max_matrix_channel = m->avctx->codec_id == AV_CODEC_ID_MLP
396 ? MAX_MATRIX_CHANNEL_MLP
397 : MAX_MATRIX_CHANNEL_TRUEHD;
399 sync_word = get_bits(gbp, 13);
401 if (sync_word != 0x31ea >> 1) {
402 av_log(m->avctx, AV_LOG_ERROR,
403 "restart header sync incorrect (got 0x%04x)\n", sync_word);
404 return AVERROR_INVALIDDATA;
407 s->noise_type = get_bits1(gbp);
409 if (m->avctx->codec_id == AV_CODEC_ID_MLP && s->noise_type) {
410 av_log(m->avctx, AV_LOG_ERROR, "MLP must have 0x31ea sync word.\n");
411 return AVERROR_INVALIDDATA;
414 skip_bits(gbp, 16); /* Output timestamp */
416 s->min_channel = get_bits(gbp, 4);
417 s->max_channel = get_bits(gbp, 4);
418 s->max_matrix_channel = get_bits(gbp, 4);
420 if (s->max_matrix_channel > max_matrix_channel) {
421 av_log(m->avctx, AV_LOG_ERROR,
422 "Max matrix channel cannot be greater than %d.\n",
424 return AVERROR_INVALIDDATA;
427 if (s->max_channel != s->max_matrix_channel) {
428 av_log(m->avctx, AV_LOG_ERROR,
429 "Max channel must be equal max matrix channel.\n");
430 return AVERROR_INVALIDDATA;
433 /* This should happen for TrueHD streams with >6 channels and MLP's noise
434 * type. It is not yet known if this is allowed. */
435 if (s->max_channel > MAX_MATRIX_CHANNEL_MLP && !s->noise_type) {
436 av_log_ask_for_sample(m->avctx,
437 "Number of channels %d is larger than the maximum supported "
438 "by the decoder.\n", s->max_channel + 2);
439 return AVERROR_PATCHWELCOME;
442 if (s->min_channel > s->max_channel) {
443 av_log(m->avctx, AV_LOG_ERROR,
444 "Substream min channel cannot be greater than max channel.\n");
445 return AVERROR_INVALIDDATA;
448 #if FF_API_REQUEST_CHANNELS
449 if (m->avctx->request_channels > 0 &&
450 m->avctx->request_channels <= s->max_channel + 1 &&
451 m->max_decoded_substream > substr) {
452 av_log(m->avctx, AV_LOG_DEBUG,
453 "Extracting %d-channel downmix from substream %d. "
454 "Further substreams will be skipped.\n",
455 s->max_channel + 1, substr);
456 m->max_decoded_substream = substr;
459 if (m->avctx->request_channel_layout == s->ch_layout &&
460 m->max_decoded_substream > substr) {
461 av_log(m->avctx, AV_LOG_DEBUG,
462 "Extracting %d-channel downmix (0x%"PRIx64") from substream %d. "
463 "Further substreams will be skipped.\n",
464 s->max_channel + 1, s->ch_layout, substr);
465 m->max_decoded_substream = substr;
468 s->noise_shift = get_bits(gbp, 4);
469 s->noisegen_seed = get_bits(gbp, 23);
473 s->data_check_present = get_bits1(gbp);
474 lossless_check = get_bits(gbp, 8);
475 if (substr == m->max_decoded_substream
476 && s->lossless_check_data != 0xffffffff) {
477 tmp = xor_32_to_8(s->lossless_check_data);
478 if (tmp != lossless_check)
479 av_log(m->avctx, AV_LOG_WARNING,
480 "Lossless check failed - expected %02x, calculated %02x.\n",
481 lossless_check, tmp);
486 memset(s->ch_assign, 0, sizeof(s->ch_assign));
488 for (ch = 0; ch <= s->max_matrix_channel; ch++) {
489 int ch_assign = get_bits(gbp, 6);
490 if (m->avctx->codec_id == AV_CODEC_ID_TRUEHD) {
491 uint64_t channel = thd_channel_layout_extract_channel(s->ch_layout,
493 ch_assign = av_get_channel_layout_channel_index(s->ch_layout,
496 if (ch_assign > s->max_matrix_channel) {
497 av_log_ask_for_sample(m->avctx,
498 "Assignment of matrix channel %d to invalid output channel %d.\n",
500 return AVERROR_PATCHWELCOME;
502 s->ch_assign[ch_assign] = ch;
505 checksum = ff_mlp_restart_checksum(buf, get_bits_count(gbp) - start_count);
507 if (checksum != get_bits(gbp, 8))
508 av_log(m->avctx, AV_LOG_ERROR, "restart header checksum error\n");
510 /* Set default decoding parameters. */
511 s->param_presence_flags = 0xff;
512 s->num_primitive_matrices = 0;
514 s->lossless_check_data = 0;
516 memset(s->output_shift , 0, sizeof(s->output_shift ));
517 memset(s->quant_step_size, 0, sizeof(s->quant_step_size));
519 for (ch = s->min_channel; ch <= s->max_channel; ch++) {
520 ChannelParams *cp = &s->channel_params[ch];
521 cp->filter_params[FIR].order = 0;
522 cp->filter_params[IIR].order = 0;
523 cp->filter_params[FIR].shift = 0;
524 cp->filter_params[IIR].shift = 0;
526 /* Default audio coding is 24-bit raw PCM. */
528 cp->sign_huff_offset = (-1) << 23;
533 if (substr == m->max_decoded_substream) {
534 m->avctx->channels = s->max_matrix_channel + 1;
535 m->avctx->channel_layout = s->ch_layout;
541 /** Read parameters for one of the prediction filters. */
543 static int read_filter_params(MLPDecodeContext *m, GetBitContext *gbp,
544 unsigned int substr, unsigned int channel,
547 SubStream *s = &m->substream[substr];
548 FilterParams *fp = &s->channel_params[channel].filter_params[filter];
549 const int max_order = filter ? MAX_IIR_ORDER : MAX_FIR_ORDER;
550 const char fchar = filter ? 'I' : 'F';
553 // Filter is 0 for FIR, 1 for IIR.
556 if (m->filter_changed[channel][filter]++ > 1) {
557 av_log(m->avctx, AV_LOG_ERROR, "Filters may change only once per access unit.\n");
558 return AVERROR_INVALIDDATA;
561 order = get_bits(gbp, 4);
562 if (order > max_order) {
563 av_log(m->avctx, AV_LOG_ERROR,
564 "%cIR filter order %d is greater than maximum %d.\n",
565 fchar, order, max_order);
566 return AVERROR_INVALIDDATA;
571 int32_t *fcoeff = s->channel_params[channel].coeff[filter];
572 int coeff_bits, coeff_shift;
574 fp->shift = get_bits(gbp, 4);
576 coeff_bits = get_bits(gbp, 5);
577 coeff_shift = get_bits(gbp, 3);
578 if (coeff_bits < 1 || coeff_bits > 16) {
579 av_log(m->avctx, AV_LOG_ERROR,
580 "%cIR filter coeff_bits must be between 1 and 16.\n",
582 return AVERROR_INVALIDDATA;
584 if (coeff_bits + coeff_shift > 16) {
585 av_log(m->avctx, AV_LOG_ERROR,
586 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
588 return AVERROR_INVALIDDATA;
591 for (i = 0; i < order; i++)
592 fcoeff[i] = get_sbits(gbp, coeff_bits) << coeff_shift;
594 if (get_bits1(gbp)) {
595 int state_bits, state_shift;
598 av_log(m->avctx, AV_LOG_ERROR,
599 "FIR filter has state data specified.\n");
600 return AVERROR_INVALIDDATA;
603 state_bits = get_bits(gbp, 4);
604 state_shift = get_bits(gbp, 4);
606 /* TODO: Check validity of state data. */
608 for (i = 0; i < order; i++)
609 fp->state[i] = get_sbits(gbp, state_bits) << state_shift;
616 /** Read parameters for primitive matrices. */
618 static int read_matrix_params(MLPDecodeContext *m, unsigned int substr, GetBitContext *gbp)
620 SubStream *s = &m->substream[substr];
621 unsigned int mat, ch;
622 const int max_primitive_matrices = m->avctx->codec_id == AV_CODEC_ID_MLP
624 : MAX_MATRICES_TRUEHD;
626 if (m->matrix_changed++ > 1) {
627 av_log(m->avctx, AV_LOG_ERROR, "Matrices may change only once per access unit.\n");
628 return AVERROR_INVALIDDATA;
631 s->num_primitive_matrices = get_bits(gbp, 4);
633 if (s->num_primitive_matrices > max_primitive_matrices) {
634 av_log(m->avctx, AV_LOG_ERROR,
635 "Number of primitive matrices cannot be greater than %d.\n",
636 max_primitive_matrices);
637 return AVERROR_INVALIDDATA;
640 for (mat = 0; mat < s->num_primitive_matrices; mat++) {
641 int frac_bits, max_chan;
642 s->matrix_out_ch[mat] = get_bits(gbp, 4);
643 frac_bits = get_bits(gbp, 4);
644 s->lsb_bypass [mat] = get_bits1(gbp);
646 if (s->matrix_out_ch[mat] > s->max_matrix_channel) {
647 av_log(m->avctx, AV_LOG_ERROR,
648 "Invalid channel %d specified as output from matrix.\n",
649 s->matrix_out_ch[mat]);
650 return AVERROR_INVALIDDATA;
652 if (frac_bits > 14) {
653 av_log(m->avctx, AV_LOG_ERROR,
654 "Too many fractional bits specified.\n");
655 return AVERROR_INVALIDDATA;
658 max_chan = s->max_matrix_channel;
662 for (ch = 0; ch <= max_chan; ch++) {
665 coeff_val = get_sbits(gbp, frac_bits + 2);
667 s->matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
671 s->matrix_noise_shift[mat] = get_bits(gbp, 4);
673 s->matrix_noise_shift[mat] = 0;
679 /** Read channel parameters. */
681 static int read_channel_params(MLPDecodeContext *m, unsigned int substr,
682 GetBitContext *gbp, unsigned int ch)
684 SubStream *s = &m->substream[substr];
685 ChannelParams *cp = &s->channel_params[ch];
686 FilterParams *fir = &cp->filter_params[FIR];
687 FilterParams *iir = &cp->filter_params[IIR];
690 if (s->param_presence_flags & PARAM_FIR)
692 if ((ret = read_filter_params(m, gbp, substr, ch, FIR)) < 0)
695 if (s->param_presence_flags & PARAM_IIR)
697 if ((ret = read_filter_params(m, gbp, substr, ch, IIR)) < 0)
700 if (fir->order + iir->order > 8) {
701 av_log(m->avctx, AV_LOG_ERROR, "Total filter orders too high.\n");
702 return AVERROR_INVALIDDATA;
705 if (fir->order && iir->order &&
706 fir->shift != iir->shift) {
707 av_log(m->avctx, AV_LOG_ERROR,
708 "FIR and IIR filters must use the same precision.\n");
709 return AVERROR_INVALIDDATA;
711 /* The FIR and IIR filters must have the same precision.
712 * To simplify the filtering code, only the precision of the
713 * FIR filter is considered. If only the IIR filter is employed,
714 * the FIR filter precision is set to that of the IIR filter, so
715 * that the filtering code can use it. */
716 if (!fir->order && iir->order)
717 fir->shift = iir->shift;
719 if (s->param_presence_flags & PARAM_HUFFOFFSET)
721 cp->huff_offset = get_sbits(gbp, 15);
723 cp->codebook = get_bits(gbp, 2);
724 cp->huff_lsbs = get_bits(gbp, 5);
726 if (cp->huff_lsbs > 24) {
727 av_log(m->avctx, AV_LOG_ERROR, "Invalid huff_lsbs.\n");
728 return AVERROR_INVALIDDATA;
731 cp->sign_huff_offset = calculate_sign_huff(m, substr, ch);
736 /** Read decoding parameters that change more often than those in the restart
739 static int read_decoding_params(MLPDecodeContext *m, GetBitContext *gbp,
742 SubStream *s = &m->substream[substr];
746 if (s->param_presence_flags & PARAM_PRESENCE)
748 s->param_presence_flags = get_bits(gbp, 8);
750 if (s->param_presence_flags & PARAM_BLOCKSIZE)
751 if (get_bits1(gbp)) {
752 s->blocksize = get_bits(gbp, 9);
753 if (s->blocksize < 8 || s->blocksize > m->access_unit_size) {
754 av_log(m->avctx, AV_LOG_ERROR, "Invalid blocksize.");
756 return AVERROR_INVALIDDATA;
760 if (s->param_presence_flags & PARAM_MATRIX)
762 if ((ret = read_matrix_params(m, substr, gbp)) < 0)
765 if (s->param_presence_flags & PARAM_OUTSHIFT)
767 for (ch = 0; ch <= s->max_matrix_channel; ch++)
768 s->output_shift[ch] = get_sbits(gbp, 4);
770 if (s->param_presence_flags & PARAM_QUANTSTEP)
772 for (ch = 0; ch <= s->max_channel; ch++) {
773 ChannelParams *cp = &s->channel_params[ch];
775 s->quant_step_size[ch] = get_bits(gbp, 4);
777 cp->sign_huff_offset = calculate_sign_huff(m, substr, ch);
780 for (ch = s->min_channel; ch <= s->max_channel; ch++)
782 if ((ret = read_channel_params(m, substr, gbp, ch)) < 0)
788 #define MSB_MASK(bits) (-1u << bits)
790 /** Generate PCM samples using the prediction filters and residual values
791 * read from the data stream, and update the filter state. */
793 static void filter_channel(MLPDecodeContext *m, unsigned int substr,
794 unsigned int channel)
796 SubStream *s = &m->substream[substr];
797 const int32_t *fircoeff = s->channel_params[channel].coeff[FIR];
798 int32_t state_buffer[NUM_FILTERS][MAX_BLOCKSIZE + MAX_FIR_ORDER];
799 int32_t *firbuf = state_buffer[FIR] + MAX_BLOCKSIZE;
800 int32_t *iirbuf = state_buffer[IIR] + MAX_BLOCKSIZE;
801 FilterParams *fir = &s->channel_params[channel].filter_params[FIR];
802 FilterParams *iir = &s->channel_params[channel].filter_params[IIR];
803 unsigned int filter_shift = fir->shift;
804 int32_t mask = MSB_MASK(s->quant_step_size[channel]);
806 memcpy(firbuf, fir->state, MAX_FIR_ORDER * sizeof(int32_t));
807 memcpy(iirbuf, iir->state, MAX_IIR_ORDER * sizeof(int32_t));
809 m->dsp.mlp_filter_channel(firbuf, fircoeff,
810 fir->order, iir->order,
811 filter_shift, mask, s->blocksize,
812 &m->sample_buffer[s->blockpos][channel]);
814 memcpy(fir->state, firbuf - s->blocksize, MAX_FIR_ORDER * sizeof(int32_t));
815 memcpy(iir->state, iirbuf - s->blocksize, MAX_IIR_ORDER * sizeof(int32_t));
818 /** Read a block of PCM residual data (or actual if no filtering active). */
820 static int read_block_data(MLPDecodeContext *m, GetBitContext *gbp,
823 SubStream *s = &m->substream[substr];
824 unsigned int i, ch, expected_stream_pos = 0;
827 if (s->data_check_present) {
828 expected_stream_pos = get_bits_count(gbp);
829 expected_stream_pos += get_bits(gbp, 16);
830 av_log_ask_for_sample(m->avctx, "This file contains some features "
831 "we have not tested yet.\n");
834 if (s->blockpos + s->blocksize > m->access_unit_size) {
835 av_log(m->avctx, AV_LOG_ERROR, "too many audio samples in frame\n");
836 return AVERROR_INVALIDDATA;
839 memset(&m->bypassed_lsbs[s->blockpos][0], 0,
840 s->blocksize * sizeof(m->bypassed_lsbs[0]));
842 for (i = 0; i < s->blocksize; i++)
843 if ((ret = read_huff_channels(m, gbp, substr, i)) < 0)
846 for (ch = s->min_channel; ch <= s->max_channel; ch++)
847 filter_channel(m, substr, ch);
849 s->blockpos += s->blocksize;
851 if (s->data_check_present) {
852 if (get_bits_count(gbp) != expected_stream_pos)
853 av_log(m->avctx, AV_LOG_ERROR, "block data length mismatch\n");
860 /** Data table used for TrueHD noise generation function. */
862 static const int8_t noise_table[256] = {
863 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
864 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
865 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
866 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
867 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
868 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
869 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
870 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
871 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
872 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
873 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
874 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
875 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
876 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
877 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
878 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
881 /** Noise generation functions.
882 * I'm not sure what these are for - they seem to be some kind of pseudorandom
883 * sequence generators, used to generate noise data which is used when the
884 * channels are rematrixed. I'm not sure if they provide a practical benefit
885 * to compression, or just obfuscate the decoder. Are they for some kind of
888 /** Generate two channels of noise, used in the matrix when
889 * restart sync word == 0x31ea. */
891 static void generate_2_noise_channels(MLPDecodeContext *m, unsigned int substr)
893 SubStream *s = &m->substream[substr];
895 uint32_t seed = s->noisegen_seed;
896 unsigned int maxchan = s->max_matrix_channel;
898 for (i = 0; i < s->blockpos; i++) {
899 uint16_t seed_shr7 = seed >> 7;
900 m->sample_buffer[i][maxchan+1] = ((int8_t)(seed >> 15)) << s->noise_shift;
901 m->sample_buffer[i][maxchan+2] = ((int8_t) seed_shr7) << s->noise_shift;
903 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
906 s->noisegen_seed = seed;
909 /** Generate a block of noise, used when restart sync word == 0x31eb. */
911 static void fill_noise_buffer(MLPDecodeContext *m, unsigned int substr)
913 SubStream *s = &m->substream[substr];
915 uint32_t seed = s->noisegen_seed;
917 for (i = 0; i < m->access_unit_size_pow2; i++) {
918 uint8_t seed_shr15 = seed >> 15;
919 m->noise_buffer[i] = noise_table[seed_shr15];
920 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
923 s->noisegen_seed = seed;
927 /** Apply the channel matrices in turn to reconstruct the original audio
930 static void rematrix_channels(MLPDecodeContext *m, unsigned int substr)
932 SubStream *s = &m->substream[substr];
933 unsigned int mat, src_ch, i;
934 unsigned int maxchan;
936 maxchan = s->max_matrix_channel;
937 if (!s->noise_type) {
938 generate_2_noise_channels(m, substr);
941 fill_noise_buffer(m, substr);
944 for (mat = 0; mat < s->num_primitive_matrices; mat++) {
945 int matrix_noise_shift = s->matrix_noise_shift[mat];
946 unsigned int dest_ch = s->matrix_out_ch[mat];
947 int32_t mask = MSB_MASK(s->quant_step_size[dest_ch]);
948 int32_t *coeffs = s->matrix_coeff[mat];
949 int index = s->num_primitive_matrices - mat;
950 int index2 = 2 * index + 1;
952 /* TODO: DSPContext? */
954 for (i = 0; i < s->blockpos; i++) {
955 int32_t bypassed_lsb = m->bypassed_lsbs[i][mat];
956 int32_t *samples = m->sample_buffer[i];
959 for (src_ch = 0; src_ch <= maxchan; src_ch++)
960 accum += (int64_t) samples[src_ch] * coeffs[src_ch];
962 if (matrix_noise_shift) {
963 index &= m->access_unit_size_pow2 - 1;
964 accum += m->noise_buffer[index] << (matrix_noise_shift + 7);
968 samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb;
973 /** Write the audio data into the output buffer. */
975 static int output_data(MLPDecodeContext *m, unsigned int substr,
976 void *data, int *got_frame_ptr)
978 AVCodecContext *avctx = m->avctx;
979 SubStream *s = &m->substream[substr];
980 unsigned int i, out_ch = 0;
984 int is32 = (m->avctx->sample_fmt == AV_SAMPLE_FMT_S32);
986 if (m->avctx->channels != s->max_matrix_channel + 1) {
987 av_log(m->avctx, AV_LOG_ERROR, "channel count mismatch\n");
988 return AVERROR_INVALIDDATA;
991 /* get output buffer */
992 m->frame.nb_samples = s->blockpos;
993 if ((ret = ff_get_buffer(avctx, &m->frame)) < 0) {
994 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
997 data_32 = (int32_t *)m->frame.data[0];
998 data_16 = (int16_t *)m->frame.data[0];
1000 for (i = 0; i < s->blockpos; i++) {
1001 for (out_ch = 0; out_ch <= s->max_matrix_channel; out_ch++) {
1002 int mat_ch = s->ch_assign[out_ch];
1003 int32_t sample = m->sample_buffer[i][mat_ch]
1004 << s->output_shift[mat_ch];
1005 s->lossless_check_data ^= (sample & 0xffffff) << mat_ch;
1006 if (is32) *data_32++ = sample << 8;
1007 else *data_16++ = sample >> 8;
1012 *(AVFrame *)data = m->frame;
1017 /** Read an access unit from the stream.
1018 * @return negative on error, 0 if not enough data is present in the input stream,
1019 * otherwise the number of bytes consumed. */
1021 static int read_access_unit(AVCodecContext *avctx, void* data,
1022 int *got_frame_ptr, AVPacket *avpkt)
1024 const uint8_t *buf = avpkt->data;
1025 int buf_size = avpkt->size;
1026 MLPDecodeContext *m = avctx->priv_data;
1028 unsigned int length, substr;
1029 unsigned int substream_start;
1030 unsigned int header_size = 4;
1031 unsigned int substr_header_size = 0;
1032 uint8_t substream_parity_present[MAX_SUBSTREAMS];
1033 uint16_t substream_data_len[MAX_SUBSTREAMS];
1034 uint8_t parity_bits;
1040 length = (AV_RB16(buf) & 0xfff) * 2;
1042 if (length < 4 || length > buf_size)
1043 return AVERROR_INVALIDDATA;
1045 init_get_bits(&gb, (buf + 4), (length - 4) * 8);
1047 m->is_major_sync_unit = 0;
1048 if (show_bits_long(&gb, 31) == (0xf8726fba >> 1)) {
1049 if (read_major_sync(m, &gb) < 0)
1051 m->is_major_sync_unit = 1;
1055 if (!m->params_valid) {
1056 av_log(m->avctx, AV_LOG_WARNING,
1057 "Stream parameters not seen; skipping frame.\n");
1062 substream_start = 0;
1064 for (substr = 0; substr < m->num_substreams; substr++) {
1065 int extraword_present, checkdata_present, end, nonrestart_substr;
1067 extraword_present = get_bits1(&gb);
1068 nonrestart_substr = get_bits1(&gb);
1069 checkdata_present = get_bits1(&gb);
1072 end = get_bits(&gb, 12) * 2;
1074 substr_header_size += 2;
1076 if (extraword_present) {
1077 if (m->avctx->codec_id == AV_CODEC_ID_MLP) {
1078 av_log(m->avctx, AV_LOG_ERROR, "There must be no extraword for MLP.\n");
1082 substr_header_size += 2;
1085 if (!(nonrestart_substr ^ m->is_major_sync_unit)) {
1086 av_log(m->avctx, AV_LOG_ERROR, "Invalid nonrestart_substr.\n");
1090 if (end + header_size + substr_header_size > length) {
1091 av_log(m->avctx, AV_LOG_ERROR,
1092 "Indicated length of substream %d data goes off end of "
1093 "packet.\n", substr);
1094 end = length - header_size - substr_header_size;
1097 if (end < substream_start) {
1098 av_log(avctx, AV_LOG_ERROR,
1099 "Indicated end offset of substream %d data "
1100 "is smaller than calculated start offset.\n",
1105 if (substr > m->max_decoded_substream)
1108 substream_parity_present[substr] = checkdata_present;
1109 substream_data_len[substr] = end - substream_start;
1110 substream_start = end;
1113 parity_bits = ff_mlp_calculate_parity(buf, 4);
1114 parity_bits ^= ff_mlp_calculate_parity(buf + header_size, substr_header_size);
1116 if ((((parity_bits >> 4) ^ parity_bits) & 0xF) != 0xF) {
1117 av_log(avctx, AV_LOG_ERROR, "Parity check failed.\n");
1121 buf += header_size + substr_header_size;
1123 for (substr = 0; substr <= m->max_decoded_substream; substr++) {
1124 SubStream *s = &m->substream[substr];
1125 init_get_bits(&gb, buf, substream_data_len[substr] * 8);
1127 m->matrix_changed = 0;
1128 memset(m->filter_changed, 0, sizeof(m->filter_changed));
1132 if (get_bits1(&gb)) {
1133 if (get_bits1(&gb)) {
1134 /* A restart header should be present. */
1135 if (read_restart_header(m, &gb, buf, substr) < 0)
1137 s->restart_seen = 1;
1140 if (!s->restart_seen)
1142 if (read_decoding_params(m, &gb, substr) < 0)
1146 if (!s->restart_seen)
1149 if ((ret = read_block_data(m, &gb, substr)) < 0)
1152 if (get_bits_count(&gb) >= substream_data_len[substr] * 8)
1153 goto substream_length_mismatch;
1155 } while (!get_bits1(&gb));
1157 skip_bits(&gb, (-get_bits_count(&gb)) & 15);
1159 if (substream_data_len[substr] * 8 - get_bits_count(&gb) >= 32) {
1162 if (get_bits(&gb, 16) != 0xD234)
1163 return AVERROR_INVALIDDATA;
1165 shorten_by = get_bits(&gb, 16);
1166 if (m->avctx->codec_id == AV_CODEC_ID_TRUEHD && shorten_by & 0x2000)
1167 s->blockpos -= FFMIN(shorten_by & 0x1FFF, s->blockpos);
1168 else if (m->avctx->codec_id == AV_CODEC_ID_MLP && shorten_by != 0xD234)
1169 return AVERROR_INVALIDDATA;
1171 if (substr == m->max_decoded_substream)
1172 av_log(m->avctx, AV_LOG_INFO, "End of stream indicated.\n");
1175 if (substream_parity_present[substr]) {
1176 uint8_t parity, checksum;
1178 if (substream_data_len[substr] * 8 - get_bits_count(&gb) != 16)
1179 goto substream_length_mismatch;
1181 parity = ff_mlp_calculate_parity(buf, substream_data_len[substr] - 2);
1182 checksum = ff_mlp_checksum8 (buf, substream_data_len[substr] - 2);
1184 if ((get_bits(&gb, 8) ^ parity) != 0xa9 )
1185 av_log(m->avctx, AV_LOG_ERROR, "Substream %d parity check failed.\n", substr);
1186 if ( get_bits(&gb, 8) != checksum)
1187 av_log(m->avctx, AV_LOG_ERROR, "Substream %d checksum failed.\n" , substr);
1190 if (substream_data_len[substr] * 8 != get_bits_count(&gb))
1191 goto substream_length_mismatch;
1194 if (!s->restart_seen)
1195 av_log(m->avctx, AV_LOG_ERROR,
1196 "No restart header present in substream %d.\n", substr);
1198 buf += substream_data_len[substr];
1201 rematrix_channels(m, m->max_decoded_substream);
1203 if ((ret = output_data(m, m->max_decoded_substream, data, got_frame_ptr)) < 0)
1208 substream_length_mismatch:
1209 av_log(m->avctx, AV_LOG_ERROR, "substream %d length mismatch\n", substr);
1210 return AVERROR_INVALIDDATA;
1213 m->params_valid = 0;
1214 return AVERROR_INVALIDDATA;
1217 AVCodec ff_mlp_decoder = {
1219 .type = AVMEDIA_TYPE_AUDIO,
1220 .id = AV_CODEC_ID_MLP,
1221 .priv_data_size = sizeof(MLPDecodeContext),
1222 .init = mlp_decode_init,
1223 .decode = read_access_unit,
1224 .capabilities = CODEC_CAP_DR1,
1225 .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"),
1228 #if CONFIG_TRUEHD_DECODER
1229 AVCodec ff_truehd_decoder = {
1231 .type = AVMEDIA_TYPE_AUDIO,
1232 .id = AV_CODEC_ID_TRUEHD,
1233 .priv_data_size = sizeof(MLPDecodeContext),
1234 .init = mlp_decode_init,
1235 .decode = read_access_unit,
1236 .capabilities = CODEC_CAP_DR1,
1237 .long_name = NULL_IF_CONFIG_SMALL("TrueHD"),
1239 #endif /* CONFIG_TRUEHD_DECODER */