亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? libmp3dec.c

?? 能解壓幾乎所有mp3
?? C
?? 第 1 頁 / 共 5 頁
字號:
        gains[1] = gain - (g->subblock_gain[1] << 3);
        gains[2] = gain - (g->subblock_gain[2] << 3);
        k = g->long_end;
        for(i=g->short_start;i<13;i++) {
            len = bstab[i];
            for(l=0;l<3;l++) {
                v0 = gains[l] - (g->scale_factors[k++] << shift);
                for(j=len;j>0;j--)
                *exp_ptr++ = v0;
            }
        }
    }
}

/* handle n = 0 too */
static int get_bitsz(GetBitContext *s, int n)
{
    if (n == 0)
        return 0;
    else
        return get_bits(s, n);
}

static int huffman_decode(MPADecodeContext *s, GranuleDef *g,
                          int16_t *exponents, int end_pos)
{
    int s_index;
    int linbits, code, x, y, l, v, i, j, k, pos;
    GetBitContext last_gb;
    VLC *vlc;
    uint8_t *code_table;

    /* low frequencies (called big values) */
    s_index = 0;
    for(i=0;i<3;i++) {
        j = g->region_size[i];
        if (j == 0)
            continue;
        /* select vlc table */
        k = g->table_select[i];
        l = mpa_huff_data[k][0];
        linbits = mpa_huff_data[k][1];
        vlc = &huff_vlc[l];
        code_table = huff_code_table[l];

        /* read huffcode and compute each couple */
        for(;j>0;j--) {
            if (get_bits_count(&s->gb) >= end_pos)
                break;
            if (code_table) {
                code = get_vlc(&s->gb, vlc);
                if (code < 0)
                    return -1;
                y = code_table[code];
                x = y >> 4;
                y = y & 0x0f;
            } else {
                x = 0;
                y = 0;
            }
            if (x) {
                if (x == 15)
                    x += get_bitsz(&s->gb, linbits);
                v = l3_unscale(x, exponents[s_index]);
                if (get_bits1(&s->gb))
                    v = -v;
            } else {
                v = 0;
            }
            g->sb_hybrid[s_index++] = v;
            if (y) {
                if (y == 15)
                    y += get_bitsz(&s->gb, linbits);
                v = l3_unscale(y, exponents[s_index]);
                if (get_bits1(&s->gb))
                    v = -v;
            } else {
                v = 0;
            }
            g->sb_hybrid[s_index++] = v;
        }
    }
            
    /* high frequencies */
    vlc = &huff_quad_vlc[g->count1table_select];
    last_gb.buffer = NULL;
    while (s_index <= 572) {
        pos = get_bits_count(&s->gb);
        if (pos >= end_pos) {
            if (pos > end_pos && last_gb.buffer != NULL) {
                /* some encoders generate an incorrect size for this
                   part. We must go back into the data */
                s_index -= 4;
                s->gb = last_gb;
            }
            break;
        }
        last_gb= s->gb;

        code = get_vlc(&s->gb, vlc);
        if (code < 0)
            return -1;
        for(i=0;i<4;i++) {
            if (code & (8 >> i)) {
                /* non zero value. Could use a hand coded function for
                   'one' value */
                v = l3_unscale(1, exponents[s_index]);
                if(get_bits1(&s->gb))
                    v = -v;
            } else {
                v = 0;
            }
            g->sb_hybrid[s_index++] = v;
        }
    }
    while (s_index < 576)
        g->sb_hybrid[s_index++] = 0;
    return 0;
}

/* Reorder short blocks from bitstream order to interleaved order. It
   would be faster to do it in parsing, but the code would be far more
   complicated */
