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

📄 mpc_decoder.c

📁 tcpmp.src.0.72RC1 优秀的多媒体播放器TCPMP的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
                    L[0] = L[2] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    L[1] = L[0] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    L[2] = L[1];                    break;                case 2:                    L[0] = L[2] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    L[1] = L[0];                    L[2] = L[1] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    break;                case 0:                    L[0] = L[2] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    L[1] = L[0] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    L[2] = L[1] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    break;                default:                    return;                    break;                }            }            /************ SCF ************/            else            {                switch (d->SCFI_L[n])                {                case 3:                    L[0] = mpc_decoder_bitstream_read(d,  6);                    L[1] = L[0];                    L[2] = L[1];                    break;                case 1:                    L[0] = mpc_decoder_bitstream_read(d,  6);                    L[1] = mpc_decoder_bitstream_read(d,  6);                    L[2] = L[1];                    break;                case 2:                    L[0] = mpc_decoder_bitstream_read(d,  6);                    L[1] = L[0];                    L[2] = mpc_decoder_bitstream_read(d,  6);                    break;                case 0:                    L[0] = mpc_decoder_bitstream_read(d,  6);                    L[1] = mpc_decoder_bitstream_read(d,  6);                    L[2] = mpc_decoder_bitstream_read(d,  6);                    break;                default:                    return;                    break;                }            }            // update Reference for DSCF            d->DSCF_Reference_L[n] = L[2];        }        if (*ResR)        {            R[2] = d->DSCF_Reference_R[n];            /*********** DSCF ************/            if (d->DSCF_Flag_R[n]==1)            {                switch (d->SCFI_R[n])                {                case 3:                    R[0] = R[2] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    R[1] = R[0];                    R[2] = R[1];                    break;                case 1:                    R[0] = R[2] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    R[1] = R[0] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    R[2] = R[1];                    break;                case 2:                    R[0] = R[2] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    R[1] = R[0];                    R[2] = R[1] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    break;                case 0:                    R[0] = R[2] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    R[1] = R[0] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    R[2] = R[1] + mpc_decoder_huffman_decode_fast(d,  d->DSCF_Entropie);                    break;                default:                    return;                    break;                }            }            /************ SCF ************/            else            {                switch (d->SCFI_R[n])                {                case 3:                    R[0] = mpc_decoder_bitstream_read(d, 6);                    R[1] = R[0];                    R[2] = R[1];                    break;                case 1:                    R[0] = mpc_decoder_bitstream_read(d, 6);                    R[1] = mpc_decoder_bitstream_read(d, 6);                    R[2] = R[1];                    break;                case 2:                    R[0] = mpc_decoder_bitstream_read(d, 6);                    R[1] = R[0];                    R[2] = mpc_decoder_bitstream_read(d, 6);                    break;                case 0:                    R[0] = mpc_decoder_bitstream_read(d, 6);                    R[1] = mpc_decoder_bitstream_read(d, 6);                    R[2] = mpc_decoder_bitstream_read(d, 6);                    break;                default:                    return;                    break;                }            }            // update Reference for DSCF            d->DSCF_Reference_R[n] = R[2];        }    }    /**************************** Samples ****************************/    ResL = d->Res_L;    ResR = d->Res_R;    for (n=0; n <= Max_used_Band; ++n, ++ResL, ++ResR)    {        // setting pointers        x1 = d->SampleHuff[*ResL];        x2 = d->SampleHuff[*ResR];        L = d->Q[n].L;        R = d->Q[n].R;        if (x1!=NULL || x2!=NULL)            for (k=0; k<36; ++k)            {                if (x1 != NULL) *L++ = mpc_decoder_huffman_decode_fast(d,  x1);                if (x2 != NULL) *R++ = mpc_decoder_huffman_decode_fast(d,  x2);            }        if (*ResL>7 || *ResR>7)            for (k=0; k<36; ++k)            {                if (*ResL>7) *L++ = (mpc_int32_t)mpc_decoder_bitstream_read(d,  Res_bit[*ResL]) - Dc[*ResL];                if (*ResR>7) *R++ = (mpc_int32_t)mpc_decoder_bitstream_read(d,  Res_bit[*ResR]) - Dc[*ResR];            }    }}/****************************************** SV 7 ******************************************/voidmpc_decoder_read_bitstream_sv7(mpc_decoder *d) {    // these arrays hold decoding results for bundled quantizers (3- and 5-step)    static const mpc_int32_t idx30[] = { -1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1,-1, 0, 1};    static const mpc_int32_t idx31[] = { -1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1, 0, 0, 0, 1, 1, 1,-1,-1,-1, 0, 0, 0, 1, 1, 1};    static const mpc_int32_t idx32[] = { -1,-1,-1,-1,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1};    static const mpc_int32_t idx50[] = { -2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2,-2,-1, 0, 1, 2};    static const mpc_int32_t idx51[] = { -2,-2,-2,-2,-2,-1,-1,-1,-1,-1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2};    mpc_int32_t n,k;    mpc_int32_t Max_used_Band=0;    const HuffmanTyp *Table;    mpc_int32_t idx;    mpc_int32_t *L   ,*R;    mpc_int32_t *ResL,*ResR;    mpc_uint32_t tmp;    /***************************** Header *****************************/    ResL  = d->Res_L;    ResR  = d->Res_R;    // first subband    *ResL = mpc_decoder_bitstream_read(d, 4);    *ResR = mpc_decoder_bitstream_read(d, 4);    if (d->MS_used && !(*ResL==0 && *ResR==0)) {        d->MS_Flag[0] = mpc_decoder_bitstream_read(d, 1);    }    // consecutive subbands    ++ResL; ++ResR; // increase pointers    for (n=1; n <= d->Max_Band; ++n, ++ResL, ++ResR)    {        idx   = mpc_decoder_huffman_decode_fast(d, d->HuffHdr);        *ResL = (idx!=4) ? *(ResL-1) + idx : mpc_decoder_bitstream_read(d, 4);        idx   = mpc_decoder_huffman_decode_fast(d, d->HuffHdr);        *ResR = (idx!=4) ? *(ResR-1) + idx : mpc_decoder_bitstream_read(d, 4);        if (d->MS_used && !(*ResL==0 && *ResR==0)) {            d->MS_Flag[n] = mpc_decoder_bitstream_read(d, 1);        }        // only perform following procedures up to the maximum non-zero subband        if (*ResL!=0 || *ResR!=0) {            Max_used_Band = n;        }    }    /****************************** SCFI ******************************/    L     = d->SCFI_L;    R     = d->SCFI_R;    ResL  = d->Res_L;    ResR  = d->Res_R;    for (n=0; n <= Max_used_Band; ++n, ++L, ++R, ++ResL, ++ResR) {        if (*ResL) *L = mpc_decoder_huffman_decode_faster(d, d->HuffSCFI);        if (*ResR) *R = mpc_decoder_huffman_decode_faster(d, d->HuffSCFI);    }    /**************************** SCF/DSCF ****************************/    ResL  = d->Res_L;    ResR  = d->Res_R;    L     = d->SCF_Index_L[0];    R     = d->SCF_Index_R[0];    for (n=0; n<=Max_used_Band; ++n, ++ResL, ++ResR, L+=3, R+=3) {        if (*ResL)        {            L[2] = d->DSCF_Reference_L[n];            switch (d->SCFI_L[n])            {            case 1:                idx  = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);                L[0] = (idx!=8) ? L[2] + idx : mpc_decoder_bitstream_read(d, 6);                idx  = mpc_decoder_huffman_decode_fast(d, d->HuffDSCF);                L[1] = (idx!=8) ? L[0] + idx : mpc_decoder_bitstream_read(d, 6);                L[2] = L[1];                break;            case 3:                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                L[0] = (idx!=8) ? L[2] + idx : mpc_decoder_bitstream_read(d, 6);                L[1] = L[0];                L[2] = L[1];                break;            case 2:                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                L[0] = (idx!=8) ? L[2] + idx : mpc_decoder_bitstream_read(d, 6);                L[1] = L[0];                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                L[2] = (idx!=8) ? L[1] + idx : mpc_decoder_bitstream_read(d, 6);                break;            case 0:                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                L[0] = (idx!=8) ? L[2] + idx : mpc_decoder_bitstream_read(d, 6);                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                L[1] = (idx!=8) ? L[0] + idx : mpc_decoder_bitstream_read(d, 6);                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                L[2] = (idx!=8) ? L[1] + idx : mpc_decoder_bitstream_read(d, 6);                break;            default:                return;                break;            }            // update Reference for DSCF            d->DSCF_Reference_L[n] = L[2];        }        if (*ResR)        {            R[2] = d->DSCF_Reference_R[n];            switch (d->SCFI_R[n])            {            case 1:                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                R[0] = (idx!=8) ? R[2] + idx : mpc_decoder_bitstream_read(d, 6);                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                R[1] = (idx!=8) ? R[0] + idx : mpc_decoder_bitstream_read(d, 6);                R[2] = R[1];                break;            case 3:                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                R[0] = (idx!=8) ? R[2] + idx : mpc_decoder_bitstream_read(d, 6);                R[1] = R[0];                R[2] = R[1];                break;            case 2:                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                R[0] = (idx!=8) ? R[2] + idx : mpc_decoder_bitstream_read(d, 6);                R[1] = R[0];                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                R[2] = (idx!=8) ? R[1] + idx : mpc_decoder_bitstream_read(d, 6);                break;            case 0:                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                R[0] = (idx!=8) ? R[2] + idx : mpc_decoder_bitstream_read(d, 6);                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                R[1] = (idx!=8) ? R[0] + idx : mpc_decoder_bitstream_read(d, 6);                idx  = mpc_decoder_huffman_decode_fast(d,  d->HuffDSCF);                R[2] = (idx!=8) ? R[1] + idx : mpc_decoder_bitstream_read(d, 6);                break;            default:                return;                break;            }            // update Reference for DSCF            d->DSCF_Reference_R[n] = R[2];        }    }    /***************************** Samples ****************************/    ResL = d->Res_L;    ResR = d->Res_R;    L    = d->Q[0].L;    R    = d->Q[0].R;    for (n=0; n <= Max_used_Band; ++n, ++ResL, ++ResR, L+=36, R+=36)    {        /************** links **************/        switch (*ResL)        {        case  -2: case  -3: case  -4: case  -5: case  -6: case  -7: case  -8: case  -9:        case -10: case -11: case -12: case -13: case -14: case -15: case -16: case -17:            L += 36;            break;        case -1:            for (k=0; k<36; k++ ) {                tmp  = random_int(d);                *L++ = ((tmp >> 24) & 0xFF) + ((tmp >> 16) & 0xFF) + ((tmp >>  8) & 0xFF) + ((tmp >>  0) & 0xFF) - 510;            }            break;        case 0:            L += 36;// increase pointer            break;        case 1:            Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][1];            for (k=0; k<12; ++k)            {                idx = mpc_decoder_huffman_decode_fast(d,  Table);                *L++ = idx30[idx];                *L++ = idx31[idx];                *L++ = idx32[idx];            }            break;        case 2:            Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][2];            for (k=0; k<18; ++k)            {                idx = mpc_decoder_huffman_decode_fast(d,  Table);                *L++ = idx50[idx];                *L++ = idx51[idx];            }            break;        case 3:        case 4:            Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL];            for (k=0; k<36; ++k)                *L++ = mpc_decoder_huffman_decode_faster(d, Table);            break;        case 5:            Table = d->HuffQ[mpc_decoder_bitstream_read(d, 1)][*ResL];

⌨️ 快捷键说明

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