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

📄 uvlcreader.h

📁 jsvm开发代码包括抽样,编码,抽取,解码等一系列功能,可以做工具或研究用
💻 H
📖 第 1 页 / 共 2 页
字号:
                                     B8x8Idx         c8x8Idx,
                                     UInt            uiScanIndex,
                                     Bool&           rbLast,
                                     UInt&           ruiNumCoefRead );
  ErrVal  RQdecodeTCoeffRef_8x8    ( MbDataAccess&   rcMbDataAccess,
                                     MbDataAccess&   rcMbDataAccessBase,
                                     B8x8Idx         c8x8Idx,
                                     UInt            uiScanIndex,
                                     UInt            uiCtx );
  ErrVal  RQdecodeNewTCoeff_Luma   ( MbDataAccess&   rcMbDataAccess,
                                     MbDataAccess&   rcMbDataAccessBase,
                                     ResidualMode    eResidualMode,
                                     Bool            b8x8,
                                     LumaIdx         cIdx,
                                     UInt            uiScanIndex,
                                     Bool&           rbLast,
                                     UInt&           ruiNumCoefRead );
  ErrVal  RQdecodeTCoeffRef_Luma   ( MbDataAccess&   rcMbDataAccess,
                                     MbDataAccess&   rcMbDataAccessBase,
                                     LumaIdx         cIdx,
                                     UInt            uiScanIndex,
                                     UInt            uiCtx );
  ErrVal  RQdecodeNewTCoeff_Chroma ( MbDataAccess&   rcMbDataAccess,
                                     MbDataAccess&   rcMbDataAccessBase,
                                     ResidualMode    eResidualMode,
                                     ChromaIdx       cIdx,
                                     UInt            uiScanIndex,
                                     Bool&           rbLast,
                                     UInt&           ruiNumCoefRead );
  ErrVal  RQdecodeTCoeffRef_Chroma ( MbDataAccess&   rcMbDataAccess,
                                     MbDataAccess&   rcMbDataAccessBase,
                                     ResidualMode    eResidualMode,
                                     ChromaIdx       cIdx,
                                     UInt            uiScanIndex,
                                     UInt            uiCtx );
  ErrVal  RQdecodeBCBP_4x4     ( MbDataAccess&   rcMbDataAccess,
                                 MbDataAccess&   rcMbDataAccessBase,
                                 Bool            b8x8,
                                 LumaIdx         cIdx,
                                 UInt&           ruiSymbol );
  ErrVal  RQdecodeBCBP_ChromaDC( MbDataAccess&   rcMbDataAccess,
                                 MbDataAccess&   rcMbDataAccessBase,
                                 ChromaIdx       cIdx,
                                 UInt&           ruiSymbol );
  ErrVal  RQdecodeBCBP_ChromaAC( MbDataAccess&   rcMbDataAccess,
                                 MbDataAccess&   rcMbDataAccessBase,
                                 ChromaIdx       cIdx,
                                 UInt&           ruiSymbol );
  ErrVal  RQdecodeCBP_Chroma   ( MbDataAccess&   rcMbDataAccess,
                                 MbDataAccess&   rcMbDataAccessBase,
                                 UInt&           ruiSymbol );
  ErrVal  RQdecodeCBP_ChromaAC ( MbDataAccess&   rcMbDataAccess,
                                 MbDataAccess&   rcMbDataAccessBase,
                                 UInt&           ruiSymbol );
  ErrVal  RQdecodeCBP_8x8      ( MbDataAccess&   rcMbDataAccess,
                                 MbDataAccess&   rcMbDataAccessBase,
                                 B8x8Idx         c8x8Idx );

  ErrVal  RQdecodeEobOffsets_Luma  ();
  ErrVal  RQdecodeEobOffsets_Chroma();
  ErrVal  RQdecodeBestCodeTableMap ( UInt            uiMaxH );
  ErrVal  RQupdateVlcTable         ();
  ErrVal  RQvlcFlush               ();
  ErrVal  RQcompSepAlign           ();
  Bool    RQpeekCbp4x4( MbDataAccess&  rcMbDataAccessBase, LumaIdx cIdx);

  Void    RQsetTruncatedFlag       ( Bool bTruncated )  { m_bTruncated = bTruncated;  }
  ErrVal  RQreset                  ( const SliceHeader& rcSliceHeader );
  ErrVal  RQdecodeTCoeffsRef       ( TCoeff*         piCoeff,
                                     TCoeff*         piCoeffBase,
                                     const UChar*    pucScan,
                                     UInt            uiScanIndex,
                                     UInt            uiCtx );
  ErrVal  RQupdateVlcTable         ( UInt            uiNumFrags );
  ErrVal  RQdecodeSigCoeff         ( TCoeff*         piCoeff,
                                     TCoeff*         piCoeffBase,
                                     ResidualMode    eResidualMode,
                                     const UChar*    pucScan,
                                     Bool            bFirstSigRunCode,
                                     UInt            uiCycle,
                                     UInt            uiStartScanIdx,
                                     UInt            uiLastScanIdx,
                                     Bool&           rbEndOfBlock,
                                     TCoeff&         riCoeff,
                                     UInt&           ruiRun );

  ErrVal  RQinitFragments          ( const SliceHeader&  rcSliceHeader,
                                     UInt&               uiNumFrags,
                                     Bool                bCAF );
  ErrVal  RQreleaseFragments       ();

  MbSymbolReadIf* RQactivateFragment( UInt uiFragIdx )
  {
    if( uiFragIdx < m_uiNumFragments ) {
      m_uiCurrentFragment = uiFragIdx;
      if( uiFragIdx == 0 )
        return this;
      else
        return m_apcFragmentReaders[uiFragIdx];
    }
    else
      return 0;
  }

  ErrVal  xInitFragments           ( const SliceHeader&  rcSliceHeader,
                                     UChar**             ppucFragBuffers, 
                                     UInt*               puiFragLengthInBits,
                                     UInt                 uiNumFragments );
  Void    xSetParentFlag           ( Bool          bParentFlag )
  {
    m_bParentFlag = bParentFlag;
  }

private:
  ErrVal xGetFlag     ( UInt& ruiCode );
  ErrVal xGetCode     ( UInt& ruiCode, UInt uiLength );
  ErrVal xGetUvlcCode ( UInt& ruiVal  );
  ErrVal xGetSvlcCode ( Int&  riVal   );
  ErrVal xGetRefFrame ( Bool bWriteBit, UInt& uiRefFrame, ListIdx eLstIdx );
  ErrVal xGetMotionPredFlag( Bool& rbFlag );
  ErrVal xGetMvd      ( Mv& cMv );
  ErrVal xPredictNonZeroCnt( MbDataAccess& rcMbDataAccess, LumaIdx cIdx, UInt& uiCoeffCount, UInt& uiTrailingOnes );
  ErrVal xPredictNonZeroCnt( MbDataAccess& rcMbDataAccess, ChromaIdx cIdx, UInt& uiCoeffCount, UInt& uiTrailingOnes );
  ErrVal xGetTrailingOnes16( UInt uiLastCoeffCount, UInt& uiCoeffCount, UInt& uiTrailingOnes );
  ErrVal xCodeFromBitstream2D( const UChar* aucCode, const UChar* aucLen, UInt uiWidth, UInt uiHeight, UInt& uiVal1, UInt& uiVal2 );
  ErrVal xCodeFromBitstream2Di( const UInt* auiCode, const UInt* auiLen, UInt uiWidth, UInt uiHeight, UInt& uiVal1, UInt& uiVal2 );
  ErrVal xGetRunLevel( Int* aiLevelRun, UInt uiCoeffCnt, UInt uiTrailingOnes, UInt uiMaxCoeffs, UInt& uiTotalRun );
  ErrVal xGetLevelVLC0( Int& iLevel );
  ErrVal xGetLevelVLCN( Int& iLevel, UInt uiVlcLength );
  ErrVal xGetRun( UInt uiVlcPos, UInt& uiRun  );
  ErrVal xGetTotalRun16( UInt uiVlcPos, UInt& uiTotalRun );
  ErrVal xGetTotalRun4( UInt& uiVlcPos, UInt& uiTotalRun );
  ErrVal xGetTrailingOnes4( UInt& uiCoeffCount, UInt& uiTrailingOnes );
  ErrVal xRQdecodeEobOffsets       ( UInt* pauiShift, UInt            uiLen );
  ErrVal xGetGolomb(UInt& uiSymbol, UInt uiK);
  ErrVal xGetSigRunCode( UInt& uiSymbol, UInt uiTableIdx );
  ErrVal xGetUnaryCode( UInt& uiSymbol );
  ErrVal xGetCodeCB1( UInt& uiSymbol );
  ErrVal xGetCodeCB2( UInt& uiSymbol );
  ErrVal xGetSigRunTabCode(UInt& uiTab);
  ErrVal  xDecodeMonSeq           ( UInt*           auiSeq,
                                    UInt uiStart,
                                     UInt            uiLen );
  ErrVal xRQdecodeSigMagGreater1( TCoeff* piCoeff,
                                     TCoeff* piCoeffBase,
                                     const UChar* pucScan,
                                     UInt    uiTermSym,
                                     UInt    uiStart,
                                     UInt    uiStop,
                                     UInt    uiStride = 1 );

protected:
  BitReadBuffer*  m_pcBitReadBuffer;
  UInt            m_uiBitCounter;
  UInt            m_uiPosCounter;
  Bool            m_bRunLengthCoding;
  UInt            m_uiRun;
  UInt m_uiCbpStats[3][2];
  UInt m_uiCbp8x8;
  UInt m_uiCbpStat4x4[2];
  UInt m_uiCurrCbp4x4;
  UcSymGrpReader* m_pSymGrp; 

  Bool m_bTruncated;

  // new variables for switching bitstream inputs
  Bool            m_bParentFlag;
  UvlcReader*     m_apcFragmentReaders[MAX_NUM_PD_FRAGMENTS];
  BitReadBuffer*  m_apcFragBitBuffers [MAX_NUM_PD_FRAGMENTS];
  UcSymGrpReader* m_apcFragSymGrps    [MAX_NUM_PD_FRAGMENTS];
  UInt            m_uiNumFragments;
  UInt            m_uiCurrentFragment;

  static UInt     m_auiShiftLuma[16];
  static UInt     m_auiShiftChroma[16];
  static UInt     m_auiBestCodeTab[16];
};


class UcSymGrpReader
{
public:
  UcSymGrpReader( UvlcReader* pParent );
  ErrVal Init();
  ErrVal Flush();
  ErrVal xFetchSymbol( UvlcReader* pcUvlcReader, UInt uiBaseSign, TCoeff* piCoeffPtr, Char* pcTraceString );

  Bool   UpdateVlc();
  UInt   GetCode()    { return m_uiCode;   }
  Void   setCodedFlag(UInt uiFlag)    { m_uiCodedFlag = uiFlag; }

protected:
  UInt m_auiSymCount[3];
  UInt m_uiTable;
  UInt m_uiCodedFlag;
  UInt m_uiCode;
  UInt m_uiLen;
  UInt m_auiSymbolBuf[CAVLC_SYMGRP_SIZE];
};

H264AVC_NAMESPACE_END

#endif // !defined(AFX_UVLCREADER_H__EA98D347_89D5_4D2D_B6D5_FB3A374CD295__INCLUDED_)

⌨️ 快捷键说明

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