44 #define VLC_STATIC_SIZE 64
47 #define VLC_STATIC_SIZE 512
83 #define PARAM_BLOCKSIZE (1 << 7)
84 #define PARAM_MATRIX (1 << 6)
85 #define PARAM_OUTSHIFT (1 << 5)
86 #define PARAM_QUANTSTEP (1 << 4)
87 #define PARAM_FIR (1 << 3)
88 #define PARAM_IIR (1 << 2)
89 #define PARAM_HUFFOFFSET (1 << 1)
90 #define PARAM_PRESENCE (1 << 0)
195 if (!huff_vlc[0].
bits) {
211 unsigned int substr,
unsigned int ch)
220 sign_huff_offset -= 7 << lsb_bits;
223 sign_huff_offset -= 1 << sign_shift;
225 return sign_huff_offset;
232 unsigned int substr,
unsigned int pos)
235 unsigned int mat, channel;
241 for (channel = s->
min_channel; channel <= s->max_channel; channel++) {
245 int lsb_bits = cp->
huff_lsbs - quant_step_size;
249 result =
get_vlc2(gbp, huff_vlc[codebook-1].table,
256 result = (result << lsb_bits) +
get_bits(gbp, lsb_bits);
259 result <<= quant_step_size;
303 "Channel group 2 cannot have more bits per sample than group 1.\n");
309 "Channel groups with differing sample rates are not currently supported.\n");
319 "Sampling rate %d is greater than the supported maximum (%d).\n",
325 "Block size %d is greater than the supported maximum (%d).\n",
331 "Block size pow2 %d is greater than the supported maximum (%d).\n",
344 "Number of substreams %d is larger than the maximum supported "
398 const uint8_t *buf,
unsigned int substr)
406 int min_channel, max_channel, max_matrix_channel;
413 if (sync_word != 0x31ea >> 1) {
415 "restart header sync incorrect (got 0x%04x)\n", sync_word);
430 max_matrix_channel =
get_bits(gbp, 4);
432 if (max_matrix_channel > std_max_matrix_channel) {
434 "Max matrix channel cannot be greater than %d.\n",
439 if (max_channel != max_matrix_channel) {
441 "Max channel must be equal max matrix channel.\n");
449 "Number of channels %d is larger than the maximum supported "
454 if (min_channel > max_channel) {
456 "Substream min channel cannot be greater than max channel.\n");
465 if (m->
avctx->request_channels > 0 &&
469 "Extracting %d channel downmix from substream %d. "
470 "Further substreams will be skipped.\n",
485 if (tmp != lossless_check)
487 "Lossless check failed - expected %02x, calculated %02x.\n",
488 lossless_check, tmp);
505 "Assignment of matrix channel %d to invalid output channel %d.\n",
526 for (ch = s->
min_channel; ch <= s->max_channel; ch++) {
555 unsigned int substr,
unsigned int channel,
561 const char fchar = filter ?
'I' :
'F';
573 if (order > max_order) {
575 "%cIR filter order %d is greater than maximum %d.\n",
576 fchar, order, max_order);
583 int coeff_bits, coeff_shift;
589 if (coeff_bits < 1 || coeff_bits > 16) {
591 "%cIR filter coeff_bits must be between 1 and 16.\n",
595 if (coeff_bits + coeff_shift > 16) {
597 "Sum of coeff_bits and coeff_shift for %cIR filter must be 16 or less.\n",
602 for (i = 0; i < order; i++)
603 fcoeff[i] =
get_sbits(gbp, coeff_bits) << coeff_shift;
606 int state_bits, state_shift;
610 "FIR filter has state data specified.\n");
619 for (i = 0; i < order; i++)
632 unsigned int mat, ch;
646 "Number of primitive matrices cannot be greater than %d.\n",
647 max_primitive_matrices);
652 int frac_bits, max_chan;
659 "Invalid channel %d specified as output from matrix.\n",
663 if (frac_bits > 14) {
665 "Too many fractional bits specified.\n");
673 for (ch = 0; ch <= max_chan; ch++) {
676 coeff_val =
get_sbits(gbp, frac_bits + 2);
678 s->
matrix_coeff[mat][ch] = coeff_val << (14 - frac_bits);
719 "FIR and IIR filters must use the same precision.\n");
797 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
805 #define MSB_MASK(bits) (-1u << bits)
811 unsigned int channel)
820 unsigned int filter_shift = fir->
shift;
841 unsigned int i, ch, expected_stream_pos = 0;
846 expected_stream_pos +=
get_bits(gbp, 16);
848 "we have not tested yet.\n");
863 for (ch = s->
min_channel; ch <= s->max_channel; ch++)
880 30, 51, 22, 54, 3, 7, -4, 38, 14, 55, 46, 81, 22, 58, -3, 2,
881 52, 31, -7, 51, 15, 44, 74, 30, 85, -17, 10, 33, 18, 80, 28, 62,
882 10, 32, 23, 69, 72, 26, 35, 17, 73, 60, 8, 56, 2, 6, -2, -5,
883 51, 4, 11, 50, 66, 76, 21, 44, 33, 47, 1, 26, 64, 48, 57, 40,
884 38, 16, -10, -28, 92, 22, -18, 29, -10, 5, -13, 49, 19, 24, 70, 34,
885 61, 48, 30, 14, -6, 25, 58, 33, 42, 60, 67, 17, 54, 17, 22, 30,
886 67, 44, -9, 50, -11, 43, 40, 32, 59, 82, 13, 49, -14, 55, 60, 36,
887 48, 49, 31, 47, 15, 12, 4, 65, 1, 23, 29, 39, 45, -2, 84, 69,
888 0, 72, 37, 57, 27, 41, -15, -16, 35, 31, 14, 61, 24, 0, 27, 24,
889 16, 41, 55, 34, 53, 9, 56, 12, 25, 29, 53, 5, 20, -20, -8, 20,
890 13, 28, -3, 78, 38, 16, 11, 62, 46, 29, 21, 24, 46, 65, 43, -23,
891 89, 18, 74, 21, 38, -12, 19, 12, -19, 8, 15, 33, 4, 57, 9, -8,
892 36, 35, 26, 28, 7, 83, 63, 79, 75, 11, 3, 87, 37, 47, 34, 40,
893 39, 19, 20, 42, 27, 34, 39, 77, 13, 42, 59, 64, 45, -1, 32, 37,
894 45, -5, 53, -6, 7, 36, 50, 23, 6, 32, 9, -21, 18, 71, 27, 52,
895 -25, 31, 35, 42, -1, 68, 63, 52, 26, 43, 66, 37, 41, 25, 40, 70,
916 uint16_t seed_shr7 = seed >> 7;
920 seed = (seed << 16) ^ seed_shr7 ^ (seed_shr7 << 5);
935 uint8_t seed_shr15 = seed >> 15;
937 seed = (seed << 8) ^ seed_shr15 ^ (seed_shr15 << 5);
951 unsigned int maxchan;
980 void *
data,
int *got_frame_ptr)
1023 int *got_frame_ptr,
AVPacket *avpkt)
1026 int buf_size = avpkt->
size;
1029 unsigned int length, substr;
1030 unsigned int substream_start;
1031 unsigned int header_size = 4;
1032 unsigned int substr_header_size = 0;
1041 length = (
AV_RB16(buf) & 0xfff) * 2;
1043 if (length < 4 || length > buf_size)
1058 "Stream parameters not seen; skipping frame.\n");
1063 substream_start = 0;
1066 int extraword_present, checkdata_present, end, nonrestart_substr;
1075 substr_header_size += 2;
1077 if (extraword_present) {
1083 substr_header_size += 2;
1091 if (end + header_size + substr_header_size > length) {
1093 "Indicated length of substream %d data goes off end of "
1094 "packet.\n", substr);
1095 end = length - header_size - substr_header_size;
1098 if (end < substream_start) {
1100 "Indicated end offset of substream %d data "
1101 "is smaller than calculated start offset.\n",
1109 substream_parity_present[substr] = checkdata_present;
1110 substream_data_len[substr] = end - substream_start;
1111 substream_start = end;
1117 if ((((parity_bits >> 4) ^ parity_bits) & 0xF) != 0xF) {
1122 buf += header_size + substr_header_size;
1154 goto substream_length_mismatch;
1160 if (substream_data_len[substr] * 8 -
get_bits_count(&gb) >= 32) {
1176 if (substream_parity_present[substr]) {
1180 goto substream_length_mismatch;
1185 if ((
get_bits(&gb, 8) ^ parity) != 0xa9 )
1192 goto substream_length_mismatch;
1197 "No restart header present in substream %d.\n", substr);
1199 buf += substream_data_len[substr];
1209 substream_length_mismatch:
1229 #if CONFIG_TRUEHD_DECODER
1237 .capabilities = CODEC_CAP_DR1,