3 * Copyright (c) 2007-2008 Ian Caulfield
5 * This file is part of FFmpeg.
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.
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.
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
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 /// Stream needs channel reordering to comply with FFmpeg's channel order
136 uint8_t needs_reordering;
138 /// number of PCM samples contained in each frame
139 int access_unit_size;
140 /// next power of two above the number of samples in each frame
141 int access_unit_size_pow2;
143 SubStream substream[MAX_SUBSTREAMS];
146 int filter_changed[MAX_CHANNELS][NUM_FILTERS];
148 int8_t noise_buffer[MAX_BLOCKSIZE_POW2];
149 int8_t bypassed_lsbs[MAX_BLOCKSIZE][MAX_CHANNELS];
150 int32_t sample_buffer[MAX_BLOCKSIZE][MAX_CHANNELS];
155 static const uint64_t thd_channel_order[] = {
156 AV_CH_FRONT_LEFT, AV_CH_FRONT_RIGHT, // LR
157 AV_CH_FRONT_CENTER, // C
158 AV_CH_LOW_FREQUENCY, // LFE
159 AV_CH_SIDE_LEFT, AV_CH_SIDE_RIGHT, // LRs
160 AV_CH_TOP_FRONT_LEFT, AV_CH_TOP_FRONT_RIGHT, // LRvh
161 AV_CH_FRONT_LEFT_OF_CENTER, AV_CH_FRONT_RIGHT_OF_CENTER, // LRc
162 AV_CH_BACK_LEFT, AV_CH_BACK_RIGHT, // LRrs
163 AV_CH_BACK_CENTER, // Cs
164 AV_CH_TOP_CENTER, // Ts
165 AV_CH_SURROUND_DIRECT_LEFT, AV_CH_SURROUND_DIRECT_RIGHT, // LRsd
166 AV_CH_WIDE_LEFT, AV_CH_WIDE_RIGHT, // LRw
167 AV_CH_TOP_FRONT_CENTER, // Cvh
168 AV_CH_LOW_FREQUENCY_2, // LFE2
171 static uint64_t thd_channel_layout_extract_channel(uint64_t channel_layout,
176 if (av_get_channel_layout_nb_channels(channel_layout) <= index)
179 for (i = 0; i < FF_ARRAY_ELEMS(thd_channel_order); i++)
180 if (channel_layout & thd_channel_order[i] && !index--)
181 return thd_channel_order[i];
185 static VLC huff_vlc[3];
187 /** Initialize static data, constant between all invocations of the codec. */
189 static av_cold void init_static(void)
191 if (!huff_vlc[0].bits) {
192 INIT_VLC_STATIC(&huff_vlc[0], VLC_BITS, 18,
193 &ff_mlp_huffman_tables[0][0][1], 2, 1,
194 &ff_mlp_huffman_tables[0][0][0], 2, 1, 512);
195 INIT_VLC_STATIC(&huff_vlc[1], VLC_BITS, 16,
196 &ff_mlp_huffman_tables[1][0][1], 2, 1,
197 &ff_mlp_huffman_tables[1][0][0], 2, 1, 512);
198 INIT_VLC_STATIC(&huff_vlc[2], VLC_BITS, 15,
199 &ff_mlp_huffman_tables[2][0][1], 2, 1,
200 &ff_mlp_huffman_tables[2][0][0], 2, 1, 512);
206 static inline int32_t calculate_sign_huff(MLPDecodeContext *m,
207 unsigned int substr, unsigned int ch)
209 SubStream *s = &m->substream[substr];
210 ChannelParams *cp = &s->channel_params[ch];
211 int lsb_bits = cp->huff_lsbs - s->quant_step_size[ch];
212 int sign_shift = lsb_bits + (cp->codebook ? 2 - cp->codebook : -1);
213 int32_t sign_huff_offset = cp->huff_offset;
215 if (cp->codebook > 0)
216 sign_huff_offset -= 7 << lsb_bits;
219 sign_huff_offset -= 1 << sign_shift;
221 return sign_huff_offset;
224 /** Read a sample, consisting of either, both or neither of entropy-coded MSBs
227 static inline int read_huff_channels(MLPDecodeContext *m, GetBitContext *gbp,
228 unsigned int substr, unsigned int pos)
230 SubStream *s = &m->substream[substr];
231 unsigned int mat, channel;
233 for (mat = 0; mat < s->num_primitive_matrices; mat++)
234 if (s->lsb_bypass[mat])
235 m->bypassed_lsbs[pos + s->blockpos][mat] = get_bits1(gbp);
237 for (channel = s->min_channel; channel <= s->max_channel; channel++) {
238 ChannelParams *cp = &s->channel_params[channel];
239 int codebook = cp->codebook;
240 int quant_step_size = s->quant_step_size[channel];
241 int lsb_bits = cp->huff_lsbs - quant_step_size;
245 result = get_vlc2(gbp, huff_vlc[codebook-1].table,
246 VLC_BITS, (9 + VLC_BITS - 1) / VLC_BITS);
249 return AVERROR_INVALIDDATA;
252 result = (result << lsb_bits) + get_bits(gbp, lsb_bits);
254 result += cp->sign_huff_offset;
255 result <<= quant_step_size;
257 m->sample_buffer[pos + s->blockpos][channel] = result;
263 static av_cold int mlp_decode_init(AVCodecContext *avctx)
265 MLPDecodeContext *m = avctx->priv_data;
270 for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
271 m->substream[substr].lossless_check_data = 0xffffffff;
272 ff_mlpdsp_init(&m->dsp);
274 avcodec_get_frame_defaults(&m->frame);
275 avctx->coded_frame = &m->frame;
280 /** Read a major sync info header - contains high level information about
281 * the stream - sample rate, channel arrangement etc. Most of this
282 * information is not actually necessary for decoding, only for playback.
285 static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
290 if ((ret = ff_mlp_read_major_sync(m->avctx, &mh, gb)) != 0)
293 if (mh.group1_bits == 0) {
294 av_log(m->avctx, AV_LOG_ERROR, "invalid/unknown bits per sample\n");
295 return AVERROR_INVALIDDATA;
297 if (mh.group2_bits > mh.group1_bits) {
298 av_log(m->avctx, AV_LOG_ERROR,
299 "Channel group 2 cannot have more bits per sample than group 1.\n");
300 return AVERROR_INVALIDDATA;
303 if (mh.group2_samplerate && mh.group2_samplerate != mh.group1_samplerate) {
304 av_log(m->avctx, AV_LOG_ERROR,
305 "Channel groups with differing sample rates are not currently supported.\n");
306 return AVERROR_INVALIDDATA;
309 if (mh.group1_samplerate == 0) {
310 av_log(m->avctx, AV_LOG_ERROR, "invalid/unknown sampling rate\n");
311 return AVERROR_INVALIDDATA;
313 if (mh.group1_samplerate > MAX_SAMPLERATE) {
314 av_log(m->avctx, AV_LOG_ERROR,
315 "Sampling rate %d is greater than the supported maximum (%d).\n",
316 mh.group1_samplerate, MAX_SAMPLERATE);
317 return AVERROR_INVALIDDATA;
319 if (mh.access_unit_size > MAX_BLOCKSIZE) {
320 av_log(m->avctx, AV_LOG_ERROR,
321 "Block size %d is greater than the supported maximum (%d).\n",
322 mh.access_unit_size, MAX_BLOCKSIZE);
323 return AVERROR_INVALIDDATA;
325 if (mh.access_unit_size_pow2 > MAX_BLOCKSIZE_POW2) {
326 av_log(m->avctx, AV_LOG_ERROR,
327 "Block size pow2 %d is greater than the supported maximum (%d).\n",
328 mh.access_unit_size_pow2, MAX_BLOCKSIZE_POW2);
329 return AVERROR_INVALIDDATA;
332 if (mh.num_substreams == 0)
333 return AVERROR_INVALIDDATA;
334 if (m->avctx->codec_id == AV_CODEC_ID_MLP && mh.num_substreams > 2) {
335 av_log(m->avctx, AV_LOG_ERROR, "MLP only supports up to 2 substreams.\n");
336 return AVERROR_INVALIDDATA;
338 if (mh.num_substreams > MAX_SUBSTREAMS) {
339 av_log_ask_for_sample(m->avctx,
340 "Number of substreams %d is larger than the maximum supported "
341 "by the decoder.\n", mh.num_substreams);
342 return AVERROR_PATCHWELCOME;
345 m->access_unit_size = mh.access_unit_size;
346 m->access_unit_size_pow2 = mh.access_unit_size_pow2;
348 m->num_substreams = mh.num_substreams;
349 m->max_decoded_substream = m->num_substreams - 1;
351 m->avctx->sample_rate = mh.group1_samplerate;
352 m->avctx->frame_size = mh.access_unit_size;
354 m->avctx->bits_per_raw_sample = mh.group1_bits;
355 if (mh.group1_bits > 16)
356 m->avctx->sample_fmt = AV_SAMPLE_FMT_S32;
358 m->avctx->sample_fmt = AV_SAMPLE_FMT_S16;
361 for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
362 m->substream[substr].restart_seen = 0;
364 /* Set the layout for each substream. When there's more than one, the first
365 * substream is Stereo. Subsequent substreams' layouts are indicated in the
367 if (m->avctx->codec_id == AV_CODEC_ID_MLP) {
368 if ((substr = (mh.num_substreams > 1)))
369 m->substream[0].ch_layout = AV_CH_LAYOUT_STEREO;
370 m->substream[substr].ch_layout = mh.channel_layout_mlp;
372 if ((substr = (mh.num_substreams > 1)))
373 m->substream[0].ch_layout = AV_CH_LAYOUT_STEREO;
374 if (mh.num_substreams > 2)
375 if (mh.channel_layout_thd_stream2)
376 m->substream[2].ch_layout = mh.channel_layout_thd_stream2;
378 m->substream[2].ch_layout = mh.channel_layout_thd_stream1;
379 m->substream[substr].ch_layout = mh.channel_layout_thd_stream1;
381 if (m->avctx->channels<=2 && m->substream[substr].ch_layout == AV_CH_LAYOUT_MONO && m->max_decoded_substream == 1) {
382 av_log(m->avctx, AV_LOG_DEBUG, "Mono stream with 2 substreams, ignoring 2nd\n");
383 m->max_decoded_substream = 0;
384 if (m->avctx->channels==2)
385 m->avctx->channel_layout = AV_CH_LAYOUT_STEREO;
389 m->needs_reordering = mh.channel_arrangement >= 18 && mh.channel_arrangement <= 20;
394 /** Read a restart header from a block in a substream. This contains parameters
395 * required to decode the audio that do not change very often. Generally
396 * (always) present only in blocks following a major sync. */
398 static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp,
399 const uint8_t *buf, unsigned int substr)
401 SubStream *s = &m->substream[substr];
405 uint8_t lossless_check;
406 int start_count = get_bits_count(gbp);
407 const int max_matrix_channel = m->avctx->codec_id == AV_CODEC_ID_MLP
408 ? MAX_MATRIX_CHANNEL_MLP
409 : MAX_MATRIX_CHANNEL_TRUEHD;
410 int max_channel, min_channel, matrix_channel;
412 sync_word = get_bits(gbp, 13);
414 if (sync_word != 0x31ea >> 1) {
415 av_log(m->avctx, AV_LOG_ERROR,
416 "restart header sync incorrect (got 0x%04x)\n", sync_word);
417 return AVERROR_INVALIDDATA;
420 s->noise_type = get_bits1(gbp);
422 if (m->avctx->codec_id == AV_CODEC_ID_MLP && s->noise_type) {
423 av_log(m->avctx, AV_LOG_ERROR, "MLP must have 0x31ea sync word.\n");
424 return AVERROR_INVALIDDATA;
427 skip_bits(gbp, 16); /* Output timestamp */
429 min_channel = get_bits(gbp, 4);
430 max_channel = get_bits(gbp, 4);
431 matrix_channel = get_bits(gbp, 4);
433 if (matrix_channel > max_matrix_channel) {
434 av_log(m->avctx, AV_LOG_ERROR,
435 "Max matrix channel cannot be greater than %d.\n",
437 return AVERROR_INVALIDDATA;
440 if (max_channel != matrix_channel) {
441 av_log(m->avctx, AV_LOG_ERROR,
442 "Max channel must be equal max matrix channel.\n");
443 return AVERROR_INVALIDDATA;
446 /* This should happen for TrueHD streams with >6 channels and MLP's noise
447 * type. It is not yet known if this is allowed. */
448 if (max_channel > MAX_MATRIX_CHANNEL_MLP && !s->noise_type) {
449 av_log_ask_for_sample(m->avctx,
450 "Number of channels %d is larger than the maximum supported "
451 "by the decoder.\n", max_channel + 2);
452 return AVERROR_PATCHWELCOME;
455 if (min_channel > max_channel) {
456 av_log(m->avctx, AV_LOG_ERROR,
457 "Substream min channel cannot be greater than max channel.\n");
458 return AVERROR_INVALIDDATA;
461 s->min_channel = min_channel;
462 s->max_channel = max_channel;
463 s->max_matrix_channel = matrix_channel;
465 #if FF_API_REQUEST_CHANNELS
466 if (m->avctx->request_channels > 0 &&
467 m->avctx->request_channels <= s->max_channel + 1 &&
468 m->max_decoded_substream > substr) {
469 av_log(m->avctx, AV_LOG_DEBUG,
470 "Extracting %d-channel downmix from substream %d. "
471 "Further substreams will be skipped.\n",
472 s->max_channel + 1, substr);
473 m->max_decoded_substream = substr;
476 if (m->avctx->request_channel_layout == s->ch_layout &&
477 m->max_decoded_substream > substr) {
478 av_log(m->avctx, AV_LOG_DEBUG,
479 "Extracting %d-channel downmix (0x%"PRIx64") from substream %d. "
480 "Further substreams will be skipped.\n",
481 s->max_channel + 1, s->ch_layout, substr);
482 m->max_decoded_substream = substr;
485 s->noise_shift = get_bits(gbp, 4);
486 s->noisegen_seed = get_bits(gbp, 23);
490 s->data_check_present = get_bits1(gbp);
491 lossless_check = get_bits(gbp, 8);
492 if (substr == m->max_decoded_substream
493 && s->lossless_check_data != 0xffffffff) {
494 tmp = xor_32_to_8(s->lossless_check_data);
495 if (tmp != lossless_check)
496 av_log(m->avctx, AV_LOG_WARNING,
497 "Lossless check failed - expected %02x, calculated %02x.\n",
498 lossless_check, tmp);
503 memset(s->ch_assign, 0, sizeof(s->ch_assign));
505 for (ch = 0; ch <= s->max_matrix_channel; ch++) {
506 int ch_assign = get_bits(gbp, 6);
507 if (m->avctx->codec_id == AV_CODEC_ID_TRUEHD) {
508 uint64_t channel = thd_channel_layout_extract_channel(s->ch_layout,
510 ch_assign = av_get_channel_layout_channel_index(s->ch_layout,
513 if (ch_assign > s->max_matrix_channel) {
514 av_log_ask_for_sample(m->avctx,
515 "Assignment of matrix channel %d to invalid output channel %d.\n",
517 return AVERROR_PATCHWELCOME;
519 s->ch_assign[ch_assign] = ch;
522 checksum = ff_mlp_restart_checksum(buf, get_bits_count(gbp) - start_count);
524 if (checksum != get_bits(gbp, 8))
525 av_log(m->avctx, AV_LOG_ERROR, "restart header checksum error\n");
527 /* Set default decoding parameters. */
528 s->param_presence_flags = 0xff;
529 s->num_primitive_matrices = 0;
531 s->lossless_check_data = 0;
533 memset(s->output_shift , 0, sizeof(s->output_shift ));
534 memset(s->quant_step_size, 0, sizeof(s->quant_step_size));
536 for (ch = s->min_channel; ch <= s->max_channel; ch++) {
537 ChannelParams *cp = &s->channel_params[ch];
538 cp->filter_params[FIR].order = 0;
539 cp->filter_params[IIR].order = 0;
540 cp->filter_params[FIR].shift = 0;
541 cp->filter_params[IIR].shift = 0;
543 /* Default audio coding is 24-bit raw PCM. */
545 cp->sign_huff_offset = (-1) << 23;
550 if (substr == m->max_decoded_substream) {
551 m->avctx->channels = s->max_matrix_channel + 1;
552 m->avctx->channel_layout = s->ch_layout;
554 if (m->avctx->codec_id == AV_CODEC_ID_MLP && m->needs_reordering) {
555 if (m->avctx->channel_layout == (AV_CH_LAYOUT_QUAD|AV_CH_LOW_FREQUENCY) ||
556 m->avctx->channel_layout == AV_CH_LAYOUT_5POINT0_BACK) {
557 int i = s->ch_assign[4];
558 s->ch_assign[4] = s->ch_assign[3];
559 s->ch_assign[3] = s->ch_assign[2];
561 } else if (m->avctx->channel_layout == AV_CH_LAYOUT_5POINT1_BACK) {
562 FFSWAP(int, s->ch_assign[2], s->ch_assign[4]);
563 FFSWAP(int, s->ch_assign[3], s->ch_assign[5]);
572 /** Read parameters for one of the prediction filters. */
574 static int read_filter_params(MLPDecodeContext *m, GetBitContext *gbp,
575 unsigned int substr, unsigned int channel,
578 SubStream *s = &m->substream[substr];
579 FilterParams *fp = &s->channel_params[channel].filter_params[filter];
580 const int max_order = filter ? MAX_IIR_ORDER : MAX_FIR_ORDER;
581 const char fchar = filter ? 'I' : 'F';
584 // Filter is 0 for FIR, 1 for IIR.
585 av_assert0(filter < 2);
587 if (m->filter_changed[channel][filter]++ > 1) {
588 av_log(m->avctx, AV_LOG_ERROR, "Filters may change only once per access unit.\n");
589 return AVERROR_INVALIDDATA;
592 order = get_bits(gbp, 4);
593 if (order > max_order) {
594 av_log(m->avctx, AV_LOG_ERROR,
595 "%cIR filter order %d is greater than maximum %d.\n",
596 fchar, order, max_order);
597 return AVERROR_INVALIDDATA;
602 int32_t *fcoeff = s->channel_params[channel].coeff[filter];
603 int coeff_bits, coeff_shift;
605 fp->shift = get_bits(gbp, 4);
607 coeff_bits = get_bits(gbp, 5);
608 coeff_shift = get_bits(gbp, 3);
609 if (coeff_bits < 1 || coeff_bits > 16) {
610 av_log(m->avctx, AV_LOG_ERROR,
611 "%cIR filter coeff_bits must be between 1 and 16.\n",
613 return AVERROR_INVALIDDATA;
615 if (coeff_bits + coeff_shift > 16) {
616 av_log(m->avctx, AV_LOG_ERROR,
617 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
619 return AVERROR_INVALIDDATA;
622 for (i = 0; i < order; i++)
623 fcoeff[i] = get_sbits(gbp, coeff_bits) << coeff_shift;
625 if (get_bits1(gbp)) {
626 int state_bits, state_shift;
629 av_log(m->avctx, AV_LOG_ERROR,
630 "FIR filter has state data specified.\n");
631 return AVERROR_INVALIDDATA;
634 state_bits = get_bits(gbp, 4);
635 state_shift = get_bits(gbp, 4);
637 /* TODO: Check validity of state data. */
639 for (i = 0; i < order; i++)
640 fp->state[i] = get_sbits(gbp, state_bits) << state_shift;
647 /** Read parameters for primitive matrices. */
649 static int read_matrix_params(MLPDecodeContext *m, unsigned int substr, GetBitContext *gbp)
651 SubStream *s = &m->substream[substr];
652 unsigned int mat, ch;
653 const int max_primitive_matrices = m->avctx->codec_id == AV_CODEC_ID_MLP
655 : MAX_MATRICES_TRUEHD;
657 if (m->matrix_changed++ > 1) {
658 av_log(m->avctx, AV_LOG_ERROR, "Matrices may change only once per access unit.\n");
659 return AVERROR_INVALIDDATA;
662 s->num_primitive_matrices = get_bits(gbp, 4);
664 if (s->num_primitive_matrices > max_primitive_matrices) {
665 av_log(m->avctx, AV_LOG_ERROR,
666 "Number of primitive matrices cannot be greater than %d.\n",
667 max_primitive_matrices);
668 return AVERROR_INVALIDDATA;
671 for (mat = 0; mat < s->num_primitive_matrices; mat++) {
672 int frac_bits, max_chan;
673 s->matrix_out_ch[mat] = get_bits(gbp, 4);
674 frac_bits = get_bits(gbp, 4);
675 s->lsb_bypass [mat] = get_bits1(gbp);
677 if (s->matrix_out_ch[mat] > s->max_matrix_channel) {
678 av_log(m->avctx, AV_LOG_ERROR,
679 "Invalid channel %d specified as output from matrix.\n",
680 s->matrix_out_ch[mat]);
681 return AVERROR_INVALIDDATA;
683 if (frac_bits > 14) {
684 av_log(m->avctx, AV_LOG_ERROR,
685 "Too many fractional bits specified.\n");
686 return AVERROR_INVALIDDATA;
689 max_chan = s->max_matrix_channel;
693 for (ch = 0; ch <= max_chan; ch++) {
696 coeff_val = get_sbits(gbp, frac_bits + 2);
698 s->matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
702 s->matrix_noise_shift[mat] = get_bits(gbp, 4);
704 s->matrix_noise_shift[mat] = 0;
710 /** Read channel parameters. */
712 static int read_channel_params(MLPDecodeContext *m, unsigned int substr,
713 GetBitContext *gbp, unsigned int ch)
715 SubStream *s = &m->substream[substr];
716 ChannelParams *cp = &s->channel_params[ch];
717 FilterParams *fir = &cp->filter_params[FIR];
718 FilterParams *iir = &cp->filter_params[IIR];
721 if (s->param_presence_flags & PARAM_FIR)
723 if ((ret = read_filter_params(m, gbp, substr, ch, FIR)) < 0)
726 if (s->param_presence_flags & PARAM_IIR)
728 if ((ret = read_filter_params(m, gbp, substr, ch, IIR)) < 0)
731 if (fir->order + iir->order > 8) {
732 av_log(m->avctx, AV_LOG_ERROR, "Total filter orders too high.\n");
733 return AVERROR_INVALIDDATA;
736 if (fir->order && iir->order &&
737 fir->shift != iir->shift) {
738 av_log(m->avctx, AV_LOG_ERROR,
739 "FIR and IIR filters must use the same precision.\n");
740 return AVERROR_INVALIDDATA;
742 /* The FIR and IIR filters must have the same precision.
743 * To simplify the filtering code, only the precision of the
744 * FIR filter is considered. If only the IIR filter is employed,
745 * the FIR filter precision is set to that of the IIR filter, so
746 * that the filtering code can use it. */
747 if (!fir->order && iir->order)
748 fir->shift = iir->shift;
750 if (s->param_presence_flags & PARAM_HUFFOFFSET)
752 cp->huff_offset = get_sbits(gbp, 15);
754 cp->codebook = get_bits(gbp, 2);
755 cp->huff_lsbs = get_bits(gbp, 5);
757 if (cp->huff_lsbs > 24) {
758 av_log(m->avctx, AV_LOG_ERROR, "Invalid huff_lsbs.\n");
760 return AVERROR_INVALIDDATA;
763 cp->sign_huff_offset = calculate_sign_huff(m, substr, ch);
768 /** Read decoding parameters that change more often than those in the restart
771 static int read_decoding_params(MLPDecodeContext *m, GetBitContext *gbp,
774 SubStream *s = &m->substream[substr];
778 if (s->param_presence_flags & PARAM_PRESENCE)
780 s->param_presence_flags = get_bits(gbp, 8);
782 if (s->param_presence_flags & PARAM_BLOCKSIZE)
783 if (get_bits1(gbp)) {
784 s->blocksize = get_bits(gbp, 9);
785 if (s->blocksize < 8 || s->blocksize > m->access_unit_size) {
786 av_log(m->avctx, AV_LOG_ERROR, "Invalid blocksize.\n");
788 return AVERROR_INVALIDDATA;
792 if (s->param_presence_flags & PARAM_MATRIX)
794 if ((ret = read_matrix_params(m, substr, gbp)) < 0)
797 if (s->param_presence_flags & PARAM_OUTSHIFT)
799 for (ch = 0; ch <= s->max_matrix_channel; ch++)
800 s->output_shift[ch] = get_sbits(gbp, 4);
802 if (s->param_presence_flags & PARAM_QUANTSTEP)
804 for (ch = 0; ch <= s->max_channel; ch++) {
805 ChannelParams *cp = &s->channel_params[ch];
807 s->quant_step_size[ch] = get_bits(gbp, 4);
809 cp->sign_huff_offset = calculate_sign_huff(m, substr, ch);
812 for (ch = s->min_channel; ch <= s->max_channel; ch++)
814 if ((ret = read_channel_params(m, substr, gbp, ch)) < 0)
820 #define MSB_MASK(bits) (-1u << bits)
822 /** Generate PCM samples using the prediction filters and residual values
823 * read from the data stream, and update the filter state. */
825 static void filter_channel(MLPDecodeContext *m, unsigned int substr,
826 unsigned int channel)
828 SubStream *s = &m->substream[substr];
829 const int32_t *fircoeff = s->channel_params[channel].coeff[FIR];
830 int32_t state_buffer[NUM_FILTERS][MAX_BLOCKSIZE + MAX_FIR_ORDER];
831 int32_t *firbuf = state_buffer[FIR] + MAX_BLOCKSIZE;
832 int32_t *iirbuf = state_buffer[IIR] + MAX_BLOCKSIZE;
833 FilterParams *fir = &s->channel_params[channel].filter_params[FIR];
834 FilterParams *iir = &s->channel_params[channel].filter_params[IIR];
835 unsigned int filter_shift = fir->shift;
836 int32_t mask = MSB_MASK(s->quant_step_size[channel]);
838 memcpy(firbuf, fir->state, MAX_FIR_ORDER * sizeof(int32_t));
839 memcpy(iirbuf, iir->state, MAX_IIR_ORDER * sizeof(int32_t));
841 m->dsp.mlp_filter_channel(firbuf, fircoeff,
842 fir->order, iir->order,
843 filter_shift, mask, s->blocksize,
844 &m->sample_buffer[s->blockpos][channel]);
846 memcpy(fir->state, firbuf - s->blocksize, MAX_FIR_ORDER * sizeof(int32_t));
847 memcpy(iir->state, iirbuf - s->blocksize, MAX_IIR_ORDER * sizeof(int32_t));
850 /** Read a block of PCM residual data (or actual if no filtering active). */
852 static int read_block_data(MLPDecodeContext *m, GetBitContext *gbp,
855 SubStream *s = &m->substream[substr];
856 unsigned int i, ch, expected_stream_pos = 0;
859 if (s->data_check_present) {
860 expected_stream_pos = get_bits_count(gbp);
861 expected_stream_pos += get_bits(gbp, 16);
862 av_log_ask_for_sample(m->avctx, "This file contains some features "
863 "we have not tested yet.\n");
866 if (s->blockpos + s->blocksize > m->access_unit_size) {
867 av_log(m->avctx, AV_LOG_ERROR, "too many audio samples in frame\n");
868 return AVERROR_INVALIDDATA;
871 memset(&m->bypassed_lsbs[s->blockpos][0], 0,
872 s->blocksize * sizeof(m->bypassed_lsbs[0]));
874 for (i = 0; i < s->blocksize; i++)
875 if ((ret = read_huff_channels(m, gbp, substr, i)) < 0)
878 for (ch = s->min_channel; ch <= s->max_channel; ch++)
879 filter_channel(m, substr, ch);
881 s->blockpos += s->blocksize;
883 if (s->data_check_present) {
884 if (get_bits_count(gbp) != expected_stream_pos)
885 av_log(m->avctx, AV_LOG_ERROR, "block data length mismatch\n");
892 /** Data table used for TrueHD noise generation function. */
894 static const int8_t noise_table[256] = {
895 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
896 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
897 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
898 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
899 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
900 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
901 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
902 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
903 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
904 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
905 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
906 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
907 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
908 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
909 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
910 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
913 /** Noise generation functions.
914 * I'm not sure what these are for - they seem to be some kind of pseudorandom
915 * sequence generators, used to generate noise data which is used when the
916 * channels are rematrixed. I'm not sure if they provide a practical benefit
917 * to compression, or just obfuscate the decoder. Are they for some kind of
920 /** Generate two channels of noise, used in the matrix when
921 * restart sync word == 0x31ea. */
923 static void generate_2_noise_channels(MLPDecodeContext *m, unsigned int substr)
925 SubStream *s = &m->substream[substr];
927 uint32_t seed = s->noisegen_seed;
928 unsigned int maxchan = s->max_matrix_channel;
930 for (i = 0; i < s->blockpos; i++) {
931 uint16_t seed_shr7 = seed >> 7;
932 m->sample_buffer[i][maxchan+1] = ((int8_t)(seed >> 15)) << s->noise_shift;
933 m->sample_buffer[i][maxchan+2] = ((int8_t) seed_shr7) << s->noise_shift;
935 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
938 s->noisegen_seed = seed;
941 /** Generate a block of noise, used when restart sync word == 0x31eb. */
943 static void fill_noise_buffer(MLPDecodeContext *m, unsigned int substr)
945 SubStream *s = &m->substream[substr];
947 uint32_t seed = s->noisegen_seed;
949 for (i = 0; i < m->access_unit_size_pow2; i++) {
950 uint8_t seed_shr15 = seed >> 15;
951 m->noise_buffer[i] = noise_table[seed_shr15];
952 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
955 s->noisegen_seed = seed;
959 /** Apply the channel matrices in turn to reconstruct the original audio
962 static void rematrix_channels(MLPDecodeContext *m, unsigned int substr)
964 SubStream *s = &m->substream[substr];
965 unsigned int mat, src_ch, i;
966 unsigned int maxchan;
968 maxchan = s->max_matrix_channel;
969 if (!s->noise_type) {
970 generate_2_noise_channels(m, substr);
973 fill_noise_buffer(m, substr);
976 for (mat = 0; mat < s->num_primitive_matrices; mat++) {
977 int matrix_noise_shift = s->matrix_noise_shift[mat];
978 unsigned int dest_ch = s->matrix_out_ch[mat];
979 int32_t mask = MSB_MASK(s->quant_step_size[dest_ch]);
980 int32_t *coeffs = s->matrix_coeff[mat];
981 int index = s->num_primitive_matrices - mat;
982 int index2 = 2 * index + 1;
984 /* TODO: DSPContext? */
986 for (i = 0; i < s->blockpos; i++) {
987 int32_t bypassed_lsb = m->bypassed_lsbs[i][mat];
988 int32_t *samples = m->sample_buffer[i];
991 for (src_ch = 0; src_ch <= maxchan; src_ch++)
992 accum += (int64_t) samples[src_ch] * coeffs[src_ch];
994 if (matrix_noise_shift) {
995 index &= m->access_unit_size_pow2 - 1;
996 accum += m->noise_buffer[index] << (matrix_noise_shift + 7);
1000 samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb;
1005 /** Write the audio data into the output buffer. */
1007 static int output_data(MLPDecodeContext *m, unsigned int substr,
1008 void *data, int *got_frame_ptr)
1010 AVCodecContext *avctx = m->avctx;
1011 SubStream *s = &m->substream[substr];
1012 unsigned int i, out_ch = 0;
1016 int is32 = (m->avctx->sample_fmt == AV_SAMPLE_FMT_S32);
1018 if (m->avctx->channels != s->max_matrix_channel + 1) {
1019 av_log(m->avctx, AV_LOG_ERROR, "channel count mismatch\n");
1020 return AVERROR_INVALIDDATA;
1023 /* get output buffer */
1024 m->frame.nb_samples = s->blockpos;
1025 if ((ret = ff_get_buffer(avctx, &m->frame)) < 0) {
1026 av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
1029 data_32 = (int32_t *)m->frame.data[0];
1030 data_16 = (int16_t *)m->frame.data[0];
1032 for (i = 0; i < s->blockpos; i++) {
1033 for (out_ch = 0; out_ch <= s->max_matrix_channel; out_ch++) {
1034 int mat_ch = s->ch_assign[out_ch];
1035 int32_t sample = m->sample_buffer[i][mat_ch]
1036 << s->output_shift[mat_ch];
1037 s->lossless_check_data ^= (sample & 0xffffff) << mat_ch;
1038 if (is32) *data_32++ = sample << 8;
1039 else *data_16++ = sample >> 8;
1044 *(AVFrame *)data = m->frame;
1049 /** Read an access unit from the stream.
1050 * @return negative on error, 0 if not enough data is present in the input stream,
1051 * otherwise the number of bytes consumed. */
1053 static int read_access_unit(AVCodecContext *avctx, void* data,
1054 int *got_frame_ptr, AVPacket *avpkt)
1056 const uint8_t *buf = avpkt->data;
1057 int buf_size = avpkt->size;
1058 MLPDecodeContext *m = avctx->priv_data;
1060 unsigned int length, substr;
1061 unsigned int substream_start;
1062 unsigned int header_size = 4;
1063 unsigned int substr_header_size = 0;
1064 uint8_t substream_parity_present[MAX_SUBSTREAMS];
1065 uint16_t substream_data_len[MAX_SUBSTREAMS];
1066 uint8_t parity_bits;
1072 length = (AV_RB16(buf) & 0xfff) * 2;
1074 if (length < 4 || length > buf_size)
1075 return AVERROR_INVALIDDATA;
1077 init_get_bits(&gb, (buf + 4), (length - 4) * 8);
1079 m->is_major_sync_unit = 0;
1080 if (show_bits_long(&gb, 31) == (0xf8726fba >> 1)) {
1081 if (read_major_sync(m, &gb) < 0)
1083 m->is_major_sync_unit = 1;
1087 if (!m->params_valid) {
1088 av_log(m->avctx, AV_LOG_WARNING,
1089 "Stream parameters not seen; skipping frame.\n");
1094 substream_start = 0;
1096 for (substr = 0; substr < m->num_substreams; substr++) {
1097 int extraword_present, checkdata_present, end, nonrestart_substr;
1099 extraword_present = get_bits1(&gb);
1100 nonrestart_substr = get_bits1(&gb);
1101 checkdata_present = get_bits1(&gb);
1104 end = get_bits(&gb, 12) * 2;
1106 substr_header_size += 2;
1108 if (extraword_present) {
1109 if (m->avctx->codec_id == AV_CODEC_ID_MLP) {
1110 av_log(m->avctx, AV_LOG_ERROR, "There must be no extraword for MLP.\n");
1114 substr_header_size += 2;
1117 if (!(nonrestart_substr ^ m->is_major_sync_unit)) {
1118 av_log(m->avctx, AV_LOG_ERROR, "Invalid nonrestart_substr.\n");
1122 if (end + header_size + substr_header_size > length) {
1123 av_log(m->avctx, AV_LOG_ERROR,
1124 "Indicated length of substream %d data goes off end of "
1125 "packet.\n", substr);
1126 end = length - header_size - substr_header_size;
1129 if (end < substream_start) {
1130 av_log(avctx, AV_LOG_ERROR,
1131 "Indicated end offset of substream %d data "
1132 "is smaller than calculated start offset.\n",
1137 if (substr > m->max_decoded_substream)
1140 substream_parity_present[substr] = checkdata_present;
1141 substream_data_len[substr] = end - substream_start;
1142 substream_start = end;
1145 parity_bits = ff_mlp_calculate_parity(buf, 4);
1146 parity_bits ^= ff_mlp_calculate_parity(buf + header_size, substr_header_size);
1148 if ((((parity_bits >> 4) ^ parity_bits) & 0xF) != 0xF) {
1149 av_log(avctx, AV_LOG_ERROR, "Parity check failed.\n");
1153 buf += header_size + substr_header_size;
1155 for (substr = 0; substr <= m->max_decoded_substream; substr++) {
1156 SubStream *s = &m->substream[substr];
1157 init_get_bits(&gb, buf, substream_data_len[substr] * 8);
1159 m->matrix_changed = 0;
1160 memset(m->filter_changed, 0, sizeof(m->filter_changed));
1164 if (get_bits1(&gb)) {
1165 if (get_bits1(&gb)) {
1166 /* A restart header should be present. */
1167 if (read_restart_header(m, &gb, buf, substr) < 0)
1169 s->restart_seen = 1;
1172 if (!s->restart_seen)
1174 if (read_decoding_params(m, &gb, substr) < 0)
1178 if (!s->restart_seen)
1181 if ((ret = read_block_data(m, &gb, substr)) < 0)
1184 if (get_bits_count(&gb) >= substream_data_len[substr] * 8)
1185 goto substream_length_mismatch;
1187 } while (!get_bits1(&gb));
1189 skip_bits(&gb, (-get_bits_count(&gb)) & 15);
1191 if (substream_data_len[substr] * 8 - get_bits_count(&gb) >= 32) {
1194 if (get_bits(&gb, 16) != 0xD234)
1195 return AVERROR_INVALIDDATA;
1197 shorten_by = get_bits(&gb, 16);
1198 if (m->avctx->codec_id == AV_CODEC_ID_TRUEHD && shorten_by & 0x2000)
1199 s->blockpos -= FFMIN(shorten_by & 0x1FFF, s->blockpos);
1200 else if (m->avctx->codec_id == AV_CODEC_ID_MLP && shorten_by != 0xD234)
1201 return AVERROR_INVALIDDATA;
1203 if (substr == m->max_decoded_substream)
1204 av_log(m->avctx, AV_LOG_INFO, "End of stream indicated.\n");
1207 if (substream_parity_present[substr]) {
1208 uint8_t parity, checksum;
1210 if (substream_data_len[substr] * 8 - get_bits_count(&gb) != 16)
1211 goto substream_length_mismatch;
1213 parity = ff_mlp_calculate_parity(buf, substream_data_len[substr] - 2);
1214 checksum = ff_mlp_checksum8 (buf, substream_data_len[substr] - 2);
1216 if ((get_bits(&gb, 8) ^ parity) != 0xa9 )
1217 av_log(m->avctx, AV_LOG_ERROR, "Substream %d parity check failed.\n", substr);
1218 if ( get_bits(&gb, 8) != checksum)
1219 av_log(m->avctx, AV_LOG_ERROR, "Substream %d checksum failed.\n" , substr);
1222 if (substream_data_len[substr] * 8 != get_bits_count(&gb))
1223 goto substream_length_mismatch;
1226 if (!s->restart_seen)
1227 av_log(m->avctx, AV_LOG_ERROR,
1228 "No restart header present in substream %d.\n", substr);
1230 buf += substream_data_len[substr];
1233 rematrix_channels(m, m->max_decoded_substream);
1235 if ((ret = output_data(m, m->max_decoded_substream, data, got_frame_ptr)) < 0)
1240 substream_length_mismatch:
1241 av_log(m->avctx, AV_LOG_ERROR, "substream %d length mismatch\n", substr);
1242 return AVERROR_INVALIDDATA;
1245 m->params_valid = 0;
1246 return AVERROR_INVALIDDATA;
1249 #if CONFIG_MLP_DECODER
1250 AVCodec ff_mlp_decoder = {
1252 .type = AVMEDIA_TYPE_AUDIO,
1253 .id = AV_CODEC_ID_MLP,
1254 .priv_data_size = sizeof(MLPDecodeContext),
1255 .init = mlp_decode_init,
1256 .decode = read_access_unit,
1257 .capabilities = CODEC_CAP_DR1,
1258 .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"),
1261 #if CONFIG_TRUEHD_DECODER
1262 AVCodec ff_truehd_decoder = {
1264 .type = AVMEDIA_TYPE_AUDIO,
1265 .id = AV_CODEC_ID_TRUEHD,
1266 .priv_data_size = sizeof(MLPDecodeContext),
1267 .init = mlp_decode_init,
1268 .decode = read_access_unit,
1269 .capabilities = CODEC_CAP_DR1,
1270 .long_name = NULL_IF_CONFIG_SMALL("TrueHD"),
1272 #endif /* CONFIG_TRUEHD_DECODER */