79 #define PARAM_BLOCKSIZE (1 << 7)
80 #define PARAM_MATRIX (1 << 6)
81 #define PARAM_OUTSHIFT (1 << 5)
82 #define PARAM_QUANTSTEP (1 << 4)
83 #define PARAM_FIR (1 << 3)
84 #define PARAM_IIR (1 << 2)
85 #define PARAM_HUFFOFFSET (1 << 1)
86 #define PARAM_PRESENCE (1 << 0)
193 if (!huff_vlc[0].
bits) {
209 unsigned int substr,
unsigned int ch)
218 sign_huff_offset -= 7 << lsb_bits;
221 sign_huff_offset -= 1 << sign_shift;
223 return sign_huff_offset;
230 unsigned int substr,
unsigned int pos)
233 unsigned int mat, channel;
239 for (channel = s->
min_channel; channel <= s->max_channel; channel++) {
243 int lsb_bits = cp->
huff_lsbs - quant_step_size;
254 result = (result << lsb_bits) +
get_bits(gbp, lsb_bits);
257 result <<= quant_step_size;
298 "Channel group 2 cannot have more bits per sample than group 1.\n");
304 "Channel groups with differing sample rates are not currently supported.\n");
314 "Sampling rate %d is greater than the supported maximum (%d).\n",
320 "Block size %d is greater than the supported maximum (%d).\n",
326 "Block size pow2 %d is greater than the supported maximum (%d).\n",
339 "%d substreams (more than the "
340 "maximum supported by the decoder)",
370 "unexpected stream_type %X in MLP",
380 "unexpected stream_type %X in !MLP",
459 int min_channel, max_channel, max_matrix_channel;
466 if (sync_word != 0x31ea >> 1) {
468 "restart header sync incorrect (got 0x%04x)\n", sync_word);
483 max_matrix_channel =
get_bits(gbp, 4);
485 if (max_matrix_channel > std_max_matrix_channel) {
487 "Max matrix channel cannot be greater than %d.\n",
488 std_max_matrix_channel);
492 if (max_channel != max_matrix_channel) {
494 "Max channel must be equal max matrix channel.\n");
502 "%d channels (more than the "
503 "maximum supported by the decoder)",
508 if (min_channel > max_channel) {
510 "Substream min channel cannot be greater than max channel.\n");
518 #if FF_API_REQUEST_CHANNELS
524 "Extracting %d-channel downmix from substream %d. "
525 "Further substreams will be skipped.\n",
534 "Extracting %d-channel downmix (0x%"PRIx64
") from substream %d. "
535 "Further substreams will be skipped.\n",
550 if (tmp != lossless_check)
552 "Lossless check failed - expected %02x, calculated %02x.\n",
553 lossless_check, tmp);
570 "Assignment of matrix channel %d to invalid output channel %d",
591 for (ch = s->
min_channel; ch <= s->max_channel; ch++) {
630 unsigned int substr,
unsigned int channel,
636 const char fchar = filter ?
'I' :
'F';
648 if (order > max_order) {
650 "%cIR filter order %d is greater than maximum %d.\n",
651 fchar, order, max_order);
658 int coeff_bits, coeff_shift;
664 if (coeff_bits < 1 || coeff_bits > 16) {
666 "%cIR filter coeff_bits must be between 1 and 16.\n",
670 if (coeff_bits + coeff_shift > 16) {
672 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
677 for (i = 0; i < order; i++)
678 fcoeff[i] =
get_sbits(gbp, coeff_bits) << coeff_shift;
681 int state_bits, state_shift;
685 "FIR filter has state data specified.\n");
694 for (i = 0; i < order; i++)
695 fp->
state[i] = state_bits ?
get_sbits(gbp, state_bits) << state_shift : 0;
707 unsigned int mat, ch;
721 "Number of primitive matrices cannot be greater than %d.\n",
722 max_primitive_matrices);
727 int frac_bits, max_chan;
734 "Invalid channel %d specified as output from matrix.\n",
738 if (frac_bits > 14) {
740 "Too many fractional bits specified.\n");
748 for (ch = 0; ch <= max_chan; ch++) {
751 coeff_val =
get_sbits(gbp, frac_bits + 2);
753 s->
matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
794 "FIR and IIR filters must use the same precision.\n");
867 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
875 #define MSB_MASK(bits) (-1u << bits)
881 unsigned int channel)
890 unsigned int filter_shift = fir->
shift;
911 unsigned int i, ch, expected_stream_pos = 0;
916 expected_stream_pos +=
get_bits(gbp, 16);
918 "Substreams with VLC block size check info");
933 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
950 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
951 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
952 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
953 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
954 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
955 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
956 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
957 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
958 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
959 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
960 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
961 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
962 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
963 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
964 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
965 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
986 uint16_t seed_shr7 = seed >> 7;
990 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
1005 uint8_t seed_shr15 = seed >> 15;
1007 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
1020 unsigned int mat, src_ch, i;
1021 unsigned int maxchan;
1037 int index2 = 2 * index + 1;
1041 for (i = 0; i < s->
blockpos; i++) {
1046 for (src_ch = 0; src_ch <= maxchan; src_ch++)
1047 accum += (int64_t) samples[src_ch] * coeffs[src_ch];
1049 if (matrix_noise_shift) {
1055 samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb;
1067 unsigned int i, out_ch = 0;
1088 data_16 = (int16_t *)frame->
data[0];
1090 for (i = 0; i < s->
blockpos; i++) {
1096 if (is32) *data_32++ = sample << 8;
1097 else *data_16++ = sample >> 8;
1115 int *got_frame_ptr,
AVPacket *avpkt)
1118 int buf_size = avpkt->
size;
1121 unsigned int length, substr;
1122 unsigned int substream_start;
1123 unsigned int header_size = 4;
1124 unsigned int substr_header_size = 0;
1133 length = (
AV_RB16(buf) & 0xfff) * 2;
1150 "Stream parameters not seen; skipping frame.\n");
1155 substream_start = 0;
1158 int extraword_present, checkdata_present,
end, nonrestart_substr;
1167 substr_header_size += 2;
1169 if (extraword_present) {
1175 substr_header_size += 2;
1183 if (end + header_size + substr_header_size > length) {
1185 "Indicated length of substream %d data goes off end of "
1186 "packet.\n", substr);
1187 end = length - header_size - substr_header_size;
1190 if (end < substream_start) {
1192 "Indicated end offset of substream %d data "
1193 "is smaller than calculated start offset.\n",
1201 substream_parity_present[substr] = checkdata_present;
1202 substream_data_len[substr] = end - substream_start;
1203 substream_start =
end;
1209 if ((((parity_bits >> 4) ^ parity_bits) & 0xF) != 0xF) {
1214 buf += header_size + substr_header_size;
1246 goto substream_length_mismatch;
1252 if (substream_data_len[substr] * 8 -
get_bits_count(&gb) >= 32) {
1268 if (substream_parity_present[substr]) {
1272 goto substream_length_mismatch;
1277 if ((
get_bits(&gb, 8) ^ parity) != 0xa9 )
1284 goto substream_length_mismatch;
1289 "No restart header present in substream %d.\n", substr);
1291 buf += substream_data_len[substr];
1301 substream_length_mismatch:
1310 #if CONFIG_MLP_DECODER
1322 #if CONFIG_TRUEHD_DECODER