Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Harminization IFP, AlfUnitSize, bugfies, update version #351

Merged
merged 2 commits into from
Feb 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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