45 #define VLC_STATIC_SIZE 64
48 #define VLC_STATIC_SIZE 512
86 #define PARAM_BLOCKSIZE (1 << 7)
87 #define PARAM_MATRIX (1 << 6)
88 #define PARAM_OUTSHIFT (1 << 5)
89 #define PARAM_QUANTSTEP (1 << 4)
90 #define PARAM_FIR (1 << 3)
91 #define PARAM_IIR (1 << 2)
92 #define PARAM_HUFFOFFSET (1 << 1)
93 #define PARAM_PRESENCE (1 << 0)
203 if (!huff_vlc[0].
bits) {
219 unsigned int substr,
unsigned int ch)
228 sign_huff_offset -= 7 << lsb_bits;
231 sign_huff_offset -= 1 << sign_shift;
233 return sign_huff_offset;
240 unsigned int substr,
unsigned int pos)
243 unsigned int mat, channel;
249 for (channel = s->
min_channel; channel <= s->max_channel; channel++) {
253 int lsb_bits = cp->
huff_lsbs - quant_step_size;
264 result = (result << lsb_bits) +
get_bits(gbp, lsb_bits);
267 result <<= quant_step_size;
308 "Channel group 2 cannot have more bits per sample than group 1.\n");
314 "Channel groups with differing sample rates are not currently supported.\n");
324 "Sampling rate %d is greater than the supported maximum (%d).\n",
330 "Block size %d is greater than the supported maximum (%d).\n",
336 "Block size pow2 %d is greater than the supported maximum (%d).\n",
349 "%d substreams (more than the "
350 "maximum supported by the decoder)",
388 "unexpected stream_type %X in MLP",
398 "unexpected stream_type %X in !MLP",
477 int min_channel, max_channel, max_matrix_channel;
484 if (sync_word != 0x31ea >> 1) {
486 "restart header sync incorrect (got 0x%04x)\n", sync_word);
501 max_matrix_channel =
get_bits(gbp, 4);
503 if (max_matrix_channel > std_max_matrix_channel) {
505 "Max matrix channel cannot be greater than %d.\n",
506 std_max_matrix_channel);
510 if (max_channel != max_matrix_channel) {
512 "Max channel must be equal max matrix channel.\n");
520 "%d channels (more than the "
521 "maximum supported by the decoder)",
526 if (min_channel > max_channel) {
528 "Substream min channel cannot be greater than max channel.\n");
536 #if FF_API_REQUEST_CHANNELS
542 "Extracting %d-channel downmix from substream %d. "
543 "Further substreams will be skipped.\n",
552 "Extracting %d-channel downmix (0x%"PRIx64
") from substream %d. "
553 "Further substreams will be skipped.\n",
568 if (tmp != lossless_check)
570 "Lossless check failed - expected %02x, calculated %02x.\n",
571 lossless_check, tmp);
588 "Assignment of matrix channel %d to invalid output channel %d",
609 for (ch = s->
min_channel; ch <= s->max_channel; ch++) {
652 unsigned int substr,
unsigned int channel,
658 const char fchar = filter ?
'I' :
'F';
670 if (order > max_order) {
672 "%cIR filter order %d is greater than maximum %d.\n",
673 fchar, order, max_order);
680 int coeff_bits, coeff_shift;
686 if (coeff_bits < 1 || coeff_bits > 16) {
688 "%cIR filter coeff_bits must be between 1 and 16.\n",
692 if (coeff_bits + coeff_shift > 16) {
694 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
699 for (i = 0; i < order; i++)
700 fcoeff[i] =
get_sbits(gbp, coeff_bits) << coeff_shift;
703 int state_bits, state_shift;
707 "FIR filter has state data specified.\n");
716 for (i = 0; i < order; i++)
717 fp->
state[i] = state_bits ?
get_sbits(gbp, state_bits) << state_shift : 0;
729 unsigned int mat, ch;
743 "Number of primitive matrices cannot be greater than %d.\n",
744 max_primitive_matrices);
749 int frac_bits, max_chan;
756 "Invalid channel %d specified as output from matrix.\n",
760 if (frac_bits > 14) {
762 "Too many fractional bits specified.\n");
770 for (ch = 0; ch <= max_chan; ch++) {
773 coeff_val =
get_sbits(gbp, frac_bits + 2);
775 s->
matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
816 "FIR and IIR filters must use the same precision.\n");
895 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
903 #define MSB_MASK(bits) (-1u << (bits))
909 unsigned int channel)
918 unsigned int filter_shift = fir->
shift;
939 unsigned int i, ch, expected_stream_pos = 0;
944 expected_stream_pos +=
get_bits(gbp, 16);
946 "Substreams with VLC block size check info");
961 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
978 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
979 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
980 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
981 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
982 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
983 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
984 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
985 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
986 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
987 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
988 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
989 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
990 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
991 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
992 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
993 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
1013 for (i = 0; i < s->
blockpos; i++) {
1014 uint16_t seed_shr7 = seed >> 7;
1018 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
1033 uint8_t seed_shr15 = seed >> 15;
1035 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
1049 unsigned int maxchan;
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];
1299 substream_length_mismatch:
1308 #if CONFIG_MLP_DECODER
1320 #if CONFIG_TRUEHD_DECODER