77 #define PARAM_BLOCKSIZE (1 << 7)
78 #define PARAM_MATRIX (1 << 6)
79 #define PARAM_OUTSHIFT (1 << 5)
80 #define PARAM_QUANTSTEP (1 << 4)
81 #define PARAM_FIR (1 << 3)
82 #define PARAM_IIR (1 << 2)
83 #define PARAM_HUFFOFFSET (1 << 1)
84 #define PARAM_PRESENCE (1 << 0)
191 if (!huff_vlc[0].
bits) {
207 unsigned int substr,
unsigned int ch)
216 sign_huff_offset -= 7 << lsb_bits;
219 sign_huff_offset -= 1 << sign_shift;
221 return sign_huff_offset;
228 unsigned int substr,
unsigned int pos)
231 unsigned int mat, channel;
237 for (channel = s->
min_channel; channel <= s->max_channel; channel++) {
241 int lsb_bits = cp->
huff_lsbs - quant_step_size;
252 result = (result << lsb_bits) +
get_bits(gbp, lsb_bits);
255 result <<= quant_step_size;
296 "Channel group 2 cannot have more bits per sample than group 1.\n");
302 "Channel groups with differing sample rates are not currently supported.\n");
312 "Sampling rate %d is greater than the supported maximum (%d).\n",
318 "Block size %d is greater than the supported maximum (%d).\n",
324 "Block size pow2 %d is greater than the supported maximum (%d).\n",
337 "%d substreams (more than the "
338 "maximum supported by the decoder)",
405 int min_channel, max_channel, max_matrix_channel;
412 if (sync_word != 0x31ea >> 1) {
414 "restart header sync incorrect (got 0x%04x)\n", sync_word);
429 max_matrix_channel =
get_bits(gbp, 4);
431 if (max_matrix_channel > std_max_matrix_channel) {
433 "Max matrix channel cannot be greater than %d.\n",
434 std_max_matrix_channel);
438 if (max_channel != max_matrix_channel) {
440 "Max channel must be equal max matrix channel.\n");
448 "%d channels (more than the "
449 "maximum supported by the decoder)",
454 if (min_channel > max_channel) {
456 "Substream min channel cannot be greater than max channel.\n");
464 #if FF_API_REQUEST_CHANNELS
466 if (m->
avctx->request_channels > 0 &&
470 "Extracting %d-channel downmix from substream %d. "
471 "Further substreams will be skipped.\n",
480 "Extracting %d-channel downmix (0x%"PRIx64
") from substream %d. "
481 "Further substreams will be skipped.\n",
496 if (tmp != lossless_check)
498 "Lossless check failed - expected %02x, calculated %02x.\n",
499 lossless_check, tmp);
516 "Assignment of matrix channel %d to invalid output channel %d",
537 for (ch = s->
min_channel; ch <= s->max_channel; ch++) {
576 unsigned int substr,
unsigned int channel,
582 const char fchar = filter ?
'I' :
'F';
594 if (order > max_order) {
596 "%cIR filter order %d is greater than maximum %d.\n",
597 fchar, order, max_order);
604 int coeff_bits, coeff_shift;
610 if (coeff_bits < 1 || coeff_bits > 16) {
612 "%cIR filter coeff_bits must be between 1 and 16.\n",
616 if (coeff_bits + coeff_shift > 16) {
618 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
623 for (i = 0; i < order; i++)
624 fcoeff[i] =
get_sbits(gbp, coeff_bits) << coeff_shift;
627 int state_bits, state_shift;
631 "FIR filter has state data specified.\n");
640 for (i = 0; i < order; i++)
641 fp->
state[i] = state_bits ?
get_sbits(gbp, state_bits) << state_shift : 0;
653 unsigned int mat, ch;
667 "Number of primitive matrices cannot be greater than %d.\n",
668 max_primitive_matrices);
673 int frac_bits, max_chan;
680 "Invalid channel %d specified as output from matrix.\n",
684 if (frac_bits > 14) {
686 "Too many fractional bits specified.\n");
694 for (ch = 0; ch <= max_chan; ch++) {
697 coeff_val =
get_sbits(gbp, frac_bits + 2);
699 s->
matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
740 "FIR and IIR filters must use the same precision.\n");
813 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
821 #define MSB_MASK(bits) (-1u << bits)
827 unsigned int channel)
836 unsigned int filter_shift = fir->
shift;
857 unsigned int i, ch, expected_stream_pos = 0;
862 expected_stream_pos +=
get_bits(gbp, 16);
864 "Substreams with VLC block size check info");
879 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
896 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
897 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
898 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
899 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
900 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
901 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
902 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
903 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
904 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
905 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
906 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
907 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
908 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
909 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
910 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
911 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
932 uint16_t seed_shr7 = seed >> 7;
936 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
951 uint8_t seed_shr15 = seed >> 15;
953 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
966 unsigned int mat, src_ch, i;
967 unsigned int maxchan;
983 int index2 = 2 * index + 1;
992 for (src_ch = 0; src_ch <= maxchan; src_ch++)
993 accum += (int64_t) samples[src_ch] * coeffs[src_ch];
995 if (matrix_noise_shift) {
1001 samples[dest_ch] = ((accum >> 14) & mask) + bypassed_lsb;
1013 unsigned int i, out_ch = 0;
1034 data_16 = (int16_t *)frame->
data[0];
1036 for (i = 0; i < s->
blockpos; i++) {
1042 if (is32) *data_32++ = sample << 8;
1043 else *data_16++ = sample >> 8;
1057 int *got_frame_ptr,
AVPacket *avpkt)
1060 int buf_size = avpkt->
size;
1063 unsigned int length, substr;
1064 unsigned int substream_start;
1065 unsigned int header_size = 4;
1066 unsigned int substr_header_size = 0;
1075 length = (
AV_RB16(buf) & 0xfff) * 2;
1077 if (length < 4 || length > buf_size)
1092 "Stream parameters not seen; skipping frame.\n");
1097 substream_start = 0;
1100 int extraword_present, checkdata_present,
end, nonrestart_substr;
1109 substr_header_size += 2;
1111 if (extraword_present) {
1117 substr_header_size += 2;
1125 if (end + header_size + substr_header_size > length) {
1127 "Indicated length of substream %d data goes off end of "
1128 "packet.\n", substr);
1129 end = length - header_size - substr_header_size;
1132 if (end < substream_start) {
1134 "Indicated end offset of substream %d data "
1135 "is smaller than calculated start offset.\n",
1143 substream_parity_present[substr] = checkdata_present;
1144 substream_data_len[substr] = end - substream_start;
1145 substream_start =
end;
1151 if ((((parity_bits >> 4) ^ parity_bits) & 0xF) != 0xF) {
1156 buf += header_size + substr_header_size;
1188 goto substream_length_mismatch;
1194 if (substream_data_len[substr] * 8 -
get_bits_count(&gb) >= 32) {
1210 if (substream_parity_present[substr]) {
1214 goto substream_length_mismatch;
1219 if ((
get_bits(&gb, 8) ^ parity) != 0xa9 )
1226 goto substream_length_mismatch;
1231 "No restart header present in substream %d.\n", substr);
1233 buf += substream_data_len[substr];
1243 substream_length_mismatch:
1252 #if CONFIG_MLP_DECODER
1264 #if CONFIG_TRUEHD_DECODER