Skip to content

Commit

Permalink
Harminization IFP, AlfUnitSize, bugfies, update version (#351)
Browse files Browse the repository at this point in the history
* Harminization IFP, AlfUnitSize, bugfies...

* Update version to v1.11.0-rc1
  • Loading branch information
adamjw24 authored Feb 13, 2024
1 parent ac10055 commit d674ee0
Show file tree
Hide file tree
Showing 9 changed files with 143 additions and 66 deletions.
4 changes: 2 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ if( NOT CMAKE_VERSION VERSION_LESS 3.13.0 )
endif()

# project name
project( vvenc VERSION 1.10.0 )
project( vvenc VERSION 1.11.0 )

# set alternative version numbering for release candidates
#set( PROJECT_VERSION_RC rc1 )
set( PROJECT_VERSION_RC rc1 )
if( PROJECT_VERSION_RC )
set( PROJECT_VERSION "${PROJECT_VERSION}-${PROJECT_VERSION_RC}" )
endif()
Expand Down
45 changes: 45 additions & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
@@ -1,5 +1,49 @@
/////////////////////////////////////////
tag 1.11.0-rc1

* libvvenc:
- added library parameters:
- vvenc_config::m_forceScc to force a specific SCC detection decision for all frames
(0: do not use, 1/2/3: no SCC/weak SCC/strong SCC)
- vvenc_config::m_ifp to enable inter-frame parallelism
- vvenc_config::m_minIntraDist to define minimal distance between intra frames (in presentation order)
- changed parameters:
- vvenc_config::m_RCMaxBitrate can now be specified as factor of target bitrate, use the macro
VVENC_SET_MAXRATE_FACTOR to set the value (absolute of negative values will be interpreted as
a 4-bit fixed-point factor)
- vvenc_config::m_numThreads will now per default be set to 12 for 5K and higher resolutions
- renamed library parameters:
- vvenc_config::m_fppLinesSynchro to vvenc_config::m_ifpLines
- added an affine speedup based on Pejman et al., ICIP 2023.
- added vectorized DQ implementation
- finalized inter-frame parallelization (previously FPP) improving performance during
execution with high number of threads (harmonized with rate control)
- improved SCC detection by reducing false positives
- overall speedups:
- 6% for fast/slow/slower
- 12% for medium, 25%+ for multi-threaded execution with long intra periods

* vvencFFapp:
- added parameters:
- IFP: enables the usage of inter-frame parallelism
- IFPLines: defines the synchronization offset in CTU lines
- ForceSCC: forces a specific SCC detection decision
- MinIntraDistance: defines a minimal distance between intra pictures in presentation order
- changed parameters:
- FppLinesSynchro: now deprecated, please use IFP and IFPLines
- NumThreads: if set to default (-1), will now cause the encoder to use 12 threads for 5K and higher resolutions
- MaxRate: if specified with suffix "x", e.g. "2x", the value will be interpreted as multiple of target bitrate

* vvencapp:
- added parameters:
- ifp: when set, will enable inter-frame parallelism with a default synchronization offset of two CTU lines
- changed parameters:
- threads, t: if set to default (-1), will now cause the encoder to use 12 threads for 5K and higher resolutions
- maxrate, m: if specified with suffix "x", e.g. "2x", the value will be interpreted as multiple of target bitrate

/////////////////////////////////////////
tag 1.10.0

* libvvenc:
- added library parameters:
- vvenc_config::m_poc0idr to force POC0 to be an IDR (otherwise per default it will now be a RASL picture)
Expand All @@ -20,6 +64,7 @@ tag 1.10.0

/////////////////////////////////////////
tag 1.9.1

* libvvenc:
- added library parameters:
- vvenc_config::m_maxPicWidth, vvenc_config::m_maxPicHeight to signal maximal possible picture size when
Expand Down
3 changes: 3 additions & 0 deletions source/Lib/CommonLib/x86/DepQuantX86.h
Original file line number Diff line number Diff line change
Expand Up @@ -1291,6 +1291,9 @@ namespace DQIntern
}

m_state_curr.m_gtxFracBitsArray = RateEstimator::gtxFracBits();
//memset( m_state_curr.tplAcc, 0, sizeof( m_state_curr.tplAcc ) ); // will be set in updateStates{,EOS} before first access
memset( m_state_curr.sum1st, 0, sizeof( m_state_curr.sum1st ) ); // will be accessed in setRiceParam before updateState{,EOS}
//memset( m_state_curr.absVal, 0, sizeof( m_state_curr.absVal ) ); // will be set in updateStates{,EOS} before first access

const int numCtx = isLuma( compID ) ? 21 : 11;
const CoeffFracBits* const cffBits = gtxFracBits();
Expand Down
100 changes: 55 additions & 45 deletions source/Lib/EncoderLib/EncAdaptiveLoopFilter.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1000,9 +1000,7 @@ void EncAdaptiveLoopFilter::init( const VVEncCfg& encCfg, const PPS& pps, CABACW
m_CABACEstimator = &cabacEstimator;
m_CtxCache = &ctxCache;


int alfUnitSize = encCfg.m_ifpLines ? m_encCfg->m_CTUSize: m_encCfg->m_alfUnitSize;
initASU( alfUnitSize );
initASU( m_encCfg->m_alfUnitSize );

const int numBins = m_encCfg->m_useNonLinearAlfLuma || m_encCfg->m_useNonLinearAlfChroma ? MaxAlfNumClippingValues : 1;

Expand Down Expand Up @@ -1654,7 +1652,9 @@ void EncAdaptiveLoopFilter::deriveFilter( Picture& pic, CodingStructure& cs, con
{
return;
}
const int numAsus = m_encCfg->m_ifpLines && numCtus != m_numAsusInPic ? numCtus: m_numAsusInPic;
const int numCtuLines = numCtus / cs.pcv->widthInCtus;
const int numAsusVer = numCtuLines / m_numCtusInAsuWidth + ( ( numCtuLines % m_numCtusInAsuWidth ) ? 1 : 0 );
const int numAsus = numAsusVer * m_numAsusInWidth;

initCABACEstimator( cs.slice );

Expand Down Expand Up @@ -2156,42 +2156,23 @@ void EncAdaptiveLoopFilter::xStoreAlfAsuFilterIdx( CodingStructure& cs, int ctuX
}
}

double EncAdaptiveLoopFilter::xCodeAlfAsuEnabledFlag( CodingStructure& cs, int ctuIdx, const int compIdx, AlfParam* alfParam, const double ctuLambda )
{
m_CABACEstimator->codeAlfCtuEnabledFlag( cs, ctuIdx, compIdx );
return ctuLambda * FRAC_BITS_SCALE * m_CABACEstimator->getEstFracBits();
}

double EncAdaptiveLoopFilter::xCodeAlfAsuLumaFilterIdx( CodingStructure& cs, int asuIdx, int ctuIdx, const double ctuLambda )
{
m_CABACEstimator->resetBits();
m_CABACEstimator->codeAlfCtuFilterIndex( cs, ctuIdx );
return m_numCtusInAsu[asuIdx] * ctuLambda * FRAC_BITS_SCALE * m_CABACEstimator->getEstFracBits();
}

double EncAdaptiveLoopFilter::xCodeAlfAsuAlternative( CodingStructure& cs, int asuIdx, int ctuIdx, const int compIdx, AlfParam* alfParam, const double ctuLambda )
{
m_CABACEstimator->codeAlfCtuAlternative( cs, ctuIdx, compIdx, alfParam );
return m_numCtusInAsu[asuIdx] * ctuLambda * FRAC_BITS_SCALE * m_CABACEstimator->getEstFracBits();
}

double xCodeAlfCtuEnabledFlag( CodingStructure& cs, int ctuIdx, const int compIdx, AlfParam* alfParam, CABACWriter* CABACEstimator, const double ctuLambda )
double EncAdaptiveLoopFilter::xCodeAlfAsuEnabledFlag( CodingStructure& cs, int ctuIdx, const int compIdx, CABACWriter* CABACEstimator, const double ctuLambda )
{
CABACEstimator->codeAlfCtuEnabledFlag( cs, ctuIdx, compIdx );
return ctuLambda * FRAC_BITS_SCALE * CABACEstimator->getEstFracBits();
}

double xCodeAlfCtuLumaFilterIdx( CodingStructure& cs, int asuIdx, int ctuIdx, CABACWriter* CABACEstimator, const double ctuLambda )
double EncAdaptiveLoopFilter::xCodeAlfAsuLumaFilterIdx( CodingStructure& cs, int asuIdx, int ctuIdx, CABACWriter* CABACEstimator, const double ctuLambda )
{
CABACEstimator->resetBits();
CABACEstimator->codeAlfCtuFilterIndex( cs, ctuIdx );
return ctuLambda * FRAC_BITS_SCALE * CABACEstimator->getEstFracBits();
return m_numCtusInAsu[asuIdx] * ctuLambda * FRAC_BITS_SCALE * CABACEstimator->getEstFracBits();
}

double xCodeAlfCtuAlternative( CodingStructure& cs, int asuIdx, int ctuIdx, const int compIdx, AlfParam* alfParam, CABACWriter* CABACEstimator, const double ctuLambda )
double EncAdaptiveLoopFilter::xCodeAlfAsuAlternative( CodingStructure& cs, int asuIdx, int ctuIdx, const int compIdx, AlfParam* alfParam, CABACWriter* CABACEstimator, const double ctuLambda )
{
CABACEstimator->codeAlfCtuAlternative( cs, ctuIdx, compIdx, alfParam );
return ctuLambda * FRAC_BITS_SCALE * CABACEstimator->getEstFracBits();
return m_numCtusInAsu[asuIdx] * ctuLambda * FRAC_BITS_SCALE * CABACEstimator->getEstFracBits();
}

bool EncAdaptiveLoopFilter::isSkipAlfForFrame( const Picture& pic ) const
Expand Down Expand Up @@ -2249,10 +2230,10 @@ double EncAdaptiveLoopFilter::deriveCtbAlfEnableFlags( CodingStructure& cs, Chan
m_CABACEstimator->resetBits();
m_ctuEnableFlag[compID][ctuIdx] = 1;
double costOn = distUnfilterCtu;
costOn += xCodeAlfAsuEnabledFlag( cs, ctuIdx, compID, &m_alfParamTemp, ctuLambda );
costOn += xCodeAlfAsuEnabledFlag( cs, ctuIdx, compID, m_CABACEstimator, ctuLambda );
if( isLuma( channel ) )
{
costOn += xCodeAlfAsuLumaFilterIdx( cs, asuIdx, ctuIdx, ctuLambda );
costOn += xCodeAlfAsuLumaFilterIdx( cs, asuIdx, ctuIdx, m_CABACEstimator, ctuLambda );
}

ctxTempBest = AlfCtx( m_CABACEstimator->getCtx() );
Expand All @@ -2272,7 +2253,7 @@ double EncAdaptiveLoopFilter::deriveCtbAlfEnableFlags( CodingStructure& cs, Chan
m_CABACEstimator->getCtx() = AlfCtx( ctxTempAltStart );
m_CABACEstimator->resetBits();
m_ctuAlternative[compID][ctuIdx] = altIdx;
double r_altCost = xCodeAlfAsuAlternative( cs, asuIdx, ctuIdx, compID, &m_alfParamTemp, ctuLambda );
double r_altCost = xCodeAlfAsuAlternative( cs, asuIdx, ctuIdx, compID, &m_alfParamTemp, m_CABACEstimator, ctuLambda );
double altDist = 0.;
altDist += doClip ? m_alfCovariance[compID][asuIdx][0].calcErrorForCoeffs<true >( m_filterClippSet[altIdx], m_filterCoeffSet[altIdx], numCoeff, invFactor )
: m_alfCovariance[compID][asuIdx][0].calcErrorForCoeffs<false>( m_filterClippSet[altIdx], m_filterCoeffSet[altIdx], numCoeff, invFactor );
Expand All @@ -2292,7 +2273,7 @@ double EncAdaptiveLoopFilter::deriveCtbAlfEnableFlags( CodingStructure& cs, Chan
m_CABACEstimator->getCtx() = AlfCtx( ctxTempStart );
m_CABACEstimator->resetBits();
m_ctuEnableFlag[compID][ctuIdx] = 0;
double costOff = distUnfilterCtu + xCodeAlfAsuEnabledFlag( cs, ctuIdx, compID, &m_alfParamTemp, ctuLambda );
double costOff = distUnfilterCtu + xCodeAlfAsuEnabledFlag( cs, ctuIdx, compID, m_CABACEstimator, ctuLambda );

uint8_t enable = 0;
if( costOn < costOff )
Expand Down Expand Up @@ -4418,13 +4399,41 @@ void EncAdaptiveLoopFilter::initDistortionCcalf( int numCtus )
}
}

void EncAdaptiveLoopFilter::selectFilterForCTU( CodingStructure& cs, CABACWriter* CABACEstimator, CtxCache* ctxCache, int asuIdx )
void EncAdaptiveLoopFilter::selectFilterForCTU( CodingStructure& cs, CABACWriter* CABACEstimator, CtxCache* ctxCache, int ctuIdx )
{
if( isSkipAlfForFrame( *cs.picture ) )
{
return;
}

int asuIdx = 0;
if( m_numCtusInAsuHeight > 1 )
{
// using ASUs
const PreCalcValues& pcv = *cs.pcv;
const int xC = (ctuIdx % pcv.widthInCtus) << pcv.maxCUSizeLog2;
const int yC = (ctuIdx / pcv.widthInCtus) << pcv.maxCUSizeLog2;

const int wC = std::min( m_maxCUWidth, m_picWidth - xC );
const int hC = std::min( m_maxCUHeight, m_picHeight - yC );

const int xA = xC & ~(m_maxAsuWidth - 1);
const int yA = yC & ~(m_maxAsuHeight - 1);
const int wA = std::min( m_maxAsuWidth, m_picWidth - xA );
const int hA = std::min( m_maxAsuHeight, m_picHeight - yA );

// bottom-right CTU in ASU?
if(xA + wA != xC + wC || yA + hA != yC + hC)
{
return;
}
asuIdx = ( yA / m_maxAsuHeight ) * m_numAsusInWidth + ( xA / m_maxAsuWidth );
}
else
{
asuIdx = ctuIdx;
}

int ctuX, ctuY;
getAsuCtuXY(asuIdx, ctuX, ctuY);
int ctbIdx = ctuY * cs.pcv->widthInCtus + ctuX;
Expand Down Expand Up @@ -4467,9 +4476,10 @@ void EncAdaptiveLoopFilter::selectFilterForCTU( CodingStructure& cs, CABACWrite
//rate
CABACEstimator->getCtx() = AlfCtx(ctxTempStart);
CABACEstimator->resetBits();
double rateOn = xCodeAlfCtuEnabledFlag(cs, ctbIdx, COMP_Y, nullptr, CABACEstimator, ctuLambda);
double rateOn = xCodeAlfAsuEnabledFlag(cs, ctbIdx, COMP_Y, CABACEstimator, ctuLambda);
alfCtbFilterSetIndex[ctbIdx] = filterSetIdx;
rateOn += xCodeAlfCtuLumaFilterIdx(cs, asuIdx, ctbIdx, CABACEstimator, ctuLambda);
rateOn += xCodeAlfAsuLumaFilterIdx(cs, asuIdx, ctbIdx, CABACEstimator, ctuLambda);

//distortion
double dist = distUnfilterCtb;

Expand Down Expand Up @@ -4527,7 +4537,7 @@ void EncAdaptiveLoopFilter::selectFilterForCTU( CodingStructure& cs, CABACWrite
//rate
CABACEstimator->getCtx() = AlfCtx(ctxTempStart);
CABACEstimator->resetBits();
double rateCost = xCodeAlfCtuEnabledFlag(cs, ctbIdx, COMP_Y, nullptr, CABACEstimator, ctuLambda);
double rateCost = xCodeAlfAsuEnabledFlag(cs, ctbIdx, COMP_Y, CABACEstimator, ctuLambda);
//cost
const double costOff = distUnfilterCtb + rateCost;
DTRACE(g_trace_ctx, D_MISC, "\t\t\t costOff=%.2f\n", costOff);
Expand Down Expand Up @@ -4567,7 +4577,7 @@ void EncAdaptiveLoopFilter::selectFilterForCTU( CodingStructure& cs, CABACWrite
CABACEstimator->getCtx() = AlfCtx(ctxTempStart);
CABACEstimator->resetBits();
//ctb flag
double rateCostOn = xCodeAlfCtuEnabledFlag(cs, ctbIdx, compId, nullptr, CABACEstimator, ctuLambda);
double rateCostOn = xCodeAlfAsuEnabledFlag(cs, ctbIdx, compId, CABACEstimator, ctuLambda);
double dist = MAX_DOUBLE;
int numAlts = alfParamTemp.numAlternativesChroma;
ctxTempBest = AlfCtx(CABACEstimator->getCtx());
Expand All @@ -4581,7 +4591,7 @@ void EncAdaptiveLoopFilter::selectFilterForCTU( CodingStructure& cs, CABACWrite
CABACEstimator->getCtx() = AlfCtx(ctxTempAltStart);
CABACEstimator->resetBits();
m_ctuAlternative[compId][ctbIdx] = altIdx;
double r_altCost = xCodeAlfCtuAlternative(cs, asuIdx, ctbIdx, compId, &alfParamTemp, CABACEstimator, ctuLambda);
double r_altCost = xCodeAlfAsuAlternative(cs, asuIdx, ctbIdx, compId, &alfParamTemp, CABACEstimator, ctuLambda);

//distortion
for (int i = 0; i < MAX_NUM_ALF_CHROMA_COEFF; i++)
Expand Down Expand Up @@ -4612,7 +4622,7 @@ void EncAdaptiveLoopFilter::selectFilterForCTU( CodingStructure& cs, CABACWrite
//rate
CABACEstimator->getCtx() = AlfCtx(ctxTempStart);
CABACEstimator->resetBits();
double rateCost = xCodeAlfCtuEnabledFlag(cs, ctbIdx, compId, &alfParamTemp, CABACEstimator, ctuLambda);
double rateCost = xCodeAlfAsuEnabledFlag(cs, ctbIdx, compId, CABACEstimator, ctuLambda);
//cost
const double costOff = distUnfilterCtu + rateCost;
DTRACE(g_trace_ctx, D_MISC, "Chroma_%d: \t\t\t costOn =%.2f, costOff =%.2f\n", compId, costOn, costOff );
Expand Down Expand Up @@ -4807,9 +4817,9 @@ void EncAdaptiveLoopFilter::alfEncoderCtb( CodingStructure& cs, AlfParam& alfPa
//rate
m_CABACEstimator->getCtx() = AlfCtx(ctxTempStart);
m_CABACEstimator->resetBits();
double rateOn = xCodeAlfAsuEnabledFlag( cs, ctbIdx, COMP_Y, &m_alfParamTemp, ctuLambda );
double rateOn = xCodeAlfAsuEnabledFlag( cs, ctbIdx, COMP_Y, m_CABACEstimator, ctuLambda );
alfCtbFilterSetIndex[ctbIdx] = filterSetIdx;
rateOn += xCodeAlfAsuLumaFilterIdx( cs, asuIdx, ctbIdx, ctuLambda );
rateOn += xCodeAlfAsuLumaFilterIdx( cs, asuIdx, ctbIdx, m_CABACEstimator, ctuLambda );
//distortion
double dist = distUnfilterCtb;

Expand Down Expand Up @@ -4880,7 +4890,7 @@ void EncAdaptiveLoopFilter::alfEncoderCtb( CodingStructure& cs, AlfParam& alfPa
//rate
m_CABACEstimator->getCtx() = AlfCtx(ctxTempStart);
m_CABACEstimator->resetBits();
double rateCost = xCodeAlfAsuEnabledFlag( cs, ctbIdx, COMP_Y, &m_alfParamTemp, ctuLambda );
double rateCost = xCodeAlfAsuEnabledFlag( cs, ctbIdx, COMP_Y, m_CABACEstimator, ctuLambda );
//cost
const double costOff = distUnfilterCtb + rateCost;
DTRACE( g_trace_ctx, D_MISC, "\t\t\t costOff=%.2f\n", costOff );
Expand Down Expand Up @@ -5063,7 +5073,7 @@ void EncAdaptiveLoopFilter::alfEncoderCtb( CodingStructure& cs, AlfParam& alfPa
m_CABACEstimator->getCtx() = AlfCtx(ctxTempStart);
m_CABACEstimator->resetBits();
//ctb flag
double rateCostOn = xCodeAlfAsuEnabledFlag( cs, ctbIdx, compId, &m_alfParamTemp, ctuLambda );
double rateCostOn = xCodeAlfAsuEnabledFlag( cs, ctbIdx, compId, m_CABACEstimator, ctuLambda );
double dist = MAX_DOUBLE;
int numAlts = m_alfParamTemp.numAlternativesChroma;
ctxTempBest = AlfCtx( m_CABACEstimator->getCtx() );
Expand All @@ -5077,7 +5087,7 @@ void EncAdaptiveLoopFilter::alfEncoderCtb( CodingStructure& cs, AlfParam& alfPa
m_CABACEstimator->getCtx() = AlfCtx( ctxTempAltStart );
m_CABACEstimator->resetBits();
m_ctuAlternative[compId][ctbIdx] = altIdx;
double r_altCost = xCodeAlfAsuAlternative( cs, asuIdx, ctbIdx, compId, &m_alfParamTemp, ctuLambda );
double r_altCost = xCodeAlfAsuAlternative( cs, asuIdx, ctbIdx, compId, &m_alfParamTemp, m_CABACEstimator, ctuLambda );

//distortion
for (int i = 0; i < MAX_NUM_ALF_CHROMA_COEFF; i++)
Expand Down Expand Up @@ -5109,7 +5119,7 @@ void EncAdaptiveLoopFilter::alfEncoderCtb( CodingStructure& cs, AlfParam& alfPa
//rate
m_CABACEstimator->getCtx() = AlfCtx(ctxTempStart);
m_CABACEstimator->resetBits();
double rateCost = xCodeAlfAsuEnabledFlag( cs, ctbIdx, compId, &m_alfParamTemp, ctuLambda );
double rateCost = xCodeAlfAsuEnabledFlag( cs, ctbIdx, compId, m_CABACEstimator, ctuLambda );
//cost
const double costOff = distUnfilterCtu + rateCost;
DTRACE(g_trace_ctx, D_MISC, "Chroma_%d: \t\t\t costOn =%.2f, costOff =%.2f\n", compId, costOn, costOff );
Expand Down
9 changes: 5 additions & 4 deletions source/Lib/EncoderLib/EncAdaptiveLoopFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -415,21 +415,22 @@ class EncAdaptiveLoopFilter : public AdaptiveLoopFilter
void deriveCcAlfFilter ( Picture& pic, CodingStructure& cs, int numCtus );
void applyCcAlfFilterCTU ( CodingStructure& cs, ComponentID compID, const int ctuRsAddr, PelStorage& alfTempCtuBuf );
void deriveFilter ( Picture& pic, CodingStructure& cs, const double* lambdas, const int numCtus );
void selectFilterForCTU ( CodingStructure& cs, CABACWriter* CABACEstimator, CtxCache* ctxCache, int ctuIdx );
void selectFilterForCTU ( CodingStructure& cs, CABACWriter* CABACEstimator, CtxCache* ctxCache, int ctuIdx );
void reconstructCTU_MT ( Picture& pic, CodingStructure& cs, const int ctuRsAddr, PelStorage& alfTempCtuBuf );
void reconstructCTU ( Picture& pic, CodingStructure& cs, const CPelUnitBuf& recBuf, const int ctuRsAddr, PelStorage& alfTempCtuBuf );
// void alfReconstructor ( CodingStructure& cs );
void initEncProcess ( Slice& slice );
void initDerivation ( Slice& slice );
void resetFrameStats ( bool ccAlfEnabled );
bool isSkipAlfForFrame ( const Picture& pic ) const;
int getAsuHeightInCtus () { return m_numCtusInAsuHeight; }
private:
void xStoreAlfAsuEnabledFlag ( CodingStructure& cs, int ctuX, int ctuY, int ctuIdx, const int compIdx, bool flag );
void xStoreAlfAsuAlternative ( CodingStructure& cs, int ctuX, int ctuY, int ctuIdx, const int compIdx, const uint8_t alt );
void xStoreAlfAsuFilterIdx ( CodingStructure& cs, int ctuX, int ctuY, int ctuIdx, const short fltIdx, short* alfCtbFilterSetIndex );
double xCodeAlfAsuEnabledFlag ( CodingStructure& cs, int ctuIdx, const int compIdx, AlfParam* alfParam, const double ctuLambda );
double xCodeAlfAsuAlternative ( CodingStructure& cs, int asuIdx, int ctuIdx, const int compIdx, AlfParam* alfParam, const double ctuLambda );
double xCodeAlfAsuLumaFilterIdx ( CodingStructure& cs, int asuIdx, int ctuIdx, const double ctuLambda );
double xCodeAlfAsuEnabledFlag ( CodingStructure& cs, int ctuIdx, const int compIdx, CABACWriter* CABACEstimator, const double ctuLambda );
double xCodeAlfAsuAlternative ( CodingStructure& cs, int asuIdx, int ctuIdx, const int compIdx, AlfParam* alfParam, CABACWriter* CABACEstimator, const double ctuLambda );
double xCodeAlfAsuLumaFilterIdx ( CodingStructure& cs, int asuIdx, int ctuIdx, CABACWriter* CABACEstimator, const double ctuLambda );
void xGetStatisticsCTU ( Picture& pic, CodingStructure& cs, PelUnitBuf& recYuv, const int xPos, const int yPos, const int asuRsAddr, PelStorage& alfTempCtuBuf );
void alfEncoder ( CodingStructure& cs, AlfParam& alfParam, const ChannelType channel, const double lambdaChromaWeight, const int numAsus, const int numCtus );

Expand Down
Loading

0 comments on commit d674ee0

Please sign in to comment.