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)
190 if (!huff_vlc[0].
bits) {
206 unsigned int substr,
unsigned int ch)
215 sign_huff_offset -= 7 << lsb_bits;
218 sign_huff_offset -= 1 << sign_shift;
220 return sign_huff_offset;
227 unsigned int substr,
unsigned int pos)
230 unsigned int mat, channel;
236 for (channel = s->
min_channel; channel <= s->max_channel; channel++) {
240 int lsb_bits = cp->
huff_lsbs - quant_step_size;
251 result = (result << lsb_bits) +
get_bits(gbp, lsb_bits);
254 result <<= quant_step_size;
295 "Channel group 2 cannot have more bits per sample than group 1.\n");
301 "Channel groups with differing sample rates are not currently supported.\n");
311 "Sampling rate %d is greater than the supported maximum (%d).\n",
317 "Block size %d is greater than the supported maximum (%d).\n",
323 "Block size pow2 %d is greater than the supported maximum (%d).\n",
336 "Number of substreams %d is larger than the maximum supported "
395 const uint8_t *buf,
unsigned int substr)
406 int max_channel, min_channel, matrix_channel;
410 if (sync_word != 0x31ea >> 1) {
412 "restart header sync incorrect (got 0x%04x)\n", sync_word);
429 if (matrix_channel > max_matrix_channel) {
431 "Max matrix channel cannot be greater than %d.\n",
436 if (max_channel != matrix_channel) {
438 "Max channel must be equal max matrix channel.\n");
446 "Number of channels %d is larger than the maximum supported "
447 "by the decoder.\n", max_channel + 2);
451 if (min_channel > max_channel) {
453 "Substream min channel cannot be greater than max channel.\n");
461 #if FF_API_REQUEST_CHANNELS
462 if (m->
avctx->request_channels > 0 &&
466 "Extracting %d-channel downmix from substream %d. "
467 "Further substreams will be skipped.\n",
475 "Extracting %d-channel downmix (0x%"PRIx64
") from substream %d. "
476 "Further substreams will be skipped.\n",
491 if (tmp != lossless_check)
493 "Lossless check failed - expected %02x, calculated %02x.\n",
494 lossless_check, tmp);
511 "Assignment of matrix channel %d to invalid output channel %d.\n",
532 for (ch = s->
min_channel; ch <= s->max_channel; ch++) {
571 unsigned int substr,
unsigned int channel,
577 const char fchar = filter ?
'I' :
'F';
589 if (order > max_order) {
591 "%cIR filter order %d is greater than maximum %d.\n",
592 fchar, order, max_order);
599 int coeff_bits, coeff_shift;
605 if (coeff_bits < 1 || coeff_bits > 16) {
607 "%cIR filter coeff_bits must be between 1 and 16.\n",
611 if (coeff_bits + coeff_shift > 16) {
613 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
618 for (i = 0; i < order; i++)
619 fcoeff[i] =
get_sbits(gbp, coeff_bits) << coeff_shift;
622 int state_bits, state_shift;
626 "FIR filter has state data specified.\n");
635 for (i = 0; i < order; i++)
648 unsigned int mat, ch;
662 "Number of primitive matrices cannot be greater than %d.\n",
663 max_primitive_matrices);
668 int frac_bits, max_chan;
675 "Invalid channel %d specified as output from matrix.\n",
679 if (frac_bits > 14) {
681 "Too many fractional bits specified.\n");
689 for (ch = 0; ch <= max_chan; ch++) {
692 coeff_val =
get_sbits(gbp, frac_bits + 2);
694 s->
matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
735 "FIR and IIR filters must use the same precision.\n");
808 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
816 #define MSB_MASK(bits) (-1u << bits)
822 unsigned int channel)
831 unsigned int filter_shift = fir->
shift;
852 unsigned int i, ch, expected_stream_pos = 0;
857 expected_stream_pos +=
get_bits(gbp, 16);
859 "we have not tested yet.\n");
874 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
891 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
892 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
893 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
894 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
895 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
896 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
897 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
898 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
899 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
900 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
901 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
902 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
903 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
904 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
905 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
906 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
927 uint16_t seed_shr7 = seed >> 7;
931 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
946 uint8_t seed_shr15 = seed >> 15;
948 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
961 unsigned int mat, src_ch, i;
962 unsigned int maxchan;
978 int index2 = 2 * index + 1;
987 for (src_ch = 0; src_ch <= maxchan; src_ch++)
988 accum += (int64_t) samples[src_ch] * coeffs[src_ch];
990 if (matrix_noise_shift) {
996 samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb;
1008 unsigned int i, out_ch = 0;
1031 data_16 = (int16_t *)frame->
data[0];
1033 for (i = 0; i < s->
blockpos; i++) {
1039 if (is32) *data_32++ = sample << 8;
1040 else *data_16++ = sample >> 8;
1054 int *got_frame_ptr,
AVPacket *avpkt)
1057 int buf_size = avpkt->
size;
1060 unsigned int length, substr;
1061 unsigned int substream_start;
1062 unsigned int header_size = 4;
1063 unsigned int substr_header_size = 0;
1072 length = (
AV_RB16(buf) & 0xfff) * 2;
1074 if (length < 4 || length > buf_size)
1089 "Stream parameters not seen; skipping frame.\n");
1094 substream_start = 0;
1097 int extraword_present, checkdata_present,
end, nonrestart_substr;
1106 substr_header_size += 2;
1108 if (extraword_present) {
1114 substr_header_size += 2;
1122 if (end + header_size + substr_header_size > length) {
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) {
1131 "Indicated end offset of substream %d data "
1132 "is smaller than calculated start offset.\n",
1140 substream_parity_present[substr] = checkdata_present;
1141 substream_data_len[substr] = end - substream_start;
1142 substream_start =
end;
1148 if ((((parity_bits >> 4) ^ parity_bits) & 0xF) != 0xF) {
1153 buf += header_size + substr_header_size;
1185 goto substream_length_mismatch;
1191 if (substream_data_len[substr] * 8 -
get_bits_count(&gb) >= 32) {
1207 if (substream_parity_present[substr]) {
1211 goto substream_length_mismatch;
1216 if ((
get_bits(&gb, 8) ^ parity) != 0xa9 )
1223 goto substream_length_mismatch;
1228 "No restart header present in substream %d.\n", substr);
1230 buf += substream_data_len[substr];
1240 substream_length_mismatch:
1249 #if CONFIG_MLP_DECODER
1261 #if CONFIG_TRUEHD_DECODER