static void reorder_block(MPADecodeContext *s, GranuleDef *g)
{
    int i, j, k, len;
    int32_t *ptr, *dst, *ptr1;
    int32_t tmp[576];

    if (g->block_type != 2)
        return;

    if (g->switch_point) {
        if (s->sample_rate_index != 8) {
            ptr = g->sb_hybrid + 36;
        } else {
            ptr = g->sb_hybrid + 48;
        }
    } else {
        ptr = g->sb_hybrid;
    }
    
    for(i=g->short_start;i<13;i++) {
        len = band_size_short[s->sample_rate_index][i];
        ptr1 = ptr;
        for(k=0;k<3;k++) {
            dst = tmp + k;
            for(j=len;j>0;j--) {
                *dst = *ptr++;
                dst += 3;
            }
        }
        memcpy(ptr1, tmp, len * 3 * sizeof(int32_t));
    }
}

#define ISQRT2 FIXR(0.70710678118654752440)

static void compute_stereo(MPADecodeContext *s,
                           GranuleDef *g0, GranuleDef *g1)
{
    int i, j, k, l;
    int32_t v1, v2;
    int sf_max, tmp0, tmp1, sf, len, non_zero_found;
    int32_t (*is_tab)[16];
    int32_t *tab0, *tab1;
    int non_zero_found_short[3];

    /* intensity stereo */
    if (s->mode_ext & MODE_EXT_I_STEREO) {
        if (!s->lsf) {
            is_tab = is_table;
            sf_max = 7;
        } else {
            is_tab = is_table_lsf[g1->scalefac_compress & 1];
            sf_max = 16;
        }
            
        tab0 = g0->sb_hybrid + 576;
        tab1 = g1->sb_hybrid + 576;

        non_zero_found_short[0] = 0;
        non_zero_found_short[1] = 0;
        non_zero_found_short[2] = 0;
        k = (13 - g1->short_start) * 3 + g1->long_end - 3;
        for(i = 12;i >= g1->short_start;i--) {
            /* for last band, use previous scale factor */
            if (i != 11)
                k -= 3;
            len = band_size_short[s->sample_rate_index][i];
            for(l=2;l>=0;l--) {
                tab0 -= len;
                tab1 -= len;
                if (!non_zero_found_short[l]) {
                    /* test if non zero band. if so, stop doing i-stereo */
                    for(j=0;j<len;j++) {
                        if (tab1[j] != 0) {
                            non_zero_found_short[l] = 1;
                            goto found1;
                        }
                    }
                    sf = g1->scale_factors[k + l];
                    if (sf >= sf_max)
                        goto found1;

                    v1 = is_tab[0][sf];
                    v2 = is_tab[1][sf];
                    for(j=0;j<len;j++) {
                        tmp0 = tab0[j];
                        tab0[j] = MULL(tmp0, v1);
                        tab1[j] = MULL(tmp0, v2);
                    }
                } else {
                found1:
                    if (s->mode_ext & MODE_EXT_MS_STEREO) {
                        /* lower part of the spectrum : do ms stereo
                           if enabled */
                        for(j=0;j<len;j++) {
                            tmp0 = tab0[j];
                            tmp1 = tab1[j];
                            tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
                            tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
                        }
                    }
                }
            }
        }

        non_zero_found = non_zero_found_short[0] | 
            non_zero_found_short[1] | 
            non_zero_found_short[2];

        for(i = g1->long_end - 1;i >= 0;i--) {
            len = band_size_long[s->sample_rate_index][i];
            tab0 -= len;
            tab1 -= len;
            /* test if non zero band. if so, stop doing i-stereo */
            if (!non_zero_found) {
                for(j=0;j<len;j++) {
                    if (tab1[j] != 0) {
                        non_zero_found = 1;
                        goto found2;
                    }
                }
                /* for last band, use previous scale factor */
                k = (i == 21) ? 20 : i;
                sf = g1->scale_factors[k];
                if (sf >= sf_max)
                    goto found2;
                v1 = is_tab[0][sf];
                v2 = is_tab[1][sf];
                for(j=0;j<len;j++) {
                    tmp0 = tab0[j];
                    tab0[j] = MULL(tmp0, v1);
                    tab1[j] = MULL(tmp0, v2);
                }
            } else {
            found2:
                if (s->mode_ext & MODE_EXT_MS_STEREO) {
                    /* lower part of the spectrum : do ms stereo
                       if enabled */
                    for(j=0;j<len;j++) {
                        tmp0 = tab0[j];
                        tmp1 = tab1[j];
                        tab0[j] = MULL(tmp0 + tmp1, ISQRT2);
                        tab1[j] = MULL(tmp0 - tmp1, ISQRT2);
                    }
                }
            }
        }
    } else if (s->mode_ext & MODE_EXT_MS_STEREO) {
        /* ms stereo ONLY */
        /* NOTE: the 1/sqrt(2) normalization factor is included in the
           global gain */
        tab0 = g0->sb_hybrid;
        tab1 = g1->sb_hybrid;
        for(i=0;i<576;i++) {
            tmp0 = tab0[i];
            tmp1 = tab1[i];
            tab0[i] = tmp0 + tmp1;
            tab1[i] = tmp0 - tmp1;
        }
    }
}

