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

📄 umc_vc1_enc_block_template.h

📁 audio-video-codecs.rar语音编解码器
💻 H
📖 第 1 页 / 共 3 页
字号:
//        for (Ipp32u nSubblock=0; nSubblock<4; nSubblock++)
//        {
//            const Ipp8u     *pTableDR    = pACTablesSet->pTableDR;
//            const Ipp8u     *pTableDL    = pACTablesSet->pTableDL;
//            const Ipp8u     *pTableInd   = pACTablesSet->pTableInd;
//            Ipp16s*          pSubBlock   = (Ipp16s*)((Ipp8u*)pBlock + blockStep*4*(nSubblock>>1))+ 4*(nSubblock&1);
//
//            if ((pattern & (1<<(3-nSubblock)))==0)
//                continue;
//
//            nPairs       = 0;
//            runs[0] = 0;
//            //prepare runs, levels arrays
//            for (i = 0; i<16; i++)
//            {
//                Ipp32s  pos    = pScanMatrix[i];
//                Ipp16s  value = *((Ipp16s*)((Ipp8u*)pSubBlock + blockStep*(pos>>2)) + (pos&0x03));
//                if (!value)
//                {
//                    runs[nPairs]++;
//                }
//                else
//                {
//                    levels[nPairs++] = value;
//                    runs[nPairs]   = 0;
//                }
//            }
//            // put codes into bitstream
//            i = 0;
//            for (Ipp32s not_last = 1; not_last>=0; not_last--)
//            {
//                for (; i < nPairs - not_last; i++)
//                {
//                    bool    sign = false;
//                    Ipp8u   run  = runs  [i];
//                    Ipp16s  lev  = levels[i];
//
//                    Ipp8u mode = GetMode( run, lev, pTableDR, pTableDL, sign);
//
//                    switch (mode)
//                    {
//                        case 3:
//                            err = pCodedBlock->PutBits(pEncTable[0], pEncTable[1]); //ESCAPE
//                            VC1_ENC_CHECK (err)
//                            err = pCodedBlock->PutBits(0,2);                       //mode
//                            VC1_ENC_CHECK (err)
//                            err = pCodedBlock->PutBits(!not_last,1);               //last
//                            VC1_ENC_CHECK (err)
//                            if ((!pACEscInfo->levelSize) && (!pACEscInfo->runSize))
//                            {
//                                pACEscInfo->runSize = 6;
//                                pACEscInfo->levelSize = (pACEscInfo->pLSizeTable[2*11 +1]==0)? 8:11;
//                                pACEscInfo->levelSize = (pACEscInfo->pLSizeTable[2*pACEscInfo->levelSize + 1]<=0) ?
//                                                                2 : pACEscInfo->levelSize;
//                                err = pCodedBlock->PutBits(pACEscInfo->pLSizeTable[2*pACEscInfo->levelSize],
//                                                        pACEscInfo->pLSizeTable[2*pACEscInfo->levelSize +1]);
//                                VC1_ENC_CHECK (err)
//                                err = pCodedBlock->PutBits(pACEscInfo->runSize - 3, 2);
//                                VC1_ENC_CHECK (err)
//                            }
//                            err = pCodedBlock->PutBits(run,pACEscInfo->runSize);
//                            VC1_ENC_CHECK (err)
//                            err = pCodedBlock->PutBits(sign, 1);
//                            VC1_ENC_CHECK (err)
//                            if (lev>((1<<pACEscInfo->levelSize)-1))
//                            {
//                                lev =(1<<pACEscInfo->levelSize)-1;
//                                levels[i] = lev;
//                            }
//                            err = pCodedBlock->PutBits(lev,pACEscInfo->levelSize);
//                            VC1_ENC_CHECK (err)
//                            break;
//                        case 2:
//                        case 1:
//                            err = pCodedBlock->PutBits(pEncTable[0], pEncTable[1]); //ESCAPE
//                            VC1_ENC_CHECK (err)
//                            err = pCodedBlock->PutBits(1,mode);                     //mode
//                            VC1_ENC_CHECK (err)
//                        case 0:
//                            Ipp16s index = pTableInd[run] + lev;
//                            err = pCodedBlock->PutBits(pEncTable[2*index], pEncTable[2*index + 1]);
//                            VC1_ENC_CHECK (err)
//                            err = pCodedBlock->PutBits(sign, 1);
//                            VC1_ENC_CHECK (err)
//                            break;
//
//                    }
//                }
//
//                pTableDR    = pACTablesSet->pTableDRLast;
//                pTableDL    = pACTablesSet->pTableDLLast;
//                pTableInd   = pACTablesSet->pTableIndLast;
//
//            }
//        }
//        return UMC::UMC_OK;
//   }
//
//
   template <class T>
   UMC::Status   WriteDCQuantOther (Ipp16s                  DC,
                                    const Ipp32u*           pEncTable,
                                    T*                      pCodedBlock)
   {
        bool            sign        = (DC<0)? 1:0;
        UMC::Status     err         = UMC::UMC_OK;

        DC         = (sign)? -DC : DC;
        if (!DC )
        {
            err = pCodedBlock->PutBits(pEncTable[2*DC],pEncTable[2*DC+1]);
            VC1_ENC_CHECK (err)
        }
        else if (DC < VC1_ENC_DC_ESCAPE_INDEX)
        {
            err = pCodedBlock->PutBits(pEncTable[2*DC],pEncTable[2*DC+1]);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(sign,1);
            VC1_ENC_CHECK (err)
        }
        else
        {
            err = pCodedBlock->PutBits(pEncTable[2*VC1_ENC_DC_ESCAPE_INDEX],pEncTable[2*VC1_ENC_DC_ESCAPE_INDEX+1]);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(DC, 8);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(sign,1);
            VC1_ENC_CHECK (err)
        }
        return UMC::UMC_OK;
   }

   template <class T>
   UMC::Status       WriteDCQuant1     (Ipp16s                  DC,
                                        const Ipp32u*           pEncTable,
                                        T*                      pCodedBlock)
   {
        bool    sign       = (DC<0)? 1:0;

        Ipp16s      DC1        = 0;
        Ipp16s      DC2        = 0;
        UMC::Status err        = UMC::UMC_OK;

        DC = (sign)? -DC : DC;

        DC1 = (DC+3)>>2;
        DC2 = (DC+3)&3 ;

        if (!DC)
        {
            err = pCodedBlock->PutBits(pEncTable[2*DC],pEncTable[2*DC+1]);
            VC1_ENC_CHECK (err)
        }
        else if (DC1 < VC1_ENC_DC_ESCAPE_INDEX)
        {
            err = pCodedBlock->PutBits(pEncTable[2*DC1],pEncTable[2*DC1+1]);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(DC2,2);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(sign,1);
            VC1_ENC_CHECK (err)
        }
        else
        {
            err = pCodedBlock->PutBits(pEncTable[2*VC1_ENC_DC_ESCAPE_INDEX],pEncTable[2*VC1_ENC_DC_ESCAPE_INDEX+1]);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(DC, 10);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(sign,1);
            VC1_ENC_CHECK (err)
        }
        return err;
   }
   template <class T>  inline
   UMC::Status        WriteDCQuant2     (Ipp16s                  DC,
                                         const Ipp32u*           pEncTable,
                                         T*                      pCodedBlock)
   {
        bool        sign       = (DC<0)? 1:0;
        Ipp16s      DC1        = 0;
        Ipp16s      DC2        = 0;
        UMC::Status err        = UMC::UMC_OK;

        DC         = (sign)? -DC : DC;

        DC1 = (DC+1)>>1;
        DC2 = (DC+1)&1 ;

        if (!DC)
        {
            err = pCodedBlock->PutBits(pEncTable[2*DC],pEncTable[2*DC+1]);
            VC1_ENC_CHECK (err)
        }
        else if (DC1 < VC1_ENC_DC_ESCAPE_INDEX)
        {
            err = pCodedBlock->PutBits(pEncTable[2*DC1],pEncTable[2*DC1+1]);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(DC2,1);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(sign,1);
            VC1_ENC_CHECK (err)

        }
        else
        {
            err = pCodedBlock->PutBits(pEncTable[2*VC1_ENC_DC_ESCAPE_INDEX],pEncTable[2*VC1_ENC_DC_ESCAPE_INDEX+1]);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(DC, 9);
            VC1_ENC_CHECK (err)
            err = pCodedBlock->PutBits(sign,1);
            VC1_ENC_CHECK (err)
        }
        return UMC::UMC_OK;
   }





     /*
   template <class T>  inline
   UMC::Status         VC1EncoderBlock::WriteBlockDC      (  Ipp8u                   Quant,
                                                                                const Ipp32u*           pEncTable,
                                                                                T*                      pCodedBlock)
   {
       switch (Quant)
       {
       case 1:
            return WriteDCQuant1     (pEncTable,pCodedBlock);
       case 2:
            return WriteDCQuant2     (pEncTable,pCodedBlock);
       default:
            return WriteDCQuantOther (pEncTable,pCodedBlock);
       }
   }
*/
};
#endif
#endif // defined (UMC_ENABLE_VC1_VIDEO_ENCODER)

⌨️ 快捷键说明

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