48
48
/* static function declarations */
49
49
static void sbr_header(bitfile *ld, sbr_info *sbr);
50
static uint8_t calc_sbr_tables(sbr_info *sbr, uint8_t start_freq, uint8_t stop_freq,
51
uint8_t samplerate_mode, uint8_t freq_scale,
52
uint8_t alter_scale, uint8_t xover_band);
50
53
static uint8_t sbr_data(bitfile *ld, sbr_info *sbr);
51
54
static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr,
52
55
uint8_t bs_extension_id, uint16_t num_bits_left);
73
76
if ((sbr->bs_start_freq != sbr->bs_start_freq_prev) ||
74
77
(sbr->bs_stop_freq != sbr->bs_stop_freq_prev) ||
75
78
(sbr->bs_freq_scale != sbr->bs_freq_scale_prev) ||
76
(sbr->bs_alter_scale != sbr->bs_alter_scale_prev))
83
if ((sbr->bs_start_freq != sbr->bs_start_freq_prev) ||
84
(sbr->bs_stop_freq != sbr->bs_stop_freq_prev) ||
85
(sbr->bs_freq_scale != sbr->bs_freq_scale_prev) ||
86
79
(sbr->bs_alter_scale != sbr->bs_alter_scale_prev) ||
87
80
(sbr->bs_xover_band != sbr->bs_xover_band_prev) ||
88
81
(sbr->bs_noise_bands != sbr->bs_noise_bands_prev))
98
91
sbr->bs_alter_scale_prev = sbr->bs_alter_scale;
99
92
sbr->bs_xover_band_prev = sbr->bs_xover_band;
100
93
sbr->bs_noise_bands_prev = sbr->bs_noise_bands;
96
static uint8_t calc_sbr_tables(sbr_info *sbr, uint8_t start_freq, uint8_t stop_freq,
97
uint8_t samplerate_mode, uint8_t freq_scale,
98
uint8_t alter_scale, uint8_t xover_band)
103
/* calculate the Master Frequency Table */
104
sbr->k0 = qmf_start_channel(start_freq, samplerate_mode, sbr->sample_rate);
105
k2 = qmf_stop_channel(stop_freq, sbr->sample_rate, sbr->k0);
107
/* check k0 and k2 */
108
if (sbr->sample_rate >= 48000)
110
if ((k2 - sbr->k0) > 32)
112
} else if (sbr->sample_rate <= 32000) {
113
if ((k2 - sbr->k0) > 48)
115
} else { /* (sbr->sample_rate == 44100) */
116
if ((k2 - sbr->k0) > 45)
122
result += master_frequency_table_fs0(sbr, sbr->k0, k2, alter_scale);
124
result += master_frequency_table(sbr, sbr->k0, k2, freq_scale, alter_scale);
126
result += derived_frequency_table(sbr, xover_band, k2);
128
result = (result > 0) ? 1 : 0;
112
137
uint16_t num_align_bits = 0;
113
138
uint16_t num_sbr_bits = (uint16_t)faad_get_processed_bits(ld);
140
uint8_t saved_start_freq, saved_samplerate_mode;
141
uint8_t saved_stop_freq, saved_freq_scale;
142
uint8_t saved_alter_scale, saved_xover_band;
116
145
if (!sbr->Is_DRM_SBR)
158
/* save old header values, in case the new ones are corrupted */
159
saved_start_freq = sbr->bs_start_freq;
160
saved_samplerate_mode = sbr->bs_samplerate_mode;
161
saved_stop_freq = sbr->bs_stop_freq;
162
saved_freq_scale = sbr->bs_freq_scale;
163
saved_alter_scale = sbr->bs_alter_scale;
164
saved_xover_band = sbr->bs_xover_band;
129
166
sbr->bs_header_flag = faad_get1bit(ld
130
167
DEBUGVAR(1,200,"sbr_bitstream(): bs_header_flag"));
142
179
if (sbr->Reset || (sbr->bs_header_flag && sbr->just_seeked))
146
/* calculate the Master Frequency Table */
147
sbr->k0 = qmf_start_channel(sbr->bs_start_freq, sbr->bs_samplerate_mode,
149
k2 = qmf_stop_channel(sbr->bs_stop_freq, sbr->sample_rate, sbr->k0);
151
/* check k0 and k2 */
152
if (sbr->sample_rate >= 48000)
154
if ((k2 - sbr->k0) > 32)
156
} else if (sbr->sample_rate <= 32000) {
157
if ((k2 - sbr->k0) > 48)
159
} else { /* (sbr->sample_rate == 44100) */
160
if ((k2 - sbr->k0) > 45)
164
if (sbr->bs_freq_scale == 0)
166
result += master_frequency_table_fs0(sbr, sbr->k0, k2,
167
sbr->bs_alter_scale);
169
result += master_frequency_table(sbr, sbr->k0, k2, sbr->bs_freq_scale,
170
sbr->bs_alter_scale);
172
result += derived_frequency_table(sbr, sbr->bs_xover_band, k2);
174
result = (result > 0) ? 1 : 0;
181
uint8_t rt = calc_sbr_tables(sbr, sbr->bs_start_freq, sbr->bs_stop_freq,
182
sbr->bs_samplerate_mode, sbr->bs_freq_scale,
183
sbr->bs_alter_scale, sbr->bs_xover_band);
185
/* if an error occured with the new header values revert to the old ones */
188
calc_sbr_tables(sbr, saved_start_freq, saved_stop_freq,
189
saved_samplerate_mode, saved_freq_scale,
190
saved_alter_scale, saved_xover_band);
178
196
result = sbr_data(ld, sbr);
198
/* sbr_data() returning an error means that there was an error in
199
envelope_time_border_vector().
200
In this case the old time border vector is saved and all the previous
201
data normally read after sbr_grid() is saved.
203
/* to be on the safe side, calculate old sbr tables in case of error */
205
(sbr->Reset || (sbr->bs_header_flag && sbr->just_seeked)))
207
calc_sbr_tables(sbr, saved_start_freq, saved_stop_freq,
208
saved_samplerate_mode, saved_freq_scale,
209
saved_alter_scale, saved_xover_band);
212
/* we should be able to safely set result to 0 now */
187
223
num_sbr_bits = (uint16_t)faad_get_processed_bits(ld) - num_sbr_bits;
225
/* check if we read more bits then were available for sbr */
226
if (8*cnt < num_sbr_bits)
188
229
/* -4 does not apply, bs_extension_type is re-read in this function */
189
230
num_align_bits = 8*cnt /*- 4*/ - num_sbr_bits;
345
388
sbr->bs_extended_data = faad_get1bit(ld
346
389
DEBUGVAR(1,224,"sbr_single_channel_element(): bs_extended_data[0]"));
347
391
if (sbr->bs_extended_data)
349
393
uint16_t nr_bits_left;
394
#if (defined(PS_DEC) || defined(DRM_PS))
395
uint8_t ps_ext_read = 0;
350
397
uint16_t cnt = (uint16_t)faad_getbits(ld, 4
351
398
DEBUGVAR(1,225,"sbr_single_channel_element(): bs_extension_size"));
358
405
nr_bits_left = 8 * cnt;
359
406
while (nr_bits_left > 7)
408
uint16_t tmp_nr_bits = 0;
361
410
sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2
362
411
DEBUGVAR(1,227,"sbr_single_channel_element(): bs_extension_id"));
364
nr_bits_left -= sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
414
/* allow only 1 PS extension element per extension data */
415
#if (defined(PS_DEC) || defined(DRM_PS))
416
#if (defined(PS_DEC) && defined(DRM_PS))
417
if (sbr->bs_extension_id == EXTENSION_ID_PS || sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
420
if (sbr->bs_extension_id == EXTENSION_ID_PS)
423
if (sbr->bs_extension_id == DRM_PARAMETRIC_STEREO)
428
if (ps_ext_read == 0)
432
/* to be safe make it 3, will switch to "default"
433
* in sbr_extension() */
434
sbr->bs_extension_id = 3;
439
tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
441
/* check if the data read is bigger than the number of available bits */
442
if (tmp_nr_bits > nr_bits_left)
445
nr_bits_left -= tmp_nr_bits;
367
448
/* Corrigendum */
437
518
if (sbr->bs_add_harmonic_flag[1])
438
519
sinusoidal_coding(ld, sbr, 1);
521
uint8_t saved_t_E[6] = {0}, saved_t_Q[3] = {0};
522
uint8_t saved_L_E = sbr->L_E[0];
523
uint8_t saved_L_Q = sbr->L_Q[0];
524
uint8_t saved_frame_class = sbr->bs_frame_class[0];
526
for (n = 0; n < saved_L_E; n++)
527
saved_t_E[n] = sbr->t_E[0][n];
528
for (n = 0; n < saved_L_Q; n++)
529
saved_t_Q[n] = sbr->t_Q[0][n];
440
531
if ((result = sbr_grid(ld, sbr, 0)) > 0)
442
533
if ((result = sbr_grid(ld, sbr, 1)) > 0)
535
/* restore first channel data as well */
536
sbr->bs_frame_class[0] = saved_frame_class;
537
sbr->L_E[0] = saved_L_E;
538
sbr->L_Q[0] = saved_L_Q;
539
for (n = 0; n < 6; n++)
540
sbr->t_E[0][n] = saved_t_E[n];
541
for (n = 0; n < 3; n++)
542
sbr->t_Q[0][n] = saved_t_Q[n];
444
546
sbr_dtdf(ld, sbr, 0);
445
547
sbr_dtdf(ld, sbr, 1);
446
548
invf_mode(ld, sbr, 0);
463
565
if (sbr->bs_add_harmonic_flag[1])
464
566
sinusoidal_coding(ld, sbr, 1);
466
569
envelope_noise_dequantisation(sbr, 0);
467
570
envelope_noise_dequantisation(sbr, 1);
469
572
if (sbr->bs_coupling)
470
573
unmap_envelope_noise(sbr);
472
576
sbr->bs_extended_data = faad_get1bit(ld
473
577
DEBUGVAR(1,233,"sbr_channel_pair_element(): bs_extended_data[0]"));
485
589
nr_bits_left = 8 * cnt;
486
590
while (nr_bits_left > 7)
592
uint16_t tmp_nr_bits = 0;
488
594
sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2
489
595
DEBUGVAR(1,236,"sbr_channel_pair_element(): bs_extension_id"));
491
sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
597
tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);
599
/* check if the data read is bigger than the number of available bits */
600
if (tmp_nr_bits > nr_bits_left)
603
nr_bits_left -= tmp_nr_bits;
494
606
/* Corrigendum */
519
631
uint8_t i, env, rel, result;
520
632
uint8_t bs_abs_bord, bs_abs_bord_1;
521
633
uint8_t bs_num_env = 0;
634
uint8_t saved_L_E = sbr->L_E[ch];
635
uint8_t saved_L_Q = sbr->L_Q[ch];
636
uint8_t saved_frame_class = sbr->bs_frame_class[ch];
523
638
sbr->bs_frame_class[ch] = (uint8_t)faad_getbits(ld, 2
524
639
DEBUGVAR(1,248,"sbr_grid(): bs_frame_class"));
651
766
/* TODO: this code can probably be integrated into the code above! */
652
767
if ((result = envelope_time_border_vector(sbr, ch)) > 0)
769
sbr->bs_frame_class[ch] = saved_frame_class;
770
sbr->L_E[ch] = saved_L_E;
771
sbr->L_Q[ch] = saved_L_Q;
654
774
noise_floor_time_border_vector(sbr, ch);
777
for (env = 0; env < bs_num_env; env++)
779
printf("freq_res[ch:%d][env:%d]: %d\n", ch, env, sbr->f[ch][env]);
689
816
static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr,
690
817
uint8_t bs_extension_id, uint16_t num_bits_left)
692
824
switch (bs_extension_id)
695
827
case EXTENSION_ID_PS:
697
return ps_data(&(sbr->ps), ld);
830
sbr->ps = ps_init(get_sr_index(sbr->sample_rate));
832
ret = ps_data(sbr->ps, ld, &header);
834
/* enable PS if and only if: a header has been decoded */
835
if (sbr->ps_used == 0 && header == 1)
700
843
case DRM_PARAMETRIC_STEREO:
701
844
sbr->ps_used = 1;
702
return drm_ps_data(&(sbr->drm_ps), ld);
847
sbr->drm_ps = drm_ps_init();
849
return drm_ps_data(sbr->drm_ps, ld);
705
852
sbr->bs_extension_data = (uint8_t)faad_getbits(ld, 6