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
31 #include "libavutil/intreadwrite.h"
33 #include "libavutil/crc.h"
35 #include "mlp_parser.h"
38 /** number of bits used for VLC lookup - longest Huffman code is 9 */
42 static const char* sample_message =
43 "Please file a bug report following the instructions at "
44 "http://ffmpeg.org/bugreports.html and include "
45 "a sample of this file.";
47 typedef struct SubStream {
48 //! Set if a valid restart header has been read. Otherwise the substream cannot be decoded.
52 /** restart header data */
53 //! The type of noise to be used in the rematrix stage.
56 //! The index of the first channel coded in this substream.
58 //! The index of the last channel coded in this substream.
60 //! The number of channels input into the rematrix stage.
61 uint8_t max_matrix_channel;
62 //! For each channel output by the matrix, the output channel to map it to
63 uint8_t ch_assign[MAX_CHANNELS];
65 //! Channel coding parameters for channels in the substream
66 ChannelParams channel_params[MAX_CHANNELS];
68 //! The left shift applied to random noise in 0x31ea substreams.
70 //! The current seed value for the pseudorandom noise generator(s).
71 uint32_t noisegen_seed;
73 //! Set if the substream contains extra info to check the size of VLC blocks.
74 uint8_t data_check_present;
76 //! Bitmask of which parameter sets are conveyed in a decoding parameter block.
77 uint8_t param_presence_flags;
78 #define PARAM_BLOCKSIZE (1 << 7)
79 #define PARAM_MATRIX (1 << 6)
80 #define PARAM_OUTSHIFT (1 << 5)
81 #define PARAM_QUANTSTEP (1 << 4)
82 #define PARAM_FIR (1 << 3)
83 #define PARAM_IIR (1 << 2)
84 #define PARAM_HUFFOFFSET (1 << 1)
85 #define PARAM_PRESENCE (1 << 0)
91 //! Number of matrices to be applied.
92 uint8_t num_primitive_matrices;
94 //! matrix output channel
95 uint8_t matrix_out_ch[MAX_MATRICES];
97 //! Whether the LSBs of the matrix output are encoded in the bitstream.
98 uint8_t lsb_bypass[MAX_MATRICES];
99 //! Matrix coefficients, stored as 2.14 fixed point.
100 int32_t matrix_coeff[MAX_MATRICES][MAX_CHANNELS];
101 //! Left shift to apply to noise values in 0x31eb substreams.
102 uint8_t matrix_noise_shift[MAX_MATRICES];
105 //! Left shift to apply to Huffman-decoded residuals.
106 uint8_t quant_step_size[MAX_CHANNELS];
108 //! number of PCM samples in current audio block
110 //! Number of PCM samples decoded so far in this frame.
113 //! Left shift to apply to decoded PCM values to get final 24-bit output.
114 int8_t output_shift[MAX_CHANNELS];
116 //! Running XOR of all output samples.
117 int32_t lossless_check_data;
121 typedef struct MLPDecodeContext {
122 AVCodecContext *avctx;
124 //! Current access unit being read has a major sync.
125 int is_major_sync_unit;
127 //! Set if a valid major sync block has been read. Otherwise no decoding is possible.
128 uint8_t params_valid;
130 //! Number of substreams contained within this stream.
131 uint8_t num_substreams;
133 //! Index of the last substream to decode - further substreams are skipped.
134 uint8_t max_decoded_substream;
136 //! Stream needs channel reordering to comply with FFmpeg's channel order
137 uint8_t needs_reordering;
139 //! number of PCM samples contained in each frame
140 int access_unit_size;
141 //! next power of two above the number of samples in each frame
142 int access_unit_size_pow2;
144 SubStream substream[MAX_SUBSTREAMS];
147 int filter_changed[MAX_CHANNELS][NUM_FILTERS];
149 int8_t noise_buffer[MAX_BLOCKSIZE_POW2];
150 int8_t bypassed_lsbs[MAX_BLOCKSIZE][MAX_CHANNELS];
151 int32_t sample_buffer[MAX_BLOCKSIZE][MAX_CHANNELS];
156 static VLC huff_vlc[3];
158 /** Initialize static data, constant between all invocations of the codec. */
160 static av_cold void init_static(void)
162 if (!huff_vlc[0].bits) {
163 INIT_VLC_STATIC(&huff_vlc[0], VLC_BITS, 18,
164 &ff_mlp_huffman_tables[0][0][1], 2, 1,
165 &ff_mlp_huffman_tables[0][0][0], 2, 1, 512);
166 INIT_VLC_STATIC(&huff_vlc[1], VLC_BITS, 16,
167 &ff_mlp_huffman_tables[1][0][1], 2, 1,
168 &ff_mlp_huffman_tables[1][0][0], 2, 1, 512);
169 INIT_VLC_STATIC(&huff_vlc[2], VLC_BITS, 15,
170 &ff_mlp_huffman_tables[2][0][1], 2, 1,
171 &ff_mlp_huffman_tables[2][0][0], 2, 1, 512);
177 static inline int32_t calculate_sign_huff(MLPDecodeContext *m,
178 unsigned int substr, unsigned int ch)
180 SubStream *s = &m->substream[substr];
181 ChannelParams *cp = &s->channel_params[ch];
182 int lsb_bits = cp->huff_lsbs - s->quant_step_size[ch];
183 int sign_shift = lsb_bits + (cp->codebook ? 2 - cp->codebook : -1);
184 int32_t sign_huff_offset = cp->huff_offset;
186 if (cp->codebook > 0)
187 sign_huff_offset -= 7 << lsb_bits;
190 sign_huff_offset -= 1 << sign_shift;
192 return sign_huff_offset;
195 /** Read a sample, consisting of either, both or neither of entropy-coded MSBs
198 static inline int read_huff_channels(MLPDecodeContext *m, GetBitContext *gbp,
199 unsigned int substr, unsigned int pos)
201 SubStream *s = &m->substream[substr];
202 unsigned int mat, channel;
204 for (mat = 0; mat < s->num_primitive_matrices; mat++)
205 if (s->lsb_bypass[mat])
206 m->bypassed_lsbs[pos + s->blockpos][mat] = get_bits1(gbp);
208 for (channel = s->min_channel; channel <= s->max_channel; channel++) {
209 ChannelParams *cp = &s->channel_params[channel];
210 int codebook = cp->codebook;
211 int quant_step_size = s->quant_step_size[channel];
212 int lsb_bits = cp->huff_lsbs - quant_step_size;
216 result = get_vlc2(gbp, huff_vlc[codebook-1].table,
217 VLC_BITS, (9 + VLC_BITS - 1) / VLC_BITS);
223 result = (result << lsb_bits) + get_bits(gbp, lsb_bits);
225 result += cp->sign_huff_offset;
226 result <<= quant_step_size;
228 m->sample_buffer[pos + s->blockpos][channel] = result;
234 static av_cold int mlp_decode_init(AVCodecContext *avctx)
236 MLPDecodeContext *m = avctx->priv_data;
241 for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
242 m->substream[substr].lossless_check_data = 0xffffffff;
243 dsputil_init(&m->dsp, avctx);
248 /** Read a major sync info header - contains high level information about
249 * the stream - sample rate, channel arrangement etc. Most of this
250 * information is not actually necessary for decoding, only for playback.
253 static int read_major_sync(MLPDecodeContext *m, GetBitContext *gb)
258 if (ff_mlp_read_major_sync(m->avctx, &mh, gb) != 0)
261 if (mh.group1_bits == 0) {
262 av_log(m->avctx, AV_LOG_ERROR, "invalid/unknown bits per sample\n");
265 if (mh.group2_bits > mh.group1_bits) {
266 av_log(m->avctx, AV_LOG_ERROR,
267 "Channel group 2 cannot have more bits per sample than group 1.\n");
271 if (mh.group2_samplerate && mh.group2_samplerate != mh.group1_samplerate) {
272 av_log(m->avctx, AV_LOG_ERROR,
273 "Channel groups with differing sample rates are not currently supported.\n");
277 if (mh.group1_samplerate == 0) {
278 av_log(m->avctx, AV_LOG_ERROR, "invalid/unknown sampling rate\n");
281 if (mh.group1_samplerate > MAX_SAMPLERATE) {
282 av_log(m->avctx, AV_LOG_ERROR,
283 "Sampling rate %d is greater than the supported maximum (%d).\n",
284 mh.group1_samplerate, MAX_SAMPLERATE);
287 if (mh.access_unit_size > MAX_BLOCKSIZE) {
288 av_log(m->avctx, AV_LOG_ERROR,
289 "Block size %d is greater than the supported maximum (%d).\n",
290 mh.access_unit_size, MAX_BLOCKSIZE);
293 if (mh.access_unit_size_pow2 > MAX_BLOCKSIZE_POW2) {
294 av_log(m->avctx, AV_LOG_ERROR,
295 "Block size pow2 %d is greater than the supported maximum (%d).\n",
296 mh.access_unit_size_pow2, MAX_BLOCKSIZE_POW2);
300 if (mh.num_substreams == 0)
302 if (m->avctx->codec_id == CODEC_ID_MLP && mh.num_substreams > 2) {
303 av_log(m->avctx, AV_LOG_ERROR, "MLP only supports up to 2 substreams.\n");
306 if (mh.num_substreams > MAX_SUBSTREAMS) {
307 av_log(m->avctx, AV_LOG_ERROR,
308 "Number of substreams %d is larger than the maximum supported "
309 "by the decoder. %s\n", mh.num_substreams, sample_message);
313 m->access_unit_size = mh.access_unit_size;
314 m->access_unit_size_pow2 = mh.access_unit_size_pow2;
316 m->num_substreams = mh.num_substreams;
317 m->max_decoded_substream = m->num_substreams - 1;
319 m->avctx->sample_rate = mh.group1_samplerate;
320 m->avctx->frame_size = mh.access_unit_size;
322 m->avctx->bits_per_raw_sample = mh.group1_bits;
323 if (mh.group1_bits > 16)
324 m->avctx->sample_fmt = AV_SAMPLE_FMT_S32;
326 m->avctx->sample_fmt = AV_SAMPLE_FMT_S16;
329 for (substr = 0; substr < MAX_SUBSTREAMS; substr++)
330 m->substream[substr].restart_seen = 0;
332 if (mh.stream_type == 0xbb) {
334 m->avctx->channel_layout = ff_mlp_layout[mh.channels_mlp];
335 } else { /* mh.stream_type == 0xba */
337 if (mh.channels_thd_stream2) {
338 m->avctx->channel_layout = ff_truehd_layout(mh.channels_thd_stream2);
340 m->avctx->channel_layout = ff_truehd_layout(mh.channels_thd_stream1);
342 if (m->avctx->channels &&
343 av_get_channel_layout_nb_channels(m->avctx->channel_layout) != m->avctx->channels) {
344 m->avctx->channel_layout = 0;
345 av_log_ask_for_sample(m->avctx, "Unknown channel layout.");
349 m->needs_reordering = mh.channels_mlp >= 18 && mh.channels_mlp <= 20;
354 /** Read a restart header from a block in a substream. This contains parameters
355 * required to decode the audio that do not change very often. Generally
356 * (always) present only in blocks following a major sync. */
358 static int read_restart_header(MLPDecodeContext *m, GetBitContext *gbp,
359 const uint8_t *buf, unsigned int substr)
361 SubStream *s = &m->substream[substr];
365 uint8_t lossless_check;
366 int start_count = get_bits_count(gbp);
367 const int max_matrix_channel = m->avctx->codec_id == CODEC_ID_MLP
368 ? MAX_MATRIX_CHANNEL_MLP
369 : MAX_MATRIX_CHANNEL_TRUEHD;
371 sync_word = get_bits(gbp, 13);
373 if (sync_word != 0x31ea >> 1) {
374 av_log(m->avctx, AV_LOG_ERROR,
375 "restart header sync incorrect (got 0x%04x)\n", sync_word);
379 s->noise_type = get_bits1(gbp);
381 if (m->avctx->codec_id == CODEC_ID_MLP && s->noise_type) {
382 av_log(m->avctx, AV_LOG_ERROR, "MLP must have 0x31ea sync word.\n");
386 skip_bits(gbp, 16); /* Output timestamp */
388 s->min_channel = get_bits(gbp, 4);
389 s->max_channel = get_bits(gbp, 4);
390 s->max_matrix_channel = get_bits(gbp, 4);
392 if (s->max_matrix_channel > max_matrix_channel) {
393 av_log(m->avctx, AV_LOG_ERROR,
394 "Max matrix channel cannot be greater than %d.\n",
399 if (s->max_channel != s->max_matrix_channel) {
400 av_log(m->avctx, AV_LOG_ERROR,
401 "Max channel must be equal max matrix channel.\n");
405 /* This should happen for TrueHD streams with >6 channels and MLP's noise
406 * type. It is not yet known if this is allowed. */
407 if (s->max_channel > MAX_MATRIX_CHANNEL_MLP && !s->noise_type) {
408 av_log(m->avctx, AV_LOG_ERROR,
409 "Number of channels %d is larger than the maximum supported "
410 "by the decoder. %s\n", s->max_channel+2, sample_message);
414 if (s->min_channel > s->max_channel) {
415 av_log(m->avctx, AV_LOG_ERROR,
416 "Substream min channel cannot be greater than max channel.\n");
420 if (m->avctx->request_channels > 0
421 && s->max_channel + 1 >= m->avctx->request_channels
422 && substr < m->max_decoded_substream) {
423 av_log(m->avctx, AV_LOG_DEBUG,
424 "Extracting %d channel downmix from substream %d. "
425 "Further substreams will be skipped.\n",
426 s->max_channel + 1, substr);
427 m->max_decoded_substream = substr;
430 s->noise_shift = get_bits(gbp, 4);
431 s->noisegen_seed = get_bits(gbp, 23);
435 s->data_check_present = get_bits1(gbp);
436 lossless_check = get_bits(gbp, 8);
437 if (substr == m->max_decoded_substream
438 && s->lossless_check_data != 0xffffffff) {
439 tmp = xor_32_to_8(s->lossless_check_data);
440 if (tmp != lossless_check)
441 av_log(m->avctx, AV_LOG_WARNING,
442 "Lossless check failed - expected %02x, calculated %02x.\n",
443 lossless_check, tmp);
448 memset(s->ch_assign, 0, sizeof(s->ch_assign));
450 for (ch = 0; ch <= s->max_matrix_channel; ch++) {
451 int ch_assign = get_bits(gbp, 6);
452 if (ch_assign > s->max_matrix_channel) {
453 av_log(m->avctx, AV_LOG_ERROR,
454 "Assignment of matrix channel %d to invalid output channel %d. %s\n",
455 ch, ch_assign, sample_message);
458 s->ch_assign[ch_assign] = ch;
461 if (m->avctx->codec_id == CODEC_ID_MLP && m->needs_reordering) {
462 if (m->avctx->channel_layout == (AV_CH_LAYOUT_2_2|AV_CH_LOW_FREQUENCY) ||
463 m->avctx->channel_layout == AV_CH_LAYOUT_5POINT0) {
464 int i = s->ch_assign[4];
465 s->ch_assign[4] = s->ch_assign[3];
466 s->ch_assign[3] = s->ch_assign[2];
468 } else if (m->avctx->channel_layout == AV_CH_LAYOUT_5POINT1) {
469 FFSWAP(int, s->ch_assign[2], s->ch_assign[4]);
470 FFSWAP(int, s->ch_assign[3], s->ch_assign[5]);
473 if (m->avctx->codec_id == CODEC_ID_TRUEHD &&
474 m->avctx->channel_layout == AV_CH_LAYOUT_7POINT1) {
475 FFSWAP(int, s->ch_assign[4], s->ch_assign[6]);
476 FFSWAP(int, s->ch_assign[5], s->ch_assign[7]);
479 checksum = ff_mlp_restart_checksum(buf, get_bits_count(gbp) - start_count);
481 if (checksum != get_bits(gbp, 8))
482 av_log(m->avctx, AV_LOG_ERROR, "restart header checksum error\n");
484 /* Set default decoding parameters. */
485 s->param_presence_flags = 0xff;
486 s->num_primitive_matrices = 0;
488 s->lossless_check_data = 0;
490 memset(s->output_shift , 0, sizeof(s->output_shift ));
491 memset(s->quant_step_size, 0, sizeof(s->quant_step_size));
493 for (ch = s->min_channel; ch <= s->max_channel; ch++) {
494 ChannelParams *cp = &s->channel_params[ch];
495 cp->filter_params[FIR].order = 0;
496 cp->filter_params[IIR].order = 0;
497 cp->filter_params[FIR].shift = 0;
498 cp->filter_params[IIR].shift = 0;
500 /* Default audio coding is 24-bit raw PCM. */
502 cp->sign_huff_offset = (-1) << 23;
507 if (substr == m->max_decoded_substream)
508 m->avctx->channels = s->max_matrix_channel + 1;
513 /** Read parameters for one of the prediction filters. */
515 static int read_filter_params(MLPDecodeContext *m, GetBitContext *gbp,
516 unsigned int substr, unsigned int channel,
519 SubStream *s = &m->substream[substr];
520 FilterParams *fp = &s->channel_params[channel].filter_params[filter];
521 const int max_order = filter ? MAX_IIR_ORDER : MAX_FIR_ORDER;
522 const char fchar = filter ? 'I' : 'F';
525 // Filter is 0 for FIR, 1 for IIR.
528 if (m->filter_changed[channel][filter]++ > 1) {
529 av_log(m->avctx, AV_LOG_ERROR, "Filters may change only once per access unit.\n");
533 order = get_bits(gbp, 4);
534 if (order > max_order) {
535 av_log(m->avctx, AV_LOG_ERROR,
536 "%cIR filter order %d is greater than maximum %d.\n",
537 fchar, order, max_order);
543 int32_t *fcoeff = s->channel_params[channel].coeff[filter];
544 int coeff_bits, coeff_shift;
546 fp->shift = get_bits(gbp, 4);
548 coeff_bits = get_bits(gbp, 5);
549 coeff_shift = get_bits(gbp, 3);
550 if (coeff_bits < 1 || coeff_bits > 16) {
551 av_log(m->avctx, AV_LOG_ERROR,
552 "%cIR filter coeff_bits must be between 1 and 16.\n",
556 if (coeff_bits + coeff_shift > 16) {
557 av_log(m->avctx, AV_LOG_ERROR,
558 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
563 for (i = 0; i < order; i++)
564 fcoeff[i] = get_sbits(gbp, coeff_bits) << coeff_shift;
566 if (get_bits1(gbp)) {
567 int state_bits, state_shift;
570 av_log(m->avctx, AV_LOG_ERROR,
571 "FIR filter has state data specified.\n");
575 state_bits = get_bits(gbp, 4);
576 state_shift = get_bits(gbp, 4);
578 /* TODO: Check validity of state data. */
580 for (i = 0; i < order; i++)
581 fp->state[i] = get_sbits(gbp, state_bits) << state_shift;
588 /** Read parameters for primitive matrices. */
590 static int read_matrix_params(MLPDecodeContext *m, unsigned int substr, GetBitContext *gbp)
592 SubStream *s = &m->substream[substr];
593 unsigned int mat, ch;
594 const int max_primitive_matrices = m->avctx->codec_id == CODEC_ID_MLP
596 : MAX_MATRICES_TRUEHD;
598 if (m->matrix_changed++ > 1) {
599 av_log(m->avctx, AV_LOG_ERROR, "Matrices may change only once per access unit.\n");
603 s->num_primitive_matrices = get_bits(gbp, 4);
605 if (s->num_primitive_matrices > max_primitive_matrices) {
606 av_log(m->avctx, AV_LOG_ERROR,
607 "Number of primitive matrices cannot be greater than %d.\n",
608 max_primitive_matrices);
612 for (mat = 0; mat < s->num_primitive_matrices; mat++) {
613 int frac_bits, max_chan;
614 s->matrix_out_ch[mat] = get_bits(gbp, 4);
615 frac_bits = get_bits(gbp, 4);
616 s->lsb_bypass [mat] = get_bits1(gbp);
618 if (s->matrix_out_ch[mat] > s->max_matrix_channel) {
619 av_log(m->avctx, AV_LOG_ERROR,
620 "Invalid channel %d specified as output from matrix.\n",
621 s->matrix_out_ch[mat]);
624 if (frac_bits > 14) {
625 av_log(m->avctx, AV_LOG_ERROR,
626 "Too many fractional bits specified.\n");
630 max_chan = s->max_matrix_channel;
634 for (ch = 0; ch <= max_chan; ch++) {
637 coeff_val = get_sbits(gbp, frac_bits + 2);
639 s->matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
643 s->matrix_noise_shift[mat] = get_bits(gbp, 4);
645 s->matrix_noise_shift[mat] = 0;
651 /** Read channel parameters. */
653 static int read_channel_params(MLPDecodeContext *m, unsigned int substr,
654 GetBitContext *gbp, unsigned int ch)
656 SubStream *s = &m->substream[substr];
657 ChannelParams *cp = &s->channel_params[ch];
658 FilterParams *fir = &cp->filter_params[FIR];
659 FilterParams *iir = &cp->filter_params[IIR];
661 if (s->param_presence_flags & PARAM_FIR)
663 if (read_filter_params(m, gbp, substr, ch, FIR) < 0)
666 if (s->param_presence_flags & PARAM_IIR)
668 if (read_filter_params(m, gbp, substr, ch, IIR) < 0)
671 if (fir->order + iir->order > 8) {
672 av_log(m->avctx, AV_LOG_ERROR, "Total filter orders too high.\n");
676 if (fir->order && iir->order &&
677 fir->shift != iir->shift) {
678 av_log(m->avctx, AV_LOG_ERROR,
679 "FIR and IIR filters must use the same precision.\n");
682 /* The FIR and IIR filters must have the same precision.
683 * To simplify the filtering code, only the precision of the
684 * FIR filter is considered. If only the IIR filter is employed,
685 * the FIR filter precision is set to that of the IIR filter, so
686 * that the filtering code can use it. */
687 if (!fir->order && iir->order)
688 fir->shift = iir->shift;
690 if (s->param_presence_flags & PARAM_HUFFOFFSET)
692 cp->huff_offset = get_sbits(gbp, 15);
694 cp->codebook = get_bits(gbp, 2);
695 cp->huff_lsbs = get_bits(gbp, 5);
697 if (cp->huff_lsbs > 24) {
698 av_log(m->avctx, AV_LOG_ERROR, "Invalid huff_lsbs.\n");
702 cp->sign_huff_offset = calculate_sign_huff(m, substr, ch);
707 /** Read decoding parameters that change more often than those in the restart
710 static int read_decoding_params(MLPDecodeContext *m, GetBitContext *gbp,
713 SubStream *s = &m->substream[substr];
716 if (s->param_presence_flags & PARAM_PRESENCE)
718 s->param_presence_flags = get_bits(gbp, 8);
720 if (s->param_presence_flags & PARAM_BLOCKSIZE)
721 if (get_bits1(gbp)) {
722 s->blocksize = get_bits(gbp, 9);
723 if (s->blocksize < 8 || s->blocksize > m->access_unit_size) {
724 av_log(m->avctx, AV_LOG_ERROR, "Invalid blocksize.");
730 if (s->param_presence_flags & PARAM_MATRIX)
732 if (read_matrix_params(m, substr, gbp) < 0)
735 if (s->param_presence_flags & PARAM_OUTSHIFT)
737 for (ch = 0; ch <= s->max_matrix_channel; ch++)
738 s->output_shift[ch] = get_sbits(gbp, 4);
740 if (s->param_presence_flags & PARAM_QUANTSTEP)
742 for (ch = 0; ch <= s->max_channel; ch++) {
743 ChannelParams *cp = &s->channel_params[ch];
745 s->quant_step_size[ch] = get_bits(gbp, 4);
747 cp->sign_huff_offset = calculate_sign_huff(m, substr, ch);
750 for (ch = s->min_channel; ch <= s->max_channel; ch++)
752 if (read_channel_params(m, substr, gbp, ch) < 0)
758 #define MSB_MASK(bits) (-1u << bits)
760 /** Generate PCM samples using the prediction filters and residual values
761 * read from the data stream, and update the filter state. */
763 static void filter_channel(MLPDecodeContext *m, unsigned int substr,
764 unsigned int channel)
766 SubStream *s = &m->substream[substr];
767 const int32_t *fircoeff = s->channel_params[channel].coeff[FIR];
768 int32_t state_buffer[NUM_FILTERS][MAX_BLOCKSIZE + MAX_FIR_ORDER];
769 int32_t *firbuf = state_buffer[FIR] + MAX_BLOCKSIZE;
770 int32_t *iirbuf = state_buffer[IIR] + MAX_BLOCKSIZE;
771 FilterParams *fir = &s->channel_params[channel].filter_params[FIR];
772 FilterParams *iir = &s->channel_params[channel].filter_params[IIR];
773 unsigned int filter_shift = fir->shift;
774 int32_t mask = MSB_MASK(s->quant_step_size[channel]);
776 memcpy(firbuf, fir->state, MAX_FIR_ORDER * sizeof(int32_t));
777 memcpy(iirbuf, iir->state, MAX_IIR_ORDER * sizeof(int32_t));
779 m->dsp.mlp_filter_channel(firbuf, fircoeff,
780 fir->order, iir->order,
781 filter_shift, mask, s->blocksize,
782 &m->sample_buffer[s->blockpos][channel]);
784 memcpy(fir->state, firbuf - s->blocksize, MAX_FIR_ORDER * sizeof(int32_t));
785 memcpy(iir->state, iirbuf - s->blocksize, MAX_IIR_ORDER * sizeof(int32_t));
788 /** Read a block of PCM residual data (or actual if no filtering active). */
790 static int read_block_data(MLPDecodeContext *m, GetBitContext *gbp,
793 SubStream *s = &m->substream[substr];
794 unsigned int i, ch, expected_stream_pos = 0;
796 if (s->data_check_present) {
797 expected_stream_pos = get_bits_count(gbp);
798 expected_stream_pos += get_bits(gbp, 16);
799 av_log(m->avctx, AV_LOG_WARNING, "This file contains some features "
800 "we have not tested yet. %s\n", sample_message);
803 if (s->blockpos + s->blocksize > m->access_unit_size) {
804 av_log(m->avctx, AV_LOG_ERROR, "too many audio samples in frame\n");
808 memset(&m->bypassed_lsbs[s->blockpos][0], 0,
809 s->blocksize * sizeof(m->bypassed_lsbs[0]));
811 for (i = 0; i < s->blocksize; i++)
812 if (read_huff_channels(m, gbp, substr, i) < 0)
815 for (ch = s->min_channel; ch <= s->max_channel; ch++)
816 filter_channel(m, substr, ch);
818 s->blockpos += s->blocksize;
820 if (s->data_check_present) {
821 if (get_bits_count(gbp) != expected_stream_pos)
822 av_log(m->avctx, AV_LOG_ERROR, "block data length mismatch\n");
829 /** Data table used for TrueHD noise generation function. */
831 static const int8_t noise_table[256] = {
832 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
833 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
834 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
835 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
836 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
837 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
838 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
839 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
840 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
841 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
842 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
843 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
844 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
845 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
846 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
847 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
850 /** Noise generation functions.
851 * I'm not sure what these are for - they seem to be some kind of pseudorandom
852 * sequence generators, used to generate noise data which is used when the
853 * channels are rematrixed. I'm not sure if they provide a practical benefit
854 * to compression, or just obfuscate the decoder. Are they for some kind of
857 /** Generate two channels of noise, used in the matrix when
858 * restart sync word == 0x31ea. */
860 static void generate_2_noise_channels(MLPDecodeContext *m, unsigned int substr)
862 SubStream *s = &m->substream[substr];
864 uint32_t seed = s->noisegen_seed;
865 unsigned int maxchan = s->max_matrix_channel;
867 for (i = 0; i < s->blockpos; i++) {
868 uint16_t seed_shr7 = seed >> 7;
869 m->sample_buffer[i][maxchan+1] = ((int8_t)(seed >> 15)) << s->noise_shift;
870 m->sample_buffer[i][maxchan+2] = ((int8_t) seed_shr7) << s->noise_shift;
872 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
875 s->noisegen_seed = seed;
878 /** Generate a block of noise, used when restart sync word == 0x31eb. */
880 static void fill_noise_buffer(MLPDecodeContext *m, unsigned int substr)
882 SubStream *s = &m->substream[substr];
884 uint32_t seed = s->noisegen_seed;
886 for (i = 0; i < m->access_unit_size_pow2; i++) {
887 uint8_t seed_shr15 = seed >> 15;
888 m->noise_buffer[i] = noise_table[seed_shr15];
889 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
892 s->noisegen_seed = seed;
896 /** Apply the channel matrices in turn to reconstruct the original audio
899 static void rematrix_channels(MLPDecodeContext *m, unsigned int substr)
901 SubStream *s = &m->substream[substr];
902 unsigned int mat, src_ch, i;
903 unsigned int maxchan;
905 maxchan = s->max_matrix_channel;
906 if (!s->noise_type) {
907 generate_2_noise_channels(m, substr);
910 fill_noise_buffer(m, substr);
913 for (mat = 0; mat < s->num_primitive_matrices; mat++) {
914 int matrix_noise_shift = s->matrix_noise_shift[mat];
915 unsigned int dest_ch = s->matrix_out_ch[mat];
916 int32_t mask = MSB_MASK(s->quant_step_size[dest_ch]);
917 int32_t *coeffs = s->matrix_coeff[mat];
918 int index = s->num_primitive_matrices - mat;
919 int index2 = 2 * index + 1;
921 /* TODO: DSPContext? */
923 for (i = 0; i < s->blockpos; i++) {
924 int32_t bypassed_lsb = m->bypassed_lsbs[i][mat];
925 int32_t *samples = m->sample_buffer[i];
928 for (src_ch = 0; src_ch <= maxchan; src_ch++)
929 accum += (int64_t) samples[src_ch] * coeffs[src_ch];
931 if (matrix_noise_shift) {
932 index &= m->access_unit_size_pow2 - 1;
933 accum += m->noise_buffer[index] << (matrix_noise_shift + 7);
937 samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb;
942 /** Write the audio data into the output buffer. */
944 static int output_data_internal(MLPDecodeContext *m, unsigned int substr,
945 uint8_t *data, unsigned int *data_size, int is32)
947 SubStream *s = &m->substream[substr];
948 unsigned int i, out_ch = 0;
949 int32_t *data_32 = (int32_t*) data;
950 int16_t *data_16 = (int16_t*) data;
952 if (*data_size < (s->max_channel + 1) * s->blockpos * (is32 ? 4 : 2))
955 for (i = 0; i < s->blockpos; i++) {
956 for (out_ch = 0; out_ch <= s->max_matrix_channel; out_ch++) {
957 int mat_ch = s->ch_assign[out_ch];
958 int32_t sample = m->sample_buffer[i][mat_ch]
959 << s->output_shift[mat_ch];
960 s->lossless_check_data ^= (sample & 0xffffff) << mat_ch;
961 if (is32) *data_32++ = sample << 8;
962 else *data_16++ = sample >> 8;
966 *data_size = i * out_ch * (is32 ? 4 : 2);
971 static int output_data(MLPDecodeContext *m, unsigned int substr,
972 uint8_t *data, unsigned int *data_size)
974 if (m->avctx->sample_fmt == AV_SAMPLE_FMT_S32)
975 return output_data_internal(m, substr, data, data_size, 1);
977 return output_data_internal(m, substr, data, data_size, 0);
981 /** Read an access unit from the stream.
982 * @return negative on error, 0 if not enough data is present in the input stream,
983 * otherwise the number of bytes consumed. */
985 static int read_access_unit(AVCodecContext *avctx, void* data, int *data_size,
988 const uint8_t *buf = avpkt->data;
989 int buf_size = avpkt->size;
990 MLPDecodeContext *m = avctx->priv_data;
992 unsigned int length, substr;
993 unsigned int substream_start;
994 unsigned int header_size = 4;
995 unsigned int substr_header_size = 0;
996 uint8_t substream_parity_present[MAX_SUBSTREAMS];
997 uint16_t substream_data_len[MAX_SUBSTREAMS];
1003 length = (AV_RB16(buf) & 0xfff) * 2;
1005 if (length < 4 || length > buf_size)
1008 init_get_bits(&gb, (buf + 4), (length - 4) * 8);
1010 m->is_major_sync_unit = 0;
1011 if (show_bits_long(&gb, 31) == (0xf8726fba >> 1)) {
1012 if (read_major_sync(m, &gb) < 0)
1014 m->is_major_sync_unit = 1;
1018 if (!m->params_valid) {
1019 av_log(m->avctx, AV_LOG_WARNING,
1020 "Stream parameters not seen; skipping frame.\n");
1025 substream_start = 0;
1027 for (substr = 0; substr < m->num_substreams; substr++) {
1028 int extraword_present, checkdata_present, end, nonrestart_substr;
1030 extraword_present = get_bits1(&gb);
1031 nonrestart_substr = get_bits1(&gb);
1032 checkdata_present = get_bits1(&gb);
1035 end = get_bits(&gb, 12) * 2;
1037 substr_header_size += 2;
1039 if (extraword_present) {
1040 if (m->avctx->codec_id == CODEC_ID_MLP) {
1041 av_log(m->avctx, AV_LOG_ERROR, "There must be no extraword for MLP.\n");
1045 substr_header_size += 2;
1048 if (!(nonrestart_substr ^ m->is_major_sync_unit)) {
1049 av_log(m->avctx, AV_LOG_ERROR, "Invalid nonrestart_substr.\n");
1053 if (end + header_size + substr_header_size > length) {
1054 av_log(m->avctx, AV_LOG_ERROR,
1055 "Indicated length of substream %d data goes off end of "
1056 "packet.\n", substr);
1057 end = length - header_size - substr_header_size;
1060 if (end < substream_start) {
1061 av_log(avctx, AV_LOG_ERROR,
1062 "Indicated end offset of substream %d data "
1063 "is smaller than calculated start offset.\n",
1068 if (substr > m->max_decoded_substream)
1071 substream_parity_present[substr] = checkdata_present;
1072 substream_data_len[substr] = end - substream_start;
1073 substream_start = end;
1076 parity_bits = ff_mlp_calculate_parity(buf, 4);
1077 parity_bits ^= ff_mlp_calculate_parity(buf + header_size, substr_header_size);
1079 if ((((parity_bits >> 4) ^ parity_bits) & 0xF) != 0xF) {
1080 av_log(avctx, AV_LOG_ERROR, "Parity check failed.\n");
1084 buf += header_size + substr_header_size;
1086 for (substr = 0; substr <= m->max_decoded_substream; substr++) {
1087 SubStream *s = &m->substream[substr];
1088 init_get_bits(&gb, buf, substream_data_len[substr] * 8);
1090 m->matrix_changed = 0;
1091 memset(m->filter_changed, 0, sizeof(m->filter_changed));
1095 if (get_bits1(&gb)) {
1096 if (get_bits1(&gb)) {
1097 /* A restart header should be present. */
1098 if (read_restart_header(m, &gb, buf, substr) < 0)
1100 s->restart_seen = 1;
1103 if (!s->restart_seen)
1105 if (read_decoding_params(m, &gb, substr) < 0)
1109 if (!s->restart_seen)
1112 if (read_block_data(m, &gb, substr) < 0)
1115 if (get_bits_count(&gb) >= substream_data_len[substr] * 8)
1116 goto substream_length_mismatch;
1118 } while (!get_bits1(&gb));
1120 skip_bits(&gb, (-get_bits_count(&gb)) & 15);
1122 if (substream_data_len[substr] * 8 - get_bits_count(&gb) >= 32) {
1125 if (get_bits(&gb, 16) != 0xD234)
1128 shorten_by = get_bits(&gb, 16);
1129 if (m->avctx->codec_id == CODEC_ID_TRUEHD && shorten_by & 0x2000)
1130 s->blockpos -= FFMIN(shorten_by & 0x1FFF, s->blockpos);
1131 else if (m->avctx->codec_id == CODEC_ID_MLP && shorten_by != 0xD234)
1134 if (substr == m->max_decoded_substream)
1135 av_log(m->avctx, AV_LOG_INFO, "End of stream indicated.\n");
1138 if (substream_parity_present[substr]) {
1139 uint8_t parity, checksum;
1141 if (substream_data_len[substr] * 8 - get_bits_count(&gb) != 16)
1142 goto substream_length_mismatch;
1144 parity = ff_mlp_calculate_parity(buf, substream_data_len[substr] - 2);
1145 checksum = ff_mlp_checksum8 (buf, substream_data_len[substr] - 2);
1147 if ((get_bits(&gb, 8) ^ parity) != 0xa9 )
1148 av_log(m->avctx, AV_LOG_ERROR, "Substream %d parity check failed.\n", substr);
1149 if ( get_bits(&gb, 8) != checksum)
1150 av_log(m->avctx, AV_LOG_ERROR, "Substream %d checksum failed.\n" , substr);
1153 if (substream_data_len[substr] * 8 != get_bits_count(&gb))
1154 goto substream_length_mismatch;
1157 if (!s->restart_seen)
1158 av_log(m->avctx, AV_LOG_ERROR,
1159 "No restart header present in substream %d.\n", substr);
1161 buf += substream_data_len[substr];
1164 rematrix_channels(m, m->max_decoded_substream);
1166 if (output_data(m, m->max_decoded_substream, data, data_size) < 0)
1171 substream_length_mismatch:
1172 av_log(m->avctx, AV_LOG_ERROR, "substream %d length mismatch\n", substr);
1176 m->params_valid = 0;
1180 AVCodec ff_mlp_decoder = {
1184 sizeof(MLPDecodeContext),
1189 .long_name = NULL_IF_CONFIG_SMALL("MLP (Meridian Lossless Packing)"),
1192 #if CONFIG_TRUEHD_DECODER
1193 AVCodec ff_truehd_decoder = {
1197 sizeof(MLPDecodeContext),
1202 .long_name = NULL_IF_CONFIG_SMALL("TrueHD"),
1204 #endif /* CONFIG_TRUEHD_DECODER */