|
|
|
@ -59,31 +59,31 @@ static inline int compress_coeffs(int *coef, int order, int c_bits) |
|
|
|
|
*/ |
|
|
|
|
void ff_aac_encode_tns_info(AACEncContext *s, SingleChannelElement *sce) |
|
|
|
|
{ |
|
|
|
|
int i, w, filt, coef_len, coef_compress = 0; |
|
|
|
|
const int is8 = sce->ics.window_sequence[0] == EIGHT_SHORT_SEQUENCE; |
|
|
|
|
int i, w, filt, coef_compress = 0, coef_len; |
|
|
|
|
TemporalNoiseShaping *tns = &sce->tns; |
|
|
|
|
const int c_bits = is8 ? TNS_Q_BITS_SHORT == 4 : TNS_Q_BITS == 4; |
|
|
|
|
const int is8 = sce->ics.window_sequence[0] == EIGHT_SHORT_SEQUENCE; |
|
|
|
|
const int c_bits = is8 ? TNS_Q_BITS_IS8 == 4 : TNS_Q_BITS == 4; |
|
|
|
|
|
|
|
|
|
if (!sce->tns.present) |
|
|
|
|
return; |
|
|
|
|
|
|
|
|
|
for (i = 0; i < sce->ics.num_windows; i++) { |
|
|
|
|
put_bits(&s->pb, 2 - is8, sce->tns.n_filt[i]); |
|
|
|
|
if (tns->n_filt[i]) { |
|
|
|
|
put_bits(&s->pb, 1, c_bits); |
|
|
|
|
for (filt = 0; filt < tns->n_filt[i]; filt++) { |
|
|
|
|
put_bits(&s->pb, 6 - 2 * is8, tns->length[i][filt]); |
|
|
|
|
put_bits(&s->pb, 5 - 2 * is8, tns->order[i][filt]); |
|
|
|
|
if (tns->order[i][filt]) { |
|
|
|
|
coef_compress = compress_coeffs(tns->coef_idx[i][filt], |
|
|
|
|
tns->order[i][filt], c_bits); |
|
|
|
|
put_bits(&s->pb, 1, !!tns->direction[i][filt]); |
|
|
|
|
put_bits(&s->pb, 1, !!coef_compress); |
|
|
|
|
coef_len = c_bits + 3 - coef_compress; |
|
|
|
|
for (w = 0; w < tns->order[i][filt]; w++) |
|
|
|
|
put_bits(&s->pb, coef_len, tns->coef_idx[i][filt][w]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (!tns->n_filt[i]) |
|
|
|
|
continue; |
|
|
|
|
put_bits(&s->pb, 1, c_bits); |
|
|
|
|
for (filt = 0; filt < tns->n_filt[i]; filt++) { |
|
|
|
|
put_bits(&s->pb, 6 - 2 * is8, tns->length[i][filt]); |
|
|
|
|
put_bits(&s->pb, 5 - 2 * is8, tns->order[i][filt]); |
|
|
|
|
if (!tns->order[i][filt]) |
|
|
|
|
continue; |
|
|
|
|
put_bits(&s->pb, 1, tns->direction[i][filt]); |
|
|
|
|
coef_compress = compress_coeffs(tns->coef_idx[i][filt], |
|
|
|
|
tns->order[i][filt], c_bits); |
|
|
|
|
put_bits(&s->pb, 1, coef_compress); |
|
|
|
|
coef_len = c_bits + 3 - coef_compress; |
|
|
|
|
for (w = 0; w < tns->order[i][filt]; w++) |
|
|
|
|
put_bits(&s->pb, coef_len, tns->coef_idx[i][filt][w]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|