static void compute_antialias_integer(MPADecodeContext *s,
                              GranuleDef *g)
{
    int32_t *ptr, *p0, *p1, *csa;
    int n, i, j;

    /* we antialias only "long" bands */
    if (g->block_type == 2) {
        if (!g->switch_point)
            return;
        /* XXX: check this for 8000Hz case */
        n = 1;
    } else {
        n = SBLIMIT - 1;
    }
    
    ptr = g->sb_hybrid + 18;
    for(i = n;i > 0;i--) {
        p0 = ptr - 1;
        p1 = ptr;
        csa = &csa_table[0][0];       
        for(j=0;j<4;j++) {
            int tmp0 = *p0;
            int tmp1 = *p1;
            int64_t tmp2= MUL64(tmp0 + tmp1, csa[0]);
            *p0 = FRAC_RND(tmp2 - MUL64(tmp1, csa[2]));
            *p1 = FRAC_RND(tmp2 + MUL64(tmp0, csa[3]));
            p0--; p1++;
            csa += 4;
            tmp0 = *p0;
            tmp1 = *p1;
            tmp2= MUL64(tmp0 + tmp1, csa[0]);
            *p0 = FRAC_RND(tmp2 - MUL64(tmp1, csa[2]));
            *p1 = FRAC_RND(tmp2 + MUL64(tmp0, csa[3]));
            p0--; p1++;
            csa += 4;
        }
        ptr += 18;       
    }
}

static long int lrintf(float x)
{
    return (int)(x);
}

static void compute_antialias_float(MPADecodeContext *s,
                              GranuleDef *g)
{
    int32_t *ptr, *p0, *p1;
    int n, i, j;

    /* we antialias only "long" bands */
    if (g->block_type == 2) {
        if (!g->switch_point)
            return;
        /* XXX: check this for 8000Hz case */
        n = 1;
    } else {
        n = SBLIMIT - 1;
    }
    
    ptr = g->sb_hybrid + 18;
    for(i = n;i > 0;i--) {
        float *csa = &csa_table_float[0][0];       
        p0 = ptr - 1;
        p1 = ptr;
        for(j=0;j<4;j++) {
            float tmp0 = *p0;
            float tmp1 = *p1;
            *p0 = lrintf(tmp0 * csa[0] - tmp1 * csa[1]);
            *p1 = lrintf(tmp0 * csa[1] + tmp1 * csa[0]);
            p0--; p1++;
            csa += 4;
            tmp0 = *p0;
            tmp1 = *p1;
            *p0 = lrintf(tmp0 * csa[0] - tmp1 * csa[1]);
            *p1 = lrintf(tmp0 * csa[1] + tmp1 * csa[0]);
            p0--; p1++;
            csa += 4;
        }
        ptr += 18;       
    }
}

static void compute_imdct(MPADecodeContext *s,
                          GranuleDef *g, 
                          int32_t *sb_samples,
                          int32_t *mdct_buf)
{
    int32_t *ptr, *win, *win1, *buf, *buf2, *out_ptr, *ptr1;
    int32_t in[6];
    int32_t out[36];
    int32_t out2[12];
    int i, j, k, mdct_long_end, v, sblimit;

    /* find last non zero block */
    ptr = g->sb_hybrid + 576;
    ptr1 = g->sb_hybrid + 2 * 18;
    while (ptr >= ptr1) {
        ptr -= 6;
        v = ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5];
        if (v != 0)
            break;
    }
    sblimit = ((ptr - g->sb_hybrid) / 18) + 1;

    if (g->block_type == 2) {
        /* XXX: check for 8000 Hz */
        if (g->switch_point)
            mdct_long_end = 2;
        else
            mdct_long_end = 0;
    } else {
        mdct_long_end = sblimit;
    }

    buf = mdct_buf;
    ptr = g->sb_hybrid;
    for(j=0;j<mdct_long_end;j++) {
        imdct36(out, ptr);
        /* apply window & overlap with previous buffer */
        out_ptr = sb_samples + j;
        /* select window */
        if (g->switch_point && j < 2)
            win1 = mdct_win[0];
        else
            win1 = mdct_win[g->block_type];
        /* select frequency inversion */
        win = win1 + ((4 * 36) & -(j & 1));
        for(i=0;i<18;i++) {
            *out_ptr = MULL(out[i], win[i]) + buf[i];
            buf[i] = MULL(out[i + 18], win[i + 18]);
            out_ptr += SBLIMIT;
        }
        ptr += 18;
        buf += 18;
    }
    for(j=mdct_long_end;j<sblimit;j++) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩极品在线观看| 菠萝蜜视频在线观看一区| 3atv一区二区三区| 一区二区三区影院| 中文字幕一区二区三区在线不卡| 欧美精品 日韩| 日韩精品最新网址| 欧美经典一区二区三区| 亚洲欧洲日韩综合一区二区| 一区二区三区日韩精品| 另类专区欧美蜜桃臀第一页| 国产成人在线看| 欧美自拍偷拍午夜视频| 91视频com| 91精品一区二区三区久久久久久 | 91久久久免费一区二区| 国产成人a级片| 色婷婷狠狠综合| 欧美一级一区二区| 国产精品网站在线播放| 午夜免费久久看| 在线精品视频小说1| 成人一级视频在线观看| 欧美四级电影网| 国产欧美一区二区在线| 亚洲视频一二三| 亚洲精品乱码久久久久久| √…a在线天堂一区| 成人午夜激情视频| 久久免费偷拍视频| 激情五月激情综合网| 欧美日韩高清影院| 亚洲成人激情av| 91福利在线看| 自拍偷拍欧美激情| aaa欧美大片| 国产精品网站在线| 久久国产婷婷国产香蕉| 大桥未久av一区二区三区中文| 国产一区二区美女| 91精品久久久久久蜜臀| 久久综合九色欧美综合狠狠| 国产精品午夜久久| 亚洲国产一区视频| 天天免费综合色| 91精品婷婷国产综合久久性色| 日韩女同互慰一区二区| 国产精品自拍网站| 国产一区二区精品久久| 制服.丝袜.亚洲.中文.综合| 亚洲素人一区二区| 在线观看日韩av先锋影音电影院| 中文字幕一区二区三区色视频| 成人黄色大片在线观看| 成人精品鲁一区一区二区| 无吗不卡中文字幕| 中文字幕一区二区三区精华液| 久久久一区二区三区| 欧美日高清视频| 一本一道久久a久久精品| 一区二区三区免费观看| 日韩精品一区二区三区在线播放 | 久久久久97国产精华液好用吗| 亚洲人成影院在线观看| 日韩午夜小视频| 在线免费不卡电影| 亚洲一区二区精品3399| 欧美一区二区观看视频| 免费视频最近日韩| 欧美变态tickle挠乳网站| 国产成人一区在线| 一区二区三区欧美| 精品99一区二区| 精品视频全国免费看| 国产成人精品网址| 亚洲欧美日韩久久| 久久人人爽爽爽人久久久| 91在线无精精品入口| 国产在线精品免费av| 夜夜嗨av一区二区三区网页| 精品国产伦一区二区三区观看体验| 国产乱理伦片在线观看夜一区| 亚洲一二三专区| 国产视频一区二区三区在线观看| 成人99免费视频| 福利一区福利二区| 国产一区二三区| 捆绑调教美女网站视频一区| 亚洲激情图片小说视频| 国产日韩亚洲欧美综合| 亚洲精品一区二区三区影院| 欧美日韩免费观看一区二区三区| 91免费版pro下载短视频| 99视频在线精品| 99精品视频在线观看| 麻豆91在线播放免费| 亚洲欧洲日产国码二区| 看电影不卡的网站| 亚洲国产aⅴ天堂久久| 国产日韩欧美高清| 欧美天堂亚洲电影院在线播放| 亚洲h在线观看| 亚洲黄色小说网站| 久久久久九九视频| 制服丝袜中文字幕亚洲| 国产一区二区免费在线| 88在线观看91蜜桃国自产| 日韩国产一二三区| 日韩一级精品视频在线观看| 国内精品自线一区二区三区视频| 中文字幕不卡一区| 色系网站成人免费| 欧美美女喷水视频| 欧美一级高清片在线观看| 在线视频一区二区三| 成人精品高清在线| 国产精品一区二区不卡| 亚洲成av人在线观看| 国内一区二区在线| 国产一区二区三区香蕉| 久88久久88久久久| 日韩专区欧美专区| 午夜在线成人av| 人禽交欧美网站| 成人av在线看| 69av一区二区三区| 国产日本亚洲高清| 热久久国产精品| 色激情天天射综合网| 国产精品视频在线看| 国产精品久久久99| 久久99精品久久久久久国产越南 | 久久网这里都是精品| 加勒比av一区二区| 国产精品国产精品国产专区不蜜| 欧美精品色一区二区三区| 成人ar影院免费观看视频| ㊣最新国产の精品bt伙计久久| 老司机一区二区| 精品美女在线观看| 粉嫩久久99精品久久久久久夜| 久久色中文字幕| 国产69精品久久99不卡| 久久国产精品区| 日韩av在线发布| 国产精品你懂的在线欣赏| 成人精品国产免费网站| 亚洲视频小说图片| 欧美性生活久久| 婷婷激情综合网| 亚洲综合一区二区三区| 亚洲va欧美va人人爽| 亚洲激情五月婷婷| 丝瓜av网站精品一区二区| 久久综合色鬼综合色| aaa欧美日韩| 日韩1区2区3区| 久久久激情视频| aaa国产一区| 裸体在线国模精品偷拍| 亚洲欧美在线视频观看| 欧美精品日日鲁夜夜添| 91免费观看在线| 视频精品一区二区| 亚洲国产中文字幕| 一区二区三区在线不卡| 中文字幕五月欧美| 国产欧美视频在线观看| 2021久久国产精品不只是精品| 久久夜色精品国产欧美乱极品| 午夜视频一区在线观看| 极品少妇xxxx精品少妇偷拍| 国产91精品露脸国语对白| 亚洲成av人片| 天天综合天天做天天综合| 亚洲线精品一区二区三区八戒| 国产精品网曝门| 国产精品美女www爽爽爽| 中文字幕精品—区二区四季| 国产精品色婷婷久久58| 国产精品伦理在线| 一级精品视频在线观看宜春院 | 亚洲一区二区三区美女| 亚洲一区二区在线视频| 中文字幕中文在线不卡住| 最新久久zyz资源站| 亚洲国产成人91porn| 精品一区二区av| 国产**成人网毛片九色| 91色视频在线| 91精品国产手机| 国产精品理论片在线观看| 亚洲精品欧美专区| 精品一区二区三区在线播放| 成人h精品动漫一区二区三区| 欧美性一区二区| 国产欧美视频在线观看| 日韩精品一二三| 92精品国产成人观看免费| 精品久久人人做人人爱|