55 const int16_t (*hcod_first_band)[2];
56 const int16_t (*hcod1D)[2];
78 for (
int off = diff_freq; off < data_bands; off++) {
95 data[0] = -sum + (2*lav + 1);
127 int16_t
offset,
int nb_pcm_data_bands,
128 int nb_quant_steps,
int nb_levels)
132 case 3: max_group_len = 5;
break;
133 case 7: max_group_len = 6;
break;
134 case 11: max_group_len = 2;
break;
135 case 13: max_group_len = 4;
break;
136 case 19: max_group_len = 4;
break;
137 case 25: max_group_len = 3;
break;
138 case 51: max_group_len = 4;
break;
139 case 4:
case 8:
case 15:
case 16:
case 26:
case 31:
146 int pcm_chunk_size[7] = { 0 };
149 for (
int i = 1;
i <= max_group_len;
i++) {
154 for (
int i = 0;
i < nb_pcm_data_bands;
i+= max_group_len) {
155 int group_len =
FFMIN(max_group_len, nb_pcm_data_bands -
i);
157 int pcm =
get_bits(gb, pcm_chunk_size[group_len]);
158 for (
int j = 0; j < group_len; j++) {
159 int idx =
i + (group_len - 1) - j;
160 int val = pcm % nb_levels;
161 if (data0 && data1) {
171 pcm = (pcm -
val) / nb_levels;
178 int diff_freq,
int freq_pair)
183 const int16_t (*hcod1D)[2];
184 const int16_t (*hcod2D)[2];
222 int16_t esc_data[2][28];
224 for (;
i < data_bands;
i +=
stride) {
226 esc_idx[esc_cnt++] =
i;
233 0, 2*esc_cnt, 0, (2*lav + 1));
234 for (
i = 0;
i < esc_cnt;
i++) {
235 data[esc_idx[
i]][0] = esc_data[0][
i] - lav;
236 data[esc_idx[
i]][0] = esc_data[0][
i] - lav;
243 int num_val,
int *time_pair)
245 int16_t pair_vec[28][2];
246 int num_val_ch[2] = { num_val, num_val };
247 int16_t *p0_data[2][2] = { 0 };
248 int df_rest_flag[2] = { 0, 0 };
258 if (diff_freq[0] || diff_freq[1]) {
259 p0_data[0][0] =
data[0];
260 p0_data[0][1] =
data[1];
269 if (!diff_freq[0] || !diff_freq[1])
272 huff_data_2d(gb, p0_data[0], pair_vec, num_val_ch[0], 1, data_type,
275 for (
int i = 0;
i < num_val_ch[0];
i++) {
276 data[0][
i] = pair_vec[
i][0];
277 data[1][
i] = pair_vec[
i][1];
282 p0_data[0][0] =
data[0];
283 p0_data[0][1] =
NULL;
288 df_rest_flag[0] = num_val_ch[0] % 2;
291 if (num_val_ch[0] < 0)
297 p0_data[1][0] =
NULL;
298 p0_data[1][1] =
data[1];
303 df_rest_flag[1] = num_val_ch[1] % 2;
306 if (num_val_ch[1] < 0)
311 huff_data_2d(gb, p0_data[0], pair_vec, num_val_ch[0], 2, data_type,
315 data_type, !diff_freq[0], 0);
318 huff_data_2d(gb, p0_data[1], pair_vec + 1, num_val_ch[1], 2, data_type,
322 data_type, !diff_freq[1], 0);
339 for (
i = 1;
i < nb_val;
i++)
344 int16_t *
out,
const int mixed_diff_type,
349 for (
int i = mixed_diff_type;
i < nb_val;
i++)
354 int16_t *
out,
const int mixed_diff_type,
359 for (
int i = mixed_diff_type;
i < nb_val;
i++)
364 int offset,
int nb_lsb,
int nb_val,
367 for (
int i = 0;
i < nb_val;
i++) {
368 int msb = data_msb[
i];
370 uint32_t lsb =
get_bits(gb, nb_lsb);
382 int pair,
int coarse,
385 int attach_lsb_flag = 0;
386 int quant_levels = 0;
387 int quant_offset = 0;
425 int16_t last_msb[28] = { 0 };
426 int16_t data_pair[2][28] = { 0 };
427 int16_t data_diff[2][28] = { 0 };
434 p_data[0] = data_pair[0];
435 p_data[1] = data_pair[1];
436 nb_pcm_vals = 2 * nb_bands;
438 p_data[0] = data_pair[0];
440 nb_pcm_vals = nb_bands;
445 case MPS_CLD: nb_quant_steps = coarse ? 15 : 31;
break;
446 case MPS_ICC: nb_quant_steps = coarse ? 4 : 8;
break;
447 case MPS_IPD: nb_quant_steps = coarse ? 8 : 16;
break;
449 pcm_decode(gb, p_data[0], p_data[1], quant_offset, nb_pcm_vals,
450 nb_quant_steps, quant_levels);
452 memcpy(&set1[start_band], data_pair[0], 2*nb_bands);
454 memcpy(&set2[start_band], data_pair[1], 2*nb_bands);
460 p_data[0] = data_pair[0];
461 p_data[1] = data_pair[1];
463 p_data[0] = data_pair[0];
467 int diff_freq[2] = { 1, 1 };
470 if (pair || diff_time_back)
473 if (pair && (diff_freq[0] || diff_time_back))
478 nb_bands, &time_pair);
481 if (!diff_freq[0] || !diff_freq[1]) {
486 if (!diff_freq[0] && !diff_time_back)
488 else if (!diff_freq[1])
498 int mixed_time_pair = (diff_freq[0] != diff_freq[1]) && time_pair;
504 for (
int i = 0;
i < nb_bands;
i++) {
505 last_msb[
i] = last[
i + start_band] + quant_offset;
506 if (attach_lsb_flag) {
511 mixed_time_pair, nb_bands);
518 data_pair[1], mixed_time_pair, nb_bands);
526 mixed_time_pair, nb_bands);
530 attach_lsb(gb, p_data[0], quant_offset, attach_lsb_flag,
531 nb_bands, p_data[0]);
533 attach_lsb(gb, p_data[1], quant_offset, attach_lsb_flag,
534 nb_bands, p_data[1]);
536 memcpy(&set1[start_band], data_pair[0], 2*nb_bands);
538 memcpy(&set2[start_band], data_pair[1], 2*nb_bands);
544 int start_band,
int end_band)
546 for (
int i = start_band;
i < end_band;
i++)
549 for (
int i = start_band;
i < end_band;
i++) {
552 else if (
data[
i] == 14)
559 int start_band,
int end_band)
561 for (
int i = start_band;
i < end_band;
i++) {
570 int start_band,
int end_band)
572 int data_bands = (end_band - start_band - 1) / band_stride + 1;
574 freq_strides[0] = start_band;
575 for (
int i = 1;
i <= data_bands;
i++)
576 freq_strides[
i] = freq_strides[
i - 1] + band_stride;
579 while (freq_strides[data_bands] > end_band) {
580 if (offs < data_bands)
582 for (
int i = offs;
i <= data_bands;
i++) {
595 int start_band,
int end_band,
int frame_indep_flag,
596 int indep_flag,
int nb_param_sets)
598 for (
int i = 0;
i < nb_param_sets;
i++) {
602 ((
i == (nb_param_sets - 1) && (ld->
data_mode[
i] == 2)))) {
611 for (
int i = 0;
i < nb_param_sets;
i++) {
613 for (
int j = start_band; j < end_band; j++)
620 }
else if (data_pair) {
638 start_band, end_band);
643 for (
int j = 0; j < data_bands; j++)
647 ld->
data[set_idx + 0], ld->
data[set_idx + 1],
648 ld->
last_data, data_type, start_band, end_band - start_band,
650 !(indep_flag && (
i == 0)) || (set_idx > 0));
656 for (
int j = 0; j < data_bands; j++)
657 for (
int k = ld->
freq_res[j + 0]; k < ld->freq_res[j + 1]; k++)
660 for (
int j = 0; j < data_bands; j++)
661 for (
int k = ld->
freq_res[j + 0]; k < ld->freq_res[j + 1]; k++)
662 ld->
last_data[k] = ld->
data[set_idx + data_pair][start_band + j];
670 set_idx += data_pair + 1;
682 int val_received = 0;
683 int16_t rl_data[2] = { 0 };
685 while (val_received < nb_val) {
688 len = rl_data[1] + 1;
689 if (val_received +
len > nb_val)
691 for (
int i = val_received;
i < val_received +
len;
i++)
700 int start_band,
int stop_band,
int stride)
703 int src_bands = stop_band - start_band;
704 int dst_bands = (src_bands - 1) /
stride + 1;
709 int bands_achived = dst_bands *
stride;
710 int bands_diff = src_bands - bands_achived;
711 for (
int i = 0;
i < dst_bands;
i++)
715 if (bands_diff > 0) {
723 while (bands_diff != 0) {
726 bands_diff = bands_diff + incr;
727 if (k >= dst_bands) {
728 if (bands_diff > 0) {
730 }
else if (bands_diff < 0) {
737 for (
int i = 0;
i < dst_bands;
i++)
742 int *
map,
int nb_bands)
744 for (
int i = 0;
i < nb_bands;
i++) {
746 int start_band =
map[
i];
747 int stop_band =
map[
i + 1];
748 for (
int j = start_band; j < stop_band; j++) {
760 if (((
value + 15) >= 0) && ((
value + 15) < 31))
781 int default_value,
int start_band,
int stop_band,
782 int nb_param_sets,
const int *param_set_idx,
789 int nb_data_mode_3 = 0;
790 for (
int i = 0;
i < nb_param_sets;
i++) {
792 data_mode_3_idx[nb_data_mode_3] =
i;
802 for (
int i = 0;
i < nb_param_sets;
i++) {
805 for (
int band = start_band; band < stop_band; band++)
806 tmp_idx_data[
i][band] = default_value;
807 for (
int band = start_band; band < stop_band; band++)
813 for (
int band = start_band; band < stop_band; band++)
819 for (
int band = start_band; band < stop_band; band++)
830 int parmSlot = data_mode_3_idx[set_idx];
832 int dataBands = (stop_band - start_band - 1) /
stride + 1;
839 for (
int band = start_band; band < stop_band; band++)
840 ld->
last_data[band] = tmp_idx_data[parmSlot][band];
850 for (
int i = 0;
i < nb_param_sets;
i++) {
853 stop_band - start_band);
860 for (
int i = 0;
i < nb_param_sets;
i++) {
866 for (i2 =
i; i2 < nb_param_sets; i2++)
869 if (i2 >= nb_param_sets)
872 x1 = param_set_idx[i1];
873 xi = param_set_idx[
i];
874 x2 = param_set_idx[i2];
876 for (
int band = start_band; band < stop_band; band++) {
878 y1 = tmp_idx_data[i1][band];
879 y2 = tmp_idx_data[i2][band];
881 yi = y1 + (
xi - x1) * (y2 - y1) / (x2 - x1);
885 tmp_idx_data[
i][band] = yi;
891 for (
int ps = 0; ps < nb_param_sets; ps++) {
893 for (
int band = start_band; band < stop_band; band++) {
894 dst_idx[ps][band] =
deq_idx(tmp_idx_data[ps][band],
896 if (dst_idx[ps][band] == -1)
897 dst_idx[ps][band] = default_value;
904 for (
int band = start_band; band < stop_band; band++)
905 dst_idx[nb_param_sets][band] = dst_idx[nb_param_sets - 1][band];