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

📄 sbr_syntax.c

📁 wince下著名的视频播放器源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#endif            tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);            /* check if the data read is bigger than the number of available bits */            if (tmp_nr_bits > nr_bits_left)                return 1;            nr_bits_left -= tmp_nr_bits;        }        /* Corrigendum */        if (nr_bits_left > 0)        {            faad_getbits(ld, nr_bits_left                DEBUGVAR(1,280,"sbr_single_channel_element(): nr_bits_left"));        }    }    return 0;}/* table 6 */static uint8_t sbr_channel_pair_element(bitfile *ld, sbr_info *sbr){    uint8_t n, result;    if (faad_get1bit(ld        DEBUGVAR(1,228,"sbr_single_channel_element(): bs_data_extra")))    {        faad_getbits(ld, 4            DEBUGVAR(1,228,"sbr_channel_pair_element(): bs_reserved_bits_data"));        faad_getbits(ld, 4            DEBUGVAR(1,228,"sbr_channel_pair_element(): bs_reserved_bits_data"));    }    sbr->bs_coupling = faad_get1bit(ld        DEBUGVAR(1,228,"sbr_channel_pair_element(): bs_coupling"));    if (sbr->bs_coupling)    {        if ((result = sbr_grid(ld, sbr, 0)) > 0)            return result;        /* need to copy some data from left to right */        sbr->bs_frame_class[1] = sbr->bs_frame_class[0];        sbr->L_E[1] = sbr->L_E[0];        sbr->L_Q[1] = sbr->L_Q[0];        sbr->bs_pointer[1] = sbr->bs_pointer[0];        for (n = 0; n <= sbr->L_E[0]; n++)        {            sbr->t_E[1][n] = sbr->t_E[0][n];            sbr->f[1][n] = sbr->f[0][n];        }        for (n = 0; n <= sbr->L_Q[0]; n++)            sbr->t_Q[1][n] = sbr->t_Q[0][n];        sbr_dtdf(ld, sbr, 0);        sbr_dtdf(ld, sbr, 1);        invf_mode(ld, sbr, 0);        /* more copying */        for (n = 0; n < sbr->N_Q; n++)            sbr->bs_invf_mode[1][n] = sbr->bs_invf_mode[0][n];        sbr_envelope(ld, sbr, 0);        sbr_noise(ld, sbr, 0);        sbr_envelope(ld, sbr, 1);        sbr_noise(ld, sbr, 1);        memset(sbr->bs_add_harmonic[0], 0, 64*sizeof(uint8_t));        memset(sbr->bs_add_harmonic[1], 0, 64*sizeof(uint8_t));        sbr->bs_add_harmonic_flag[0] = faad_get1bit(ld            DEBUGVAR(1,231,"sbr_channel_pair_element(): bs_add_harmonic_flag[0]"));        if (sbr->bs_add_harmonic_flag[0])            sinusoidal_coding(ld, sbr, 0);        sbr->bs_add_harmonic_flag[1] = faad_get1bit(ld            DEBUGVAR(1,232,"sbr_channel_pair_element(): bs_add_harmonic_flag[1]"));        if (sbr->bs_add_harmonic_flag[1])            sinusoidal_coding(ld, sbr, 1);    } else {        uint8_t saved_t_E[6] = {0}, saved_t_Q[3] = {0};        uint8_t saved_L_E = sbr->L_E[0];        uint8_t saved_L_Q = sbr->L_Q[0];        uint8_t saved_frame_class = sbr->bs_frame_class[0];        for (n = 0; n < saved_L_E; n++)            saved_t_E[n] = sbr->t_E[0][n];        for (n = 0; n < saved_L_Q; n++)            saved_t_Q[n] = sbr->t_Q[0][n];        if ((result = sbr_grid(ld, sbr, 0)) > 0)            return result;        if ((result = sbr_grid(ld, sbr, 1)) > 0)        {            /* restore first channel data as well */            sbr->bs_frame_class[0] = saved_frame_class;            sbr->L_E[0] = saved_L_E;            sbr->L_Q[0] = saved_L_Q;            for (n = 0; n < 6; n++)                sbr->t_E[0][n] = saved_t_E[n];            for (n = 0; n < 3; n++)                sbr->t_Q[0][n] = saved_t_Q[n];            return result;        }        sbr_dtdf(ld, sbr, 0);        sbr_dtdf(ld, sbr, 1);        invf_mode(ld, sbr, 0);        invf_mode(ld, sbr, 1);        sbr_envelope(ld, sbr, 0);        sbr_envelope(ld, sbr, 1);        sbr_noise(ld, sbr, 0);        sbr_noise(ld, sbr, 1);        memset(sbr->bs_add_harmonic[0], 0, 64*sizeof(uint8_t));        memset(sbr->bs_add_harmonic[1], 0, 64*sizeof(uint8_t));        sbr->bs_add_harmonic_flag[0] = faad_get1bit(ld            DEBUGVAR(1,239,"sbr_channel_pair_element(): bs_add_harmonic_flag[0]"));        if (sbr->bs_add_harmonic_flag[0])            sinusoidal_coding(ld, sbr, 0);        sbr->bs_add_harmonic_flag[1] = faad_get1bit(ld            DEBUGVAR(1,240,"sbr_channel_pair_element(): bs_add_harmonic_flag[1]"));        if (sbr->bs_add_harmonic_flag[1])            sinusoidal_coding(ld, sbr, 1);    }#ifndef FIXED_POINT    envelope_noise_dequantisation(sbr, 0);    envelope_noise_dequantisation(sbr, 1);    if (sbr->bs_coupling)        unmap_envelope_noise(sbr);#endif    sbr->bs_extended_data = faad_get1bit(ld        DEBUGVAR(1,233,"sbr_channel_pair_element(): bs_extended_data[0]"));    if (sbr->bs_extended_data)    {        uint16_t nr_bits_left;        uint16_t cnt = (uint16_t)faad_getbits(ld, 4            DEBUGVAR(1,234,"sbr_channel_pair_element(): bs_extension_size"));        if (cnt == 15)        {            cnt += (uint16_t)faad_getbits(ld, 8                DEBUGVAR(1,235,"sbr_channel_pair_element(): bs_esc_count"));        }        nr_bits_left = 8 * cnt;        while (nr_bits_left > 7)        {            uint16_t tmp_nr_bits = 0;            sbr->bs_extension_id = (uint8_t)faad_getbits(ld, 2                DEBUGVAR(1,236,"sbr_channel_pair_element(): bs_extension_id"));            tmp_nr_bits += 2;            tmp_nr_bits += sbr_extension(ld, sbr, sbr->bs_extension_id, nr_bits_left);            /* check if the data read is bigger than the number of available bits */            if (tmp_nr_bits > nr_bits_left)                return 1;            nr_bits_left -= tmp_nr_bits;        }        /* Corrigendum */        if (nr_bits_left > 0)        {            faad_getbits(ld, nr_bits_left                DEBUGVAR(1,280,"sbr_channel_pair_element(): nr_bits_left"));        }    }    return 0;}/* integer log[2](x): input range [0,10) */static int8_t sbr_log2(const int8_t val){    static const int8_t log2tab[] = { 0, 0, 1, 2, 2, 3, 3, 3, 3, 4 };    if (val < 10 && val >= 0)        return log2tab[val];    else        return 0;}/* table 7 */static uint8_t sbr_grid(bitfile *ld, sbr_info *sbr, uint8_t ch){    uint8_t i, env, rel, result;    uint8_t bs_abs_bord, bs_abs_bord_1;    uint8_t bs_num_env = 0;    uint8_t saved_L_E = sbr->L_E[ch];    uint8_t saved_L_Q = sbr->L_Q[ch];    uint8_t saved_frame_class = sbr->bs_frame_class[ch];    sbr->bs_frame_class[ch] = (uint8_t)faad_getbits(ld, 2        DEBUGVAR(1,248,"sbr_grid(): bs_frame_class"));    switch (sbr->bs_frame_class[ch])    {    case FIXFIX:        i = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,249,"sbr_grid(): bs_num_env_raw"));        bs_num_env = min(1 << i, 5);        i = (uint8_t)faad_get1bit(ld            DEBUGVAR(1,250,"sbr_grid(): bs_freq_res_flag"));        for (env = 0; env < bs_num_env; env++)            sbr->f[ch][env] = i;        sbr->abs_bord_lead[ch] = 0;        sbr->abs_bord_trail[ch] = sbr->numTimeSlots;        sbr->n_rel_lead[ch] = bs_num_env - 1;        sbr->n_rel_trail[ch] = 0;        break;    case FIXVAR:        bs_abs_bord = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,251,"sbr_grid(): bs_abs_bord")) + sbr->numTimeSlots;        bs_num_env = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,252,"sbr_grid(): bs_num_env")) + 1;        for (rel = 0; rel < bs_num_env-1; rel++)        {            sbr->bs_rel_bord[ch][rel] = 2 * (uint8_t)faad_getbits(ld, 2                DEBUGVAR(1,253,"sbr_grid(): bs_rel_bord")) + 2;        }        i = sbr_log2(bs_num_env + 1);        sbr->bs_pointer[ch] = (uint8_t)faad_getbits(ld, i            DEBUGVAR(1,254,"sbr_grid(): bs_pointer"));        for (env = 0; env < bs_num_env; env++)        {            sbr->f[ch][bs_num_env - env - 1] = (uint8_t)faad_get1bit(ld                DEBUGVAR(1,255,"sbr_grid(): bs_freq_res"));        }        sbr->abs_bord_lead[ch] = 0;        sbr->abs_bord_trail[ch] = bs_abs_bord;        sbr->n_rel_lead[ch] = 0;        sbr->n_rel_trail[ch] = bs_num_env - 1;        break;    case VARFIX:        bs_abs_bord = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,256,"sbr_grid(): bs_abs_bord"));        bs_num_env = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,257,"sbr_grid(): bs_num_env")) + 1;        for (rel = 0; rel < bs_num_env-1; rel++)        {            sbr->bs_rel_bord[ch][rel] = 2 * (uint8_t)faad_getbits(ld, 2                DEBUGVAR(1,258,"sbr_grid(): bs_rel_bord")) + 2;        }        i = sbr_log2(bs_num_env + 1);        sbr->bs_pointer[ch] = (uint8_t)faad_getbits(ld, i            DEBUGVAR(1,259,"sbr_grid(): bs_pointer"));        for (env = 0; env < bs_num_env; env++)        {            sbr->f[ch][env] = (uint8_t)faad_get1bit(ld                DEBUGVAR(1,260,"sbr_grid(): bs_freq_res"));        }        sbr->abs_bord_lead[ch] = bs_abs_bord;        sbr->abs_bord_trail[ch] = sbr->numTimeSlots;        sbr->n_rel_lead[ch] = bs_num_env - 1;        sbr->n_rel_trail[ch] = 0;        break;    case VARVAR:        bs_abs_bord = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,261,"sbr_grid(): bs_abs_bord_0"));        bs_abs_bord_1 = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,262,"sbr_grid(): bs_abs_bord_1")) + sbr->numTimeSlots;        sbr->bs_num_rel_0[ch] = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,263,"sbr_grid(): bs_num_rel_0"));        sbr->bs_num_rel_1[ch] = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,264,"sbr_grid(): bs_num_rel_1"));        bs_num_env = min(5, sbr->bs_num_rel_0[ch] + sbr->bs_num_rel_1[ch] + 1);        for (rel = 0; rel < sbr->bs_num_rel_0[ch]; rel++)        {            sbr->bs_rel_bord_0[ch][rel] = 2 * (uint8_t)faad_getbits(ld, 2                DEBUGVAR(1,265,"sbr_grid(): bs_rel_bord")) + 2;        }        for(rel = 0; rel < sbr->bs_num_rel_1[ch]; rel++)        {            sbr->bs_rel_bord_1[ch][rel] = 2 * (uint8_t)faad_getbits(ld, 2                DEBUGVAR(1,266,"sbr_grid(): bs_rel_bord")) + 2;        }        i = sbr_log2(sbr->bs_num_rel_0[ch] + sbr->bs_num_rel_1[ch] + 2);        sbr->bs_pointer[ch] = (uint8_t)faad_getbits(ld, i            DEBUGVAR(1,267,"sbr_grid(): bs_pointer"));        for (env = 0; env < bs_num_env; env++)        {            sbr->f[ch][env] = (uint8_t)faad_get1bit(ld                DEBUGVAR(1,268,"sbr_grid(): bs_freq_res"));        }        sbr->abs_bord_lead[ch] = bs_abs_bord;        sbr->abs_bord_trail[ch] = bs_abs_bord_1;        sbr->n_rel_lead[ch] = sbr->bs_num_rel_0[ch];        sbr->n_rel_trail[ch] = sbr->bs_num_rel_1[ch];        break;    }    if (sbr->bs_frame_class[ch] == VARVAR)        sbr->L_E[ch] = min(bs_num_env, 5);    else        sbr->L_E[ch] = min(bs_num_env, 4);    if (sbr->L_E[ch] <= 0)        return 1;    if (sbr->L_E[ch] > 1)        sbr->L_Q[ch] = 2;    else        sbr->L_Q[ch] = 1;    /* TODO: this code can probably be integrated into the code above! */    if ((result = envelope_time_border_vector(sbr, ch)) > 0)    {        sbr->bs_frame_class[ch] = saved_frame_class;        sbr->L_E[ch] = saved_L_E;        sbr->L_Q[ch] = saved_L_Q;        return result;    }    noise_floor_time_border_vector(sbr, ch);#if 0    for (env = 0; env < bs_num_env; env++)    {        printf("freq_res[ch:%d][env:%d]: %d\n", ch, env, sbr->f[ch][env]);    }#endif    return 0;}/* table 8 */static void sbr_dtdf(bitfile *ld, sbr_info *sbr, uint8_t ch){    uint8_t i;    for (i = 0; i < sbr->L_E[ch]; i++)    {        sbr->bs_df_env[ch][i] = faad_get1bit(ld            DEBUGVAR(1,269,"sbr_dtdf(): bs_df_env"));    }    for (i = 0; i < sbr->L_Q[ch]; i++)    {        sbr->bs_df_noise[ch][i] = faad_get1bit(ld            DEBUGVAR(1,270,"sbr_dtdf(): bs_df_noise"));    }}/* table 9 */static void invf_mode(bitfile *ld, sbr_info *sbr, uint8_t ch){    uint8_t n;    for (n = 0; n < sbr->N_Q; n++)    {        sbr->bs_invf_mode[ch][n] = (uint8_t)faad_getbits(ld, 2            DEBUGVAR(1,271,"invf_mode(): bs_invf_mode"));    }}static uint16_t sbr_extension(bitfile *ld, sbr_info *sbr,                              uint8_t bs_extension_id, uint16_t num_bits_left){#ifdef PS_DEC    uint8_t header;    uint16_t ret;#endif    switch (bs_extension_id)    {#ifdef PS_DEC    case EXTENSION_ID_PS:        if (!sbr->ps)        {            sbr->ps = ps_init(get_sr_index(sbr->sample_rate));        }        ret = ps_data(sbr->ps, ld, &header);        /* enable PS if and only if: a header has been decoded */        if (sbr->ps_used == 0 && header == 1)        {            sbr->ps_used = 1;        }        return ret;#endif#ifdef DRM_PS    case DRM_PARAMETRIC_STEREO:        sbr->ps_used = 1;        if (!sbr->drm_ps)        {            sbr->drm_ps = drm_ps_init();        }        return drm_ps_data(sbr->drm_ps, ld);#endif    default:        sbr->bs_extension_data = (uint8_t)faad_getbits(ld, 6            DEBUGVAR(1,279,"sbr_single_channel_element(): bs_extension_data"));        return 6;    }}/* table 12 */static void sinusoidal_coding(bitfile *ld, sbr_info *sbr, uint8_t ch){    uint8_t n;    for (n = 0; n < sbr->N_high; n++)    {        sbr->bs_add_harmonic[ch][n] = faad_get1bit(ld            DEBUGVAR(1,278,"sinusoidal_coding(): bs_add_harmonic"));    }}#endif /* SBR_DEC */

⌨️ 快捷键说明

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