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

📄 rvlc.c

📁 自己移植的linux下的流媒体播放器原代码,支持mms协议,支持ftp和http协议.
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifdef PRINT_RVLC    printf("\nrev_global_gain: %d\n", ics->rev_global_gain);#endif    if (intensity_used)    {        is_position = rvlc_huffman_sf(ld_sf, ld_esc, -1);#ifdef PRINT_RVLC        printf("is_position: %d\n", is_position);#endif    }    for (g = ics->num_window_groups-1; g >= 0; g--)    {        for (sfb = ics->max_sfb-1; sfb >= 0; sfb--)        {            if (error)            {                ics->scale_factors[g][sfb] = 0;            } else {                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:                    if (is_pcm_flag)                    {                        is_pcm_flag = 0;                        ics->scale_factors[g][sfb] = is_position;                    } else {                        t = rvlc_huffman_sf(ld_sf, ld_esc, -1);                        is_position -= t;                        ics->scale_factors[g][sfb] = (uint8_t)is_position;                    }                    break;                case NOISE_HCB: /* noise books */                    /* decode noise energy */                    if (noise_pcm_flag)                    {                        noise_pcm_flag = 0;                        noise_energy = ics->dpcm_noise_last_position;                    } else {                        t = rvlc_huffman_sf(ld_sf, ld_esc, -1);                        noise_energy -= t;                    }                    ics->scale_factors[g][sfb] = (uint8_t)noise_energy;                    break;                default: /* spectral books */                    if (sf_pcm_flag || (sfb == 0))                    {                        sf_pcm_flag = 0;                        if (sfb == 0)                            scale_factor = ics->global_gain;                    } else {                        /* decode scale factor */                        t = rvlc_huffman_sf(ld_sf, ld_esc, -1);                        scale_factor -= t;                    }                    if (scale_factor < 0)                        return 4;                    ics->scale_factors[g][sfb] = (uint8_t)scale_factor;                    break;                }#ifdef PRINT_RVLC                printf("%3d:%4d%4d\n", sfb, ics->sfb_cb[g][sfb],                    ics->scale_factors[g][sfb]);#endif                if (t == 99)                {                    error = 1;                }            }        }    }#ifdef PRINT_RVLC    printf("\n\n");#endif    return 0;}#endif/* index == 99 means not allowed codeword */static rvlc_huff_table book_rvlc[] = {    /*index  length  codeword */    {  0, 1,   0 }, /*         0 */    { -1, 3,   5 }, /*       101 */    {  1, 3,   7 }, /*       111 */    { -2, 4,   9 }, /*      1001 */    { -3, 5,  17 }, /*     10001 */    {  2, 5,  27 }, /*     11011 */    { -4, 6,  33 }, /*    100001 */    { 99, 6,  50 }, /*    110010 */    {  3, 6,  51 }, /*    110011 */    { 99, 6,  52 }, /*    110100 */    { -7, 7,  65 }, /*   1000001 */    { 99, 7,  96 }, /*   1100000 */    { 99, 7,  98 }, /*   1100010 */    {  7, 7,  99 }, /*   1100011 */    {  4, 7, 107 }, /*   1101011 */    { -5, 8, 129 }, /*  10000001 */    { 99, 8, 194 }, /*  11000010 */    {  5, 8, 195 }, /*  11000011 */    { 99, 8, 212 }, /*  11010100 */    { 99, 9, 256 }, /* 100000000 */    { -6, 9, 257 }, /* 100000001 */    { 99, 9, 426 }, /* 110101010 */    {  6, 9, 427 }, /* 110101011 */    { 99, 10,  0 } /* Shouldn't come this far */};static rvlc_huff_table book_escape[] = {    /*index  length  codeword */    { 1, 2, 0 },    { 0, 2, 2 },    { 3, 3, 2 },    { 2, 3, 6 },    { 4, 4, 14 },    { 7, 5, 13 },    { 6, 5, 15 },    { 5, 5, 31 },    { 11, 6, 24 },    { 10, 6, 25 },    { 9, 6, 29 },    { 8, 6, 61 },    { 13, 7, 56  },    { 12, 7, 120 },    { 15, 8, 114 },    { 14, 8, 242 },    { 17, 9, 230 },    { 16, 9, 486 },    { 19, 10, 463  },    { 18, 10, 974  },    { 22, 11, 925  },    { 20, 11, 1950 },    { 21, 11, 1951 },    { 23, 12, 1848 },    { 25, 13, 3698 },    { 24, 14, 7399 },    { 26, 15, 14797 },    { 49, 19, 236736 },    { 50, 19, 236737 },    { 51, 19, 236738 },    { 52, 19, 236739 },    { 53, 19, 236740 },    { 27, 20, 473482 },    { 28, 20, 473483 },    { 29, 20, 473484 },    { 30, 20, 473485 },    { 31, 20, 473486 },    { 32, 20, 473487 },    { 33, 20, 473488 },    { 34, 20, 473489 },    { 35, 20, 473490 },    { 36, 20, 473491 },    { 37, 20, 473492 },    { 38, 20, 473493 },    { 39, 20, 473494 },    { 40, 20, 473495 },    { 41, 20, 473496 },    { 42, 20, 473497 },    { 43, 20, 473498 },    { 44, 20, 473499 },    { 45, 20, 473500 },    { 46, 20, 473501 },    { 47, 20, 473502 },    { 48, 20, 473503 },    { 99, 21,  0 } /* Shouldn't come this far */};static int8_t rvlc_huffman_sf(bitfile *ld_sf, bitfile *ld_esc,                              int8_t direction){    uint8_t i, j;    int8_t index;    uint32_t cw;    rvlc_huff_table *h = book_rvlc;        i = h->len;    if (direction > 0)        cw = faad_getbits(ld_sf, i DEBUGVAR(1,0,""));    else        cw = faad_getbits_rev(ld_sf, i DEBUGVAR(1,0,""));    while ((cw != h->cw)        && (i < 10))    {        h++;        j = h->len-i;        i += j;        cw <<= j;        if (direction > 0)            cw |= faad_getbits(ld_sf, j DEBUGVAR(1,0,""));        else            cw |= faad_getbits_rev(ld_sf, j DEBUGVAR(1,0,""));    }    index = h->index;    if (index == +ESC_VAL)    {        int8_t esc = rvlc_huffman_esc(ld_esc, direction);        if (esc == 99)            return 99;        index += esc;#ifdef PRINT_RVLC        printf("esc: %d - ", esc);#endif    }    if (index == -ESC_VAL)    {        int8_t esc = rvlc_huffman_esc(ld_esc, direction);        if (esc == 99)            return 99;        index -= esc;#ifdef PRINT_RVLC        printf("esc: %d - ", esc);#endif    }    return index;}static int8_t rvlc_huffman_esc(bitfile *ld,                               int8_t direction){    uint8_t i, j;    uint32_t cw;    rvlc_huff_table *h = book_escape;    i = h->len;    if (direction > 0)        cw = faad_getbits(ld, i DEBUGVAR(1,0,""));    else        cw = faad_getbits_rev(ld, i DEBUGVAR(1,0,""));    while ((cw != h->cw)        && (i < 21))    {        h++;        j = h->len-i;        i += j;        cw <<= j;        if (direction > 0)            cw |= faad_getbits(ld, j DEBUGVAR(1,0,""));        else            cw |= faad_getbits_rev(ld, j DEBUGVAR(1,0,""));    }    return h->index;}#endif

⌨️ 快捷键说明

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