⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 syntax.c

📁 mpeg4 video codec mpeg4 video codec
💻 C
📖 第 1 页 / 共 5 页
字号:
            uint8_t sect_cb_bits = 4;            /* if "faad_getbits" detects error and returns "0", "k" is never               incremented and we cannot leave the while loop */            if ((ld->error != 0) || (ld->no_more_reading))                return 14;#ifdef ERROR_RESILIENCE            if (hDecoder->aacSectionDataResilienceFlag)                sect_cb_bits = 5;#endif            ics->sect_cb[g][i] = (uint8_t)faad_getbits(ld, sect_cb_bits                DEBUGVAR(1,71,"section_data(): sect_cb"));            if (ics->sect_cb[g][i] == NOISE_HCB)                ics->noise_used = 1;#ifdef ERROR_RESILIENCE            if (hDecoder->aacSectionDataResilienceFlag)            {                if ((ics->sect_cb[g][i] == 11) ||                    ((ics->sect_cb[g][i] >= 16) && (ics->sect_cb[g][i] <= 32)))                {                    vcb11 = 1;                }            }            if (vcb11)            {                sect_len_incr = 1;            } else {#endif                sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits                    DEBUGVAR(1,72,"section_data(): sect_len_incr"));#ifdef ERROR_RESILIENCE            }#endif            while ((sect_len_incr == sect_esc_val) /* &&                (k+sect_len < ics->max_sfb)*/)            {                sect_len += sect_len_incr;                sect_len_incr = (uint8_t)faad_getbits(ld, sect_bits                    DEBUGVAR(1,72,"section_data(): sect_len_incr"));            }            sect_len += sect_len_incr;            ics->sect_start[g][i] = k;            ics->sect_end[g][i] = k + sect_len;            if (k + sect_len >= 8*15)                return 15;            if (i >= 8*15)                return 15;            for (sfb = k; sfb < k + sect_len; sfb++)                ics->sfb_cb[g][sfb] = ics->sect_cb[g][i];#if 0            printf(" %6d %6d %6d\n",                i,                ics->sect_end[g][i],                ics->sect_cb[g][i]);#endif            k += sect_len;            i++;        }        ics->num_sec[g] = i;    }#if 0    printf("\n");#endif    return 0;}/* *  decode_scale_factors() *   decodes the scalefactors from the bitstream *//* * All scalefactors (and also the stereo positions and pns energies) are * transmitted using Huffman coded DPCM relative to the previous active * scalefactor (respectively previous stereo position or previous pns energy, * see subclause 4.6.2 and 4.6.3). The first active scalefactor is * differentially coded relative to the global gain. */static uint8_t decode_scale_factors(ic_stream *ics, bitfile *ld){    uint8_t g, sfb;    int16_t t;    int8_t noise_pcm_flag = 1;    int16_t scale_factor = ics->global_gain;    int16_t is_position = 0;    int16_t noise_energy = ics->global_gain - 90;    for (g = 0; g < ics->num_window_groups; g++)    {        for (sfb = 0; sfb < ics->max_sfb; sfb++)        {            switch (ics->sfb_cb[g][sfb])            {            case ZERO_HCB: /* zero book */                ics->scale_factors[g][sfb] = 0;                break;            case INTENSITY_HCB: /* intensity books */            case INTENSITY_HCB2:                /* decode intensity position */                t = huffman_scale_factor(ld);                is_position += (t - 60);                ics->scale_factors[g][sfb] = is_position;                break;            case NOISE_HCB: /* noise books */                /* decode noise energy */                if (noise_pcm_flag)                {                    noise_pcm_flag = 0;                    t = (int16_t)faad_getbits(ld, 9                        DEBUGVAR(1,73,"scale_factor_data(): first noise")) - 256;                } else {                    t = huffman_scale_factor(ld);                    t -= 60;                }                noise_energy += t;                ics->scale_factors[g][sfb] = noise_energy;                break;            default: /* spectral books */                /* ics->scale_factors[g][sfb] must be between 0 and 255 */                ics->scale_factors[g][sfb] = 0;                /* decode scale factor */                t = huffman_scale_factor(ld);                scale_factor += (t - 60);                if (scale_factor < 0 || scale_factor > 255)                    return 4;                ics->scale_factors[g][sfb] = scale_factor;                break;            }        }    }    return 0;}/* Table 4.4.26 */static uint8_t scale_factor_data(faacDecHandle hDecoder, ic_stream *ics, bitfile *ld){    uint8_t ret = 0;#ifdef PROFILE    int64_t count = faad_get_ts();#endif#ifdef ERROR_RESILIENCE    if (!hDecoder->aacScalefactorDataResilienceFlag)    {#endif        ret = decode_scale_factors(ics, ld);#ifdef ERROR_RESILIENCE    } else {        /* In ER AAC the parameters for RVLC are seperated from the actual           data that holds the scale_factors.           Strangely enough, 2 parameters for HCR are put inbetween them.        */        ret = rvlc_scale_factor_data(ics, ld);    }#endif#ifdef PROFILE    count = faad_get_ts() - count;    hDecoder->scalefac_cycles += count;#endif    return ret;}/* Table 4.4.27 */static void tns_data(ic_stream *ics, tns_info *tns, bitfile *ld){    uint8_t w, filt, i, start_coef_bits, coef_bits;    uint8_t n_filt_bits = 2;    uint8_t length_bits = 6;    uint8_t order_bits = 5;    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)    {        n_filt_bits = 1;        length_bits = 4;        order_bits = 3;    }    for (w = 0; w < ics->num_windows; w++)    {        tns->n_filt[w] = (uint8_t)faad_getbits(ld, n_filt_bits            DEBUGVAR(1,74,"tns_data(): n_filt"));        if (tns->n_filt[w])        {            if ((tns->coef_res[w] = faad_get1bit(ld                DEBUGVAR(1,75,"tns_data(): coef_res"))) & 1)            {                start_coef_bits = 4;            } else {                start_coef_bits = 3;            }        }        for (filt = 0; filt < tns->n_filt[w]; filt++)        {            tns->length[w][filt] = (uint8_t)faad_getbits(ld, length_bits                DEBUGVAR(1,76,"tns_data(): length"));            tns->order[w][filt]  = (uint8_t)faad_getbits(ld, order_bits                DEBUGVAR(1,77,"tns_data(): order"));            if (tns->order[w][filt])            {                tns->direction[w][filt] = faad_get1bit(ld                    DEBUGVAR(1,78,"tns_data(): direction"));                tns->coef_compress[w][filt] = faad_get1bit(ld                    DEBUGVAR(1,79,"tns_data(): coef_compress"));                coef_bits = start_coef_bits - tns->coef_compress[w][filt];                for (i = 0; i < tns->order[w][filt]; i++)                {                    tns->coef[w][filt][i] = (uint8_t)faad_getbits(ld, coef_bits                        DEBUGVAR(1,80,"tns_data(): coef"));                }            }        }    }}#ifdef LTP_DEC/* Table 4.4.28 */static uint8_t ltp_data(faacDecHandle hDecoder, ic_stream *ics, ltp_info *ltp, bitfile *ld){    uint8_t sfb, w;    ltp->lag = 0;#ifdef LD_DEC    if (hDecoder->object_type == LD)    {        ltp->lag_update = (uint8_t)faad_getbits(ld, 1            DEBUGVAR(1,142,"ltp_data(): lag_update"));        if (ltp->lag_update)        {            ltp->lag = (uint16_t)faad_getbits(ld, 10                DEBUGVAR(1,81,"ltp_data(): lag"));        }    } else {#endif        ltp->lag = (uint16_t)faad_getbits(ld, 11            DEBUGVAR(1,81,"ltp_data(): lag"));#ifdef LD_DEC    }#endif    /* Check length of lag */    if (ltp->lag > (hDecoder->frameLength << 1))        return 18;    ltp->coef = (uint8_t)faad_getbits(ld, 3        DEBUGVAR(1,82,"ltp_data(): coef"));    if (ics->window_sequence == EIGHT_SHORT_SEQUENCE)    {        for (w = 0; w < ics->num_windows; w++)        {            if ((ltp->short_used[w] = faad_get1bit(ld                DEBUGVAR(1,83,"ltp_data(): short_used"))) & 1)            {                ltp->short_lag_present[w] = faad_get1bit(ld                    DEBUGVAR(1,84,"ltp_data(): short_lag_present"));                if (ltp->short_lag_present[w])                {                    ltp->short_lag[w] = (uint8_t)faad_getbits(ld, 4                        DEBUGVAR(1,85,"ltp_data(): short_lag"));                }            }        }    } else {        ltp->last_band = (ics->max_sfb < MAX_LTP_SFB ? ics->max_sfb : MAX_LTP_SFB);        for (sfb = 0; sfb < ltp->last_band; sfb++)        {            ltp->long_used[sfb] = faad_get1bit(ld                DEBUGVAR(1,86,"ltp_data(): long_used"));        }    }    return 0;}#endif/* Table 4.4.29 */static uint8_t spectral_data(faacDecHandle hDecoder, ic_stream *ics, bitfile *ld,                             int16_t *spectral_data){    int8_t i;    uint8_t g;    uint16_t inc, k, p = 0;    uint8_t groups = 0;    uint8_t sect_cb;    uint8_t result;    uint16_t nshort = hDecoder->frameLength/8;#ifdef PROFILE    int64_t count = faad_get_ts();#endif    for(g = 0; g < ics->num_window_groups; g++)    {        p = groups*nshort;        for (i = 0; i < ics->num_sec[g]; i++)        {            sect_cb = ics->sect_cb[g][i];            inc = (sect_cb >= FIRST_PAIR_HCB) ? 2 : 4;            switch (sect_cb)            {            case ZERO_HCB:            case NOISE_HCB:            case INTENSITY_HCB:            case INTENSITY_HCB2:                p += (ics->sect_sfb_offset[g][ics->sect_end[g][i]] -                    ics->sect_sfb_offset[g][ics->sect_start[g][i]]);                break;            default:                for (k = ics->sect_sfb_offset[g][ics->sect_start[g][i]];                     k < ics->sect_sfb_offset[g][ics->sect_end[g][i]]; k += inc)                {                    if ((result = huffman_spectral_data(sect_cb, ld, &spectral_data[p])) > 0)                        return result;                    p += inc;                }                break;            }        }        groups += ics->window_group_length[g];    }#ifdef PROFILE    count = faad_get_ts() - count;    hDecoder->spectral_cycles += count;#endif    return 0;}/* Table 4.4.30 */static uint16_t extension_payload(bitfile *ld, drc_info *drc, uint16_t count){    uint16_t i, n, dataElementLength;    uint8_t dataElementLengthPart;    uint8_t align = 4, data_element_version, loopCounter;    uint8_t extension_type = (uint8_t)faad_getbits(ld, 4        DEBUGVAR(1,87,"extension_payload(): extension_type"));    switch (extension_type)    {    case EXT_DYNAMIC_RANGE:        drc->present = 1;        n = dynamic_range_info(ld, drc);        return n;    case EXT_FILL_DATA:        /* fill_nibble = */ faad_getbits(ld, 4            DEBUGVAR(1,136,"extension_payload(): fill_nibble")); /* must be 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -