libbpg-0.9.3
This commit is contained in:
commit
b21307932d
266 changed files with 108670 additions and 0 deletions
221
jctvc/TLibEncoder/TEncSbac.h
Normal file
221
jctvc/TLibEncoder/TEncSbac.h
Normal file
|
@ -0,0 +1,221 @@
|
|||
/* The copyright in this software is being made available under the BSD
|
||||
* License, included below. This software may be subject to other third party
|
||||
* and contributor rights, including patent rights, and no such rights are
|
||||
* granted under this license.
|
||||
*
|
||||
* Copyright (c) 2010-2014, ITU/ISO/IEC
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* * Neither the name of the ITU/ISO/IEC nor the names of its contributors may
|
||||
* be used to endorse or promote products derived from this software without
|
||||
* specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
|
||||
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
|
||||
* THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/** \file TEncSbac.h
|
||||
\brief Context-adaptive entropy encoder class (header)
|
||||
*/
|
||||
|
||||
#ifndef __TENCSBAC__
|
||||
#define __TENCSBAC__
|
||||
|
||||
#if _MSC_VER > 1000
|
||||
#pragma once
|
||||
#endif // _MSC_VER > 1000
|
||||
|
||||
#include "TLibCommon/TComBitStream.h"
|
||||
#include "TLibCommon/ContextTables.h"
|
||||
#include "TLibCommon/ContextModel.h"
|
||||
#include "TLibCommon/ContextModel3DBuffer.h"
|
||||
#include "TEncEntropy.h"
|
||||
#include "TEncBinCoder.h"
|
||||
#include "TEncBinCoderCABAC.h"
|
||||
#if FAST_BIT_EST
|
||||
#include "TEncBinCoderCABACCounter.h"
|
||||
#endif
|
||||
|
||||
class TEncTop;
|
||||
|
||||
//! \ingroup TLibEncoder
|
||||
//! \{
|
||||
|
||||
// ====================================================================================================================
|
||||
// Class definition
|
||||
// ====================================================================================================================
|
||||
|
||||
/// SBAC encoder class
|
||||
class TEncSbac : public TEncEntropyIf
|
||||
{
|
||||
public:
|
||||
TEncSbac();
|
||||
virtual ~TEncSbac();
|
||||
|
||||
Void init ( TEncBinIf* p ) { m_pcBinIf = p; }
|
||||
Void uninit () { m_pcBinIf = 0; }
|
||||
|
||||
// Virtual list
|
||||
Void resetEntropy ();
|
||||
Void determineCabacInitIdx ();
|
||||
Void setBitstream ( TComBitIf* p ) { m_pcBitIf = p; m_pcBinIf->init( p ); }
|
||||
Void setSlice ( TComSlice* p ) { m_pcSlice = p; }
|
||||
|
||||
Void load ( const TEncSbac* pSrc );
|
||||
Void loadIntraDirMode ( const TEncSbac* pScr, const ChannelType chType );
|
||||
Void store ( TEncSbac* pDest ) const;
|
||||
Void loadContexts ( const TEncSbac* pSrc );
|
||||
Void resetBits () { m_pcBinIf->resetBits(); m_pcBitIf->resetBits(); }
|
||||
UInt getNumberOfWrittenBits () { return m_pcBinIf->getNumWrittenBits(); }
|
||||
//--SBAC RD
|
||||
|
||||
Void codeVPS ( TComVPS* pcVPS );
|
||||
Void codeSPS ( TComSPS* pcSPS );
|
||||
Void codePPS ( TComPPS* pcPPS );
|
||||
Void codeSliceHeader ( TComSlice* pcSlice );
|
||||
Void codeTilesWPPEntryPoint ( TComSlice* pSlice );
|
||||
Void codeTerminatingBit ( UInt uilsLast );
|
||||
Void codeSliceFinish ();
|
||||
Void codeSaoMaxUvlc ( UInt code, UInt maxSymbol );
|
||||
Void codeSaoMerge ( UInt uiCode );
|
||||
Void codeSaoTypeIdx ( UInt uiCode);
|
||||
Void codeSaoUflc ( UInt uiLength, UInt uiCode );
|
||||
Void codeSAOSign ( UInt uiCode); //<! code SAO offset sign
|
||||
Void codeScalingList ( TComScalingList* /*scalingList*/ ){ assert (0); return;};
|
||||
|
||||
Void codeSAOOffsetParam(ComponentID compIdx, SAOOffset& ctbParam, Bool sliceEnabled);
|
||||
Void codeSAOBlkParam(SAOBlkParam& saoBlkParam
|
||||
, Bool* sliceEnabled
|
||||
, Bool leftMergeAvail
|
||||
, Bool aboveMergeAvail
|
||||
, Bool onlyEstMergeInfo = false
|
||||
);
|
||||
|
||||
private:
|
||||
Void xWriteUnarySymbol ( UInt uiSymbol, ContextModel* pcSCModel, Int iOffset );
|
||||
Void xWriteUnaryMaxSymbol ( UInt uiSymbol, ContextModel* pcSCModel, Int iOffset, UInt uiMaxSymbol );
|
||||
Void xWriteEpExGolomb ( UInt uiSymbol, UInt uiCount );
|
||||
Void xWriteCoefRemainExGolomb ( UInt symbol, UInt &rParam, const Bool useLimitedPrefixLength, const ChannelType channelType );
|
||||
|
||||
Void xCopyFrom ( const TEncSbac* pSrc );
|
||||
Void xCopyContextsFrom ( const TEncSbac* pSrc );
|
||||
|
||||
Void codeDFFlag( UInt /*uiCode*/, const Char* /*pSymbolName*/ ) {printf("Not supported in codeDFFlag()\n"); assert(0); exit(1);};
|
||||
Void codeDFSvlc( Int /*iCode*/, const Char* /*pSymbolName*/ ) {printf("Not supported in codeDFSvlc()\n"); assert(0); exit(1);};
|
||||
|
||||
protected:
|
||||
TComBitIf* m_pcBitIf;
|
||||
TComSlice* m_pcSlice;
|
||||
TEncBinIf* m_pcBinIf;
|
||||
|
||||
//--Adaptive loop filter
|
||||
|
||||
public:
|
||||
Void codeCUTransquantBypassFlag( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeSkipFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeMergeFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeMergeIndex ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeSplitFlag ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
|
||||
Void codeMVPIdx ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList );
|
||||
|
||||
Void codePartSize ( TComDataCU* pcCU, UInt uiAbsPartIdx, UInt uiDepth );
|
||||
Void codePredMode ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeIPCMInfo ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeTransformSubdivFlag ( UInt uiSymbol, UInt uiCtx );
|
||||
Void codeQtCbf ( TComTU & rTu, const ComponentID compID, const Bool lowestLevel );
|
||||
Void codeQtRootCbf ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeQtCbfZero ( TComTU &rTu, const ChannelType chType );
|
||||
Void codeQtRootCbfZero ( TComDataCU* pcCU );
|
||||
Void codeIntraDirLumaAng ( TComDataCU* pcCU, UInt absPartIdx, Bool isMultiple);
|
||||
|
||||
Void codeIntraDirChroma ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeInterDir ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeRefFrmIdx ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList );
|
||||
Void codeMvd ( TComDataCU* pcCU, UInt uiAbsPartIdx, RefPicList eRefList );
|
||||
|
||||
Void codeCrossComponentPrediction( TComTU &rTu, ComponentID compID );
|
||||
|
||||
Void codeDeltaQP ( TComDataCU* pcCU, UInt uiAbsPartIdx );
|
||||
Void codeChromaQpAdjustment ( TComDataCU* cu, UInt absPartIdx );
|
||||
|
||||
Void codeLastSignificantXY ( UInt uiPosX, UInt uiPosY, Int width, Int height, ComponentID component, UInt uiScanIdx );
|
||||
Void codeCoeffNxN ( TComTU &rTu, TCoeff* pcCoef, const ComponentID compID );
|
||||
Void codeTransformSkipFlags ( TComTU &rTu, ComponentID component );
|
||||
|
||||
// -------------------------------------------------------------------------------------------------------------------
|
||||
// for RD-optimizatioon
|
||||
// -------------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Void estBit (estBitsSbacStruct* pcEstBitsSbac, Int width, Int height, ChannelType chType);
|
||||
Void estCBFBit ( estBitsSbacStruct* pcEstBitsSbac );
|
||||
Void estSignificantCoeffGroupMapBit( estBitsSbacStruct* pcEstBitsSbac, ChannelType chType );
|
||||
Void estSignificantMapBit ( estBitsSbacStruct* pcEstBitsSbac, Int width, Int height, ChannelType chType );
|
||||
Void estLastSignificantPositionBit ( estBitsSbacStruct* pcEstBitsSbac, Int width, Int height, ChannelType chType );
|
||||
Void estSignificantCoefficientsBit ( estBitsSbacStruct* pcEstBitsSbac, ChannelType chType );
|
||||
|
||||
Void codeExplicitRdpcmMode ( TComTU &rTu, const ComponentID compID );
|
||||
|
||||
|
||||
TEncBinIf* getEncBinIf() { return m_pcBinIf; }
|
||||
private:
|
||||
ContextModel m_contextModels[MAX_NUM_CTX_MOD];
|
||||
Int m_numContextModels;
|
||||
ContextModel3DBuffer m_cCUSplitFlagSCModel;
|
||||
ContextModel3DBuffer m_cCUSkipFlagSCModel;
|
||||
ContextModel3DBuffer m_cCUMergeFlagExtSCModel;
|
||||
ContextModel3DBuffer m_cCUMergeIdxExtSCModel;
|
||||
ContextModel3DBuffer m_cCUPartSizeSCModel;
|
||||
ContextModel3DBuffer m_cCUPredModeSCModel;
|
||||
ContextModel3DBuffer m_cCUIntraPredSCModel;
|
||||
ContextModel3DBuffer m_cCUChromaPredSCModel;
|
||||
ContextModel3DBuffer m_cCUDeltaQpSCModel;
|
||||
ContextModel3DBuffer m_cCUInterDirSCModel;
|
||||
ContextModel3DBuffer m_cCURefPicSCModel;
|
||||
ContextModel3DBuffer m_cCUMvdSCModel;
|
||||
ContextModel3DBuffer m_cCUQtCbfSCModel;
|
||||
ContextModel3DBuffer m_cCUTransSubdivFlagSCModel;
|
||||
ContextModel3DBuffer m_cCUQtRootCbfSCModel;
|
||||
|
||||
ContextModel3DBuffer m_cCUSigCoeffGroupSCModel;
|
||||
ContextModel3DBuffer m_cCUSigSCModel;
|
||||
ContextModel3DBuffer m_cCuCtxLastX;
|
||||
ContextModel3DBuffer m_cCuCtxLastY;
|
||||
ContextModel3DBuffer m_cCUOneSCModel;
|
||||
ContextModel3DBuffer m_cCUAbsSCModel;
|
||||
|
||||
ContextModel3DBuffer m_cMVPIdxSCModel;
|
||||
|
||||
ContextModel3DBuffer m_cSaoMergeSCModel;
|
||||
ContextModel3DBuffer m_cSaoTypeIdxSCModel;
|
||||
ContextModel3DBuffer m_cTransformSkipSCModel;
|
||||
ContextModel3DBuffer m_CUTransquantBypassFlagSCModel;
|
||||
ContextModel3DBuffer m_explicitRdpcmFlagSCModel;
|
||||
ContextModel3DBuffer m_explicitRdpcmDirSCModel;
|
||||
ContextModel3DBuffer m_cCrossComponentPredictionSCModel;
|
||||
|
||||
ContextModel3DBuffer m_ChromaQpAdjFlagSCModel;
|
||||
ContextModel3DBuffer m_ChromaQpAdjIdcSCModel;
|
||||
|
||||
UInt m_golombRiceAdaptationStatistics[RExt__GOLOMB_RICE_ADAPTATION_STATISTICS_SETS];
|
||||
};
|
||||
|
||||
//! \}
|
||||
|
||||
#endif // !defined(AFX_TENCSBAC_H__DDA7CDC4_EDE3_4015_9D32_2156249C82AA__INCLUDED_)
|
Loading…
Add table
Add a link
Reference in a new issue