1186 lines · 49.9 KB · C
RawDownload
            float bmax = bval2bmax(g * 17.0f / sce0->ics.num_swb) / 0.0045f;            if (!cpe->is_mask[w*16+g])                cpe->ms_mask[w*16+g] = 0;            if (!sce0->zeroes[w*16+g] && !sce1->zeroes[w*16+g] && !cpe->is_mask[w*16+g]) {                float Mmax = 0.0f, Smax = 0.0f;                 /* Must compute mid/side SF and book for the whole window group */                for (w2 = 0; w2 < sce0->ics.group_len[w]; w2++) {                    for (i = 0; i < sce0->ics.swb_sizes[g]; i++) {                        M[i] = (sce0->coeffs[start+(w+w2)*128+i]                              + sce1->coeffs[start+(w+w2)*128+i]) * 0.5;                        S[i] =  M[i]                              - sce1->coeffs[start+(w+w2)*128+i];                    }                    s->aacdsp.abs_pow34(M34, M, sce0->ics.swb_sizes[g]);                    s->aacdsp.abs_pow34(S34, S, sce0->ics.swb_sizes[g]);                    for (i = 0; i < sce0->ics.swb_sizes[g]; i++ ) {                        Mmax = FFMAX(Mmax, M34[i]);                        Smax = FFMAX(Smax, S34[i]);                    }                }                 for (sid_sf_boost = 0; sid_sf_boost < 4; sid_sf_boost++) {                    float dist1 = 0.0f, dist2 = 0.0f;                    int B0 = 0, B1 = 0;                    int minidx;                    int mididx, sididx;                    int midcb, sidcb;                     minidx = FFMIN(sce0->sf_idx[w*16+g], sce1->sf_idx[w*16+g]);                    mididx = av_clip(minidx, 0, SCALE_MAX_POS - SCALE_DIV_512);                    sididx = av_clip(minidx - sid_sf_boost * 3, 0, SCALE_MAX_POS - SCALE_DIV_512);                    if (sce0->band_type[w*16+g] != NOISE_BT && sce1->band_type[w*16+g] != NOISE_BT                        && (   !ff_sfdelta_can_replace(sce0, nextband0, prev_mid, mididx, w*16+g)                            || !ff_sfdelta_can_replace(sce1, nextband1, prev_side, sididx, w*16+g))) {                        /* scalefactor range violation, bad stuff, will decrease quality unacceptably */                        continue;                    }                     midcb = find_min_book(Mmax, mididx);                    sidcb = find_min_book(Smax, sididx);                     /* No CB can be zero */                    midcb = FFMAX(1,midcb);                    sidcb = FFMAX(1,sidcb);                     for (w2 = 0; w2 < sce0->ics.group_len[w]; w2++) {                        FFPsyBand *band0 = &s->psy.ch[s->cur_channel+0].psy_bands[(w+w2)*16+g];                        FFPsyBand *band1 = &s->psy.ch[s->cur_channel+1].psy_bands[(w+w2)*16+g];                        float minthr = FFMIN(band0->threshold, band1->threshold);                        int b1,b2,b3,b4;                        for (i = 0; i < sce0->ics.swb_sizes[g]; i++) {                            M[i] = (sce0->coeffs[start+(w+w2)*128+i]                                  + sce1->coeffs[start+(w+w2)*128+i]) * 0.5;                            S[i] =  M[i]                                  - sce1->coeffs[start+(w+w2)*128+i];                        }                         s->aacdsp.abs_pow34(L34, sce0->coeffs+start+(w+w2)*128, sce0->ics.swb_sizes[g]);                        s->aacdsp.abs_pow34(R34, sce1->coeffs+start+(w+w2)*128, sce0->ics.swb_sizes[g]);                        s->aacdsp.abs_pow34(M34, M,                         sce0->ics.swb_sizes[g]);                        s->aacdsp.abs_pow34(S34, S,                         sce0->ics.swb_sizes[g]);                        dist1 += quantize_band_cost(s, &sce0->coeffs[start + (w+w2)*128],                                                    L34,                                                    sce0->ics.swb_sizes[g],                                                    sce0->sf_idx[w*16+g],                                                    sce0->band_type[w*16+g],                                                    lambda / (band0->threshold + FLT_MIN), INFINITY, &b1, NULL);                        dist1 += quantize_band_cost(s, &sce1->coeffs[start + (w+w2)*128],                                                    R34,                                                    sce1->ics.swb_sizes[g],                                                    sce1->sf_idx[w*16+g],                                                    sce1->band_type[w*16+g],                                                    lambda / (band1->threshold + FLT_MIN), INFINITY, &b2, NULL);                        dist2 += quantize_band_cost(s, M,                                                    M34,                                                    sce0->ics.swb_sizes[g],                                                    mididx,                                                    midcb,                                                    lambda / (minthr + FLT_MIN), INFINITY, &b3, NULL);                        dist2 += quantize_band_cost(s, S,                                                    S34,                                                    sce1->ics.swb_sizes[g],                                                    sididx,                                                    sidcb,                                                    mslambda / (minthr * bmax + FLT_MIN), INFINITY, &b4, NULL);                        B0 += b1+b2;                        B1 += b3+b4;                        dist1 -= b1+b2;                        dist2 -= b3+b4;                    }                    cpe->ms_mask[w*16+g] = dist2 <= dist1 && B1 < B0;                    if (cpe->ms_mask[w*16+g]) {                        if (sce0->band_type[w*16+g] != NOISE_BT && sce1->band_type[w*16+g] != NOISE_BT) {                            sce0->sf_idx[w*16+g] = mididx;                            sce1->sf_idx[w*16+g] = sididx;                            sce0->band_type[w*16+g] = midcb;                            sce1->band_type[w*16+g] = sidcb;                        } else if ((sce0->band_type[w*16+g] != NOISE_BT) ^ (sce1->band_type[w*16+g] != NOISE_BT)) {                            /* ms_mask unneeded, and it confuses some decoders */                            cpe->ms_mask[w*16+g] = 0;                        }                        break;                    } else if (B1 > B0) {                        /* More boost won't fix this */                        break;                    }                }            }            if (!sce0->zeroes[w*16+g] && sce0->band_type[w*16+g] < RESERVED_BT)                prev_mid = sce0->sf_idx[w*16+g];            if (!sce1->zeroes[w*16+g] && !cpe->is_mask[w*16+g] && sce1->band_type[w*16+g] < RESERVED_BT)                prev_side = sce1->sf_idx[w*16+g];            start += sce0->ics.swb_sizes[g];        }    }} const AACCoefficientsEncoder ff_aac_coders[AAC_CODER_NB] = {    [AAC_CODER_ANMR] = {        search_for_quantizers_anmr,        encode_window_bands_info,        quantize_and_encode_band,        ff_aac_encode_tns_info,        ff_aac_encode_ltp_info,        ff_aac_encode_main_pred,        ff_aac_adjust_common_pred,        ff_aac_adjust_common_ltp,        ff_aac_apply_main_pred,        ff_aac_apply_tns,        ff_aac_update_ltp,        ff_aac_ltp_insert_new_frame,        set_special_band_scalefactors,        search_for_pns,        mark_pns,        ff_aac_search_for_tns,        ff_aac_search_for_ltp,        search_for_ms,        ff_aac_search_for_is,        ff_aac_search_for_pred,    },    [AAC_CODER_TWOLOOP] = {        search_for_quantizers_twoloop,        codebook_trellis_rate,        quantize_and_encode_band,        ff_aac_encode_tns_info,        ff_aac_encode_ltp_info,        ff_aac_encode_main_pred,        ff_aac_adjust_common_pred,        ff_aac_adjust_common_ltp,        ff_aac_apply_main_pred,        ff_aac_apply_tns,        ff_aac_update_ltp,        ff_aac_ltp_insert_new_frame,        set_special_band_scalefactors,        search_for_pns,        mark_pns,        ff_aac_search_for_tns,        ff_aac_search_for_ltp,        search_for_ms,        ff_aac_search_for_is,        ff_aac_search_for_pred,    },    [AAC_CODER_FAST] = {        search_for_quantizers_fast,        codebook_trellis_rate,        quantize_and_encode_band,        ff_aac_encode_tns_info,        ff_aac_encode_ltp_info,        ff_aac_encode_main_pred,        ff_aac_adjust_common_pred,        ff_aac_adjust_common_ltp,        ff_aac_apply_main_pred,        ff_aac_apply_tns,        ff_aac_update_ltp,        ff_aac_ltp_insert_new_frame,        set_special_band_scalefactors,        search_for_pns,        mark_pns,        ff_aac_search_for_tns,        ff_aac_search_for_ltp,        search_for_ms,        ff_aac_search_for_is,        ff_aac_search_for_pred,    },};

Lines 1001–1186 of 1186. Previous lines

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t