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 "%d substreams (more than the "
337 "maximum supported by the decoder)",
407 int max_channel, min_channel, matrix_channel;
411 if (sync_word != 0x31ea >> 1) {
413 "restart header sync incorrect (got 0x%04x)\n", sync_word);
430 if (matrix_channel > max_matrix_channel) {
432 "Max matrix channel cannot be greater than %d.\n",
437 if (max_channel != matrix_channel) {
439 "Max channel must be equal max matrix channel.\n");
447 "%d channels (more than the "
448 "maximum supported by the decoder)",
453 if (min_channel > max_channel) {
455 "Substream min channel cannot be greater than max channel.\n");
463 #if FF_API_REQUEST_CHANNELS
464 if (m->
avctx->request_channels > 0 &&
468 "Extracting %d-channel downmix from substream %d. "
469 "Further substreams will be skipped.\n",
477 "Extracting %d-channel downmix (0x%"PRIx64
") from substream %d. "
478 "Further substreams will be skipped.\n",
493 if (tmp != lossless_check)
495 "Lossless check failed - expected %02x, calculated %02x.\n",
496 lossless_check, tmp);
513 "Assignment of matrix channel %d to invalid output channel %d",
534 for (ch = s->
min_channel; ch <= s->max_channel; ch++) {
573 unsigned int substr,
unsigned int channel,
579 const char fchar = filter ?
'I' :
'F';
591 if (order > max_order) {
593 "%cIR filter order %d is greater than maximum %d.\n",
594 fchar, order, max_order);
601 int coeff_bits, coeff_shift;
607 if (coeff_bits < 1 || coeff_bits > 16) {
609 "%cIR filter coeff_bits must be between 1 and 16.\n",
613 if (coeff_bits + coeff_shift > 16) {
615 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
620 for (i = 0; i < order; i++)
621 fcoeff[i] =
get_sbits(gbp, coeff_bits) << coeff_shift;
624 int state_bits, state_shift;
628 "FIR filter has state data specified.\n");
637 for (i = 0; i < order; i++)
638 fp->
state[i] = state_bits ?
get_sbits(gbp, state_bits) << state_shift : 0;
650 unsigned int mat, ch;
664 "Number of primitive matrices cannot be greater than %d.\n",
665 max_primitive_matrices);
670 int frac_bits, max_chan;
677 "Invalid channel %d specified as output from matrix.\n",
681 if (frac_bits > 14) {
683 "Too many fractional bits specified.\n");
691 for (ch = 0; ch <= max_chan; ch++) {
694 coeff_val =
get_sbits(gbp, frac_bits + 2);
696 s->
matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
737 "FIR and IIR filters must use the same precision.\n");
810 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
818 #define MSB_MASK(bits) (-1u << bits)
824 unsigned int channel)
833 unsigned int filter_shift = fir->
shift;
854 unsigned int i, ch, expected_stream_pos = 0;
859 expected_stream_pos +=
get_bits(gbp, 16);
861 "Substreams with VLC block size check info");
876 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
893 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
894 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
895 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
896 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
897 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
898 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
899 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
900 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
901 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
902 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
903 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
904 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
905 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
906 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
907 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
908 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
929 uint16_t seed_shr7 = seed >> 7;
933 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
948 uint8_t seed_shr15 = seed >> 15;
950 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
963 unsigned int mat, src_ch, i;
964 unsigned int maxchan;
980 int index2 = 2 * index + 1;
989 for (src_ch = 0; src_ch <= maxchan; src_ch++)
990 accum += (int64_t) samples[src_ch] * coeffs[src_ch];
992 if (matrix_noise_shift) {
998 samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb;
1010 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