[x265] [PATCH] Fix build warnings for MV-HEVC, Alpha & SCC and Code cleanup
Anusuya Kumarasamy
anusuya.kumarasamy at multicorewareinc.com
Wed Oct 9 12:01:42 UTC 2024
>From bac40495e1159c4d857105318021fb75faadac0b Mon Sep 17 00:00:00 2001
From: AnusuyaKumarasamy <anusuya.kumarasamy at multicorewareinc.com>
Date: Mon, 30 Sep 2024 11:01:08 +0530
Subject: [PATCH] Fix build warnings for MV-HEVC, Alpha & SCC and Code
cleanup
---
source/abrEncApp.cpp | 18 ++++----
source/abrEncApp.h | 2 +-
source/common/cudata.cpp | 11 ++++-
source/common/cudata.h | 10 ++++-
source/common/lowpassdct.cpp | 6 ++-
source/common/param.cpp | 53 +++++++++++++++++++++++-
source/common/slice.cpp | 10 +++--
source/common/slice.h | 4 +-
source/encoder/analysis.cpp | 16 +++++++-
source/encoder/analysis.h | 7 +++-
source/encoder/dpb.cpp | 8 +++-
source/encoder/encoder.cpp | 28 +++++++------
source/encoder/entropy.cpp | 10 +++--
source/encoder/entropy.h | 4 ++
source/encoder/frameencoder.cpp | 7 ++--
source/encoder/level.cpp | 45 --------------------
source/encoder/nal.cpp | 2 +-
source/encoder/search.cpp | 32 ++++++++++-----
source/encoder/search.h | 5 ++-
source/encoder/sei.h | 73 ++++++++++++++++++++++++++-------
source/x265.h | 7 ++--
source/x265cli.cpp | 3 +-
22 files changed, 240 insertions(+), 121 deletions(-)
diff --git a/source/abrEncApp.cpp b/source/abrEncApp.cpp
index c5dcf3559..4c433122b 100644
--- a/source/abrEncApp.cpp
+++ b/source/abrEncApp.cpp
@@ -63,7 +63,7 @@ namespace X265_NS {
m_passEnc[i]->init(ret);
}
- m_numInputViews = m_passEnc[0]->m_param->numViews;
+ m_numInputViews = m_passEnc[0]->m_param->numViews -
!!m_passEnc[0]->m_param->format;
if (!allocBuffers())
{
x265_log(NULL, X265_LOG_ERROR, "Unable to allocate memory for
buffers\n");
@@ -207,7 +207,7 @@ namespace X265_NS {
m_parent = parent;
if (!(m_cliopt.enableScaler && m_id))
{
- for (int view = 0; view < m_cliopt.param->numViews; view++)
+ for (int view = 0; view < m_cliopt.param->numViews -
!!m_cliopt.param->format; view++)
m_input[view] = m_cliopt.input[view];
}
m_param = cliopt.param;
@@ -592,14 +592,14 @@ ret:
x265_picture pic_orig[MAX_VIEWS];
x265_picture *pic_in[MAX_VIEWS];
- for (int view = 0; view < m_param->numViews; view++)
+ for (int view = 0; view < m_param->numViews -
!!m_param->format; view++)
pic_in[view] = &pic_orig[view];
/* Allocate recon picture if analysis save/load is enabled */
std::priority_queue<int64_t>* pts_queue =
m_cliopt.output->needPTS() ? new std::priority_queue<int64_t>() : NULL;
x265_picture* pic_recon;
x265_picture pic_out[MAX_LAYERS];
- pic_recon = (m_cliopt.recon || m_param->analysisSave ||
m_param->analysisLoad || pts_queue || reconPlay || m_param->csvLogLevel) ?
pic_out : NULL;
+ pic_recon = (m_cliopt.recon[0] || m_param->analysisSave ||
m_param->analysisLoad || pts_queue || reconPlay || m_param->csvLogLevel) ?
pic_out : NULL;
uint32_t inFrameCount = 0;
uint32_t outFrameCount = 0;
x265_nal *p_nal;
@@ -625,7 +625,7 @@ ret:
m_cliopt.totalbytes +=
m_cliopt.output->writeHeaders(p_nal, nal);
}
- for (int view = 0; view < m_param->numViews; view++)
+ for (int view = 0; view < m_param->numViews -
!!m_param->format; view++)
{
if (m_param->bField && m_param->interlaceMode)
{
@@ -639,7 +639,7 @@ ret:
api->picture_init(m_param, &pic_orig[view]);
}
- if (m_param->dolbyProfile && m_cliopt.dolbyVisionRpu)
+ if (m_param->dolbyProfile && m_cliopt.dolbyVisionRpu &&
pic_in[0])
{
rpuPayload = X265_MALLOC(uint8_t, 1024);
pic_in[0]->rpu.payload = rpuPayload;
@@ -659,7 +659,7 @@ ret:
// main encoder loop
while (pic_in[0] && !b_ctrl_c)
{
- for (int view = 0; view < m_param->numViews; view++)
+ for (int view = 0; view < m_param->numViews -
!!m_param->format; view++)
{
pic_orig[view].poc = (m_param->bField &&
m_param->interlaceMode) ? inFrameCount * 2 : inFrameCount;
if (m_cliopt.qpfile)
@@ -676,7 +676,7 @@ ret:
if (m_cliopt.framesToBeEncoded && inFrameCount >=
m_cliopt.framesToBeEncoded)
pic_in[view] = NULL;
else if (readPicture(pic_in[view], view)){
- if(view == m_param->numViews - 1)
+ if(view == m_param->numViews - !!m_param->format -
1)
inFrameCount++;
}
else
@@ -785,7 +785,7 @@ ret:
{
x265_picture* picInput = NULL;
if (inputPicNum == 2)
- picInput = pic_in ? (inputNum ? &picField2 :
&picField1) : NULL;
+ picInput = *pic_in ? (inputNum ? &picField2 :
&picField1) : NULL;
else
picInput = *pic_in;
diff --git a/source/abrEncApp.h b/source/abrEncApp.h
index fab694656..7c1142baf 100644
--- a/source/abrEncApp.h
+++ b/source/abrEncApp.h
@@ -42,7 +42,7 @@ namespace X265_NS {
{
public:
uint8_t m_numEncodes;
- uint8_t m_numInputViews; // Number of inputs for
multiview-extension
+ int m_numInputViews; // Number of inputs for
multiview-extension
PassEncoder **m_passEnc;
uint32_t m_queueSize;
ThreadSafeInteger m_numActiveEncodes;
diff --git a/source/common/cudata.cpp b/source/common/cudata.cpp
index ae1fb4694..6ea6048b7 100644
--- a/source/common/cudata.cpp
+++ b/source/common/cudata.cpp
@@ -327,7 +327,11 @@ void CUData::initCTU(const Frame& frame, uint32_t
cuAddr, int qp, uint32_t first
}
// initialize Sub partition
+#if ENABLE_SCC_EXT
void CUData::initSubCU(const CUData& ctu, const CUGeom& cuGeom, int qp, MV
lastIntraBCMv[2])
+#else
+void CUData::initSubCU(const CUData& ctu, const CUGeom& cuGeom, int qp)
+#endif
{
m_absIdxInCTU = cuGeom.absPartIdx;
m_encData = ctu.m_encData;
@@ -1737,7 +1741,11 @@ uint32_t CUData::getInterMergeCandidates(uint32_t
absPartIdx, uint32_t puIdx, MV
}
// Create the PMV list. Called for each reference index.
+#if (ENABLE_MULTIVIEW || ENABLE_SCC_EXT)
int CUData::getPMV(InterNeighbourMV* neighbours, uint32_t picList,
uint32_t refIdx, MV* amvpCand, MV* pmv, uint32_t puIdx, uint32_t
absPartIdx) const
+#else
+int CUData::getPMV(InterNeighbourMV* neighbours, uint32_t picList,
uint32_t refIdx, MV* amvpCand, MV* pmv) const
+#endif
{
MV directMV[MD_ABOVE_LEFT + 1];
MV indirectMV[MD_ABOVE_LEFT + 1];
@@ -1847,7 +1855,6 @@ int CUData::getPMV(InterNeighbourMV* neighbours,
uint32_t picList, uint32_t refI
int refId = refIdx;
uint32_t absPartAddr = m_absIdxInCTU + absPartIdx;
uint32_t partIdxRB = deriveRightBottomIdx(puIdx);
- bool isValid;
// co-located RightBottom temporal predictor (H)
int ctuIdx = -1;
@@ -2128,7 +2135,7 @@ bool CUData::getColMVP(MV& outMV, int& outRefIdx, int
picList, int cuAddr, int p
outMV = scaleMvByPOCDist(colmv, curPOC, curRefPOC, colPOC,
colRefPOC);
#else
outMV = scaleMvByPOCDist(colmv, curPOC, curRefPOC, colPOC, colRefPOC);
-#endif;
+#endif
return true;
}
diff --git a/source/common/cudata.h b/source/common/cudata.h
index 2b669a802..7c25a4e07 100644
--- a/source/common/cudata.h
+++ b/source/common/cudata.h
@@ -253,7 +253,9 @@ public:
static void calcCTUGeoms(uint32_t ctuWidth, uint32_t ctuHeight,
uint32_t maxCUSize, uint32_t minCUSize, CUGeom
cuDataArray[CUGeom::MAX_GEOMS]);
void initCTU(const Frame& frame, uint32_t cuAddr, int qp, uint32_t
firstRowInSlice, uint32_t lastRowInSlice, uint32_t lastCUInSlice);
- void initSubCU(const CUData& ctu, const CUGeom& cuGeom, int qp, MV
lastIntraBCMv[2] = 0);
+#if !ENABLE_SCC_EXT
+ void initSubCU(const CUData& ctu, const CUGeom& cuGeom, int qp);
+#endif
void initLosslessCU(const CUData& cu, const CUGeom& cuGeom);
void copyPartFrom(const CUData& cu, const CUGeom& childGeom,
uint32_t subPartIdx);
@@ -289,7 +291,11 @@ public:
int8_t getRefQP(uint32_t currAbsIdxInCTU) const;
uint32_t getInterMergeCandidates(uint32_t absPartIdx, uint32_t puIdx,
MVField (*candMvField)[2], uint8_t* candDir) const;
void clipMv(MV& outMV) const;
+#if (ENABLE_MULTIVIEW || ENABLE_SCC_EXT)
int getPMV(InterNeighbourMV* neighbours, uint32_t reference_list,
uint32_t refIdx, MV* amvpCand, MV* pmv, uint32_t puIdx = 0, uint32_t
absPartIdx = 0) const;
+#else
+ int getPMV(InterNeighbourMV* neighbours, uint32_t reference_list,
uint32_t refIdx, MV* amvpCand, MV* pmv) const;
+#endif
void getNeighbourMV(uint32_t puIdx, uint32_t absPartIdx,
InterNeighbourMV* neighbours) const;
void getIntraTUQtDepthRange(uint32_t tuDepthRange[2], uint32_t
absPartIdx) const;
void getInterTUQtDepthRange(uint32_t tuDepthRange[2], uint32_t
absPartIdx) const;
@@ -327,6 +333,8 @@ public:
const CUData* getPUBelowLeftAdi(uint32_t& blPartUnitIdx, uint32_t
curPartUnitIdx, uint32_t partUnitOffset) const;
#if ENABLE_SCC_EXT
+ void initSubCU(const CUData& ctu, const CUGeom& cuGeom, int qp, MV
lastIntraBCMv[2] = 0);
+
void getIntraBCMVPsEncOnly(uint32_t absPartIdx, MV* MvPred, int&
nbPred, int puIdx);
bool getDerivedBV(uint32_t absPartIdx, const MV& currentMv, MV&
derivedMv, uint32_t width, uint32_t height);
bool isIntraBC(const CUData* cu, uint32_t absPartIdx) const;
diff --git a/source/common/lowpassdct.cpp b/source/common/lowpassdct.cpp
index f9922980f..e0f9c1ab7 100644
--- a/source/common/lowpassdct.cpp
+++ b/source/common/lowpassdct.cpp
@@ -58,7 +58,11 @@ static void lowPassDct8_c(const int16_t* src, int16_t*
dst, intptr_t srcStride)
}
// replace first coef with total block average
- dst[0] = (X265_DEPTH == 8) ? (totalSum << 1) : (totalSum >>
((X265_DEPTH - 9)));
+#if X265_DEPTH == 8
+ dst[0] = totalSum << 1;
+#else
+ dst[0] = totalSum >> (X265_DEPTH - 9);
+#endif
}
static void lowPassDct16_c(const int16_t* src, int16_t* dst, intptr_t
srcStride)
diff --git a/source/common/param.cpp b/source/common/param.cpp
index 833edb767..71437aa98 100755
--- a/source/common/param.cpp
+++ b/source/common/param.cpp
@@ -109,6 +109,33 @@ void x265_param_free(x265_param* p)
x265_free(p);
}
+#if ENABLE_SCC_EXT
+enum SCCProfileName
+{
+ NONE = 0,
+ // The following are SCC profiles, which would map to the MAINSCC
profile idc.
+ // The enumeration indicates the bit-depth constraint in the bottom 2
digits
+ // the chroma format in the next digit
+ // the intra constraint in the next digit
+ // If it is a SCC profile there is a '2' for
the next digit.
+ // If it is a highthroughput , there is a
'2' for the top digit else '1' for the top digit
+ SCC_MAIN = 121108,
+ SCC_MAIN_10 = 121110,
+ SCC_MAIN_444 = 121308,
+ SCC_MAIN_444_10 = 121310,
+};
+
+static const SCCProfileName validSCCProfileNames[1][4/* bit depth
constraint 8=0, 10=1, 12=2, 14=3*/][4/*chroma format*/] =
+{
+ {
+ { NONE, SCC_MAIN, NONE, SCC_MAIN_444
}, // 8-bit intra for 400, 420, 422 and 444
+ { NONE, SCC_MAIN_10, NONE, SCC_MAIN_444_10
}, // 10-bit intra for 400, 420, 422 and 444
+ { NONE, NONE, NONE, NONE
}, // 12-bit intra for 400, 420, 422 and 444
+ { NONE, NONE, NONE, NONE
} // 16-bit intra for 400, 420, 422 and 444
+ },
+};
+#endif
+
void x265_param_default(x265_param* param)
{
#ifdef SVT_HEVC
@@ -1959,17 +1986,39 @@ int x265_check_params(x265_param* param)
if (param->bEnableAlpha)
{
CHECK((param->internalCsp != X265_CSP_I420), "Alpha encode
supported only with i420a colorspace");
+ CHECK((param->internalBitDepth > 10), "BitDepthConstraint must be
8 and 10 for Scalable main profile");
CHECK((param->analysisMultiPassDistortion ||
param->analysisMultiPassRefine), "Alpha encode doesnot support multipass
feature");
+ CHECK((param->analysisSave || param->analysisLoad), "Alpha encode
doesnot support analysis save and load feature");
}
#endif
#if ENABLE_MULTIVIEW
CHECK((param->numViews > 2), "Multi-View Encoding currently support
only 2 views");
- CHECK((param->numViews > 1) && (param->internalBitDepth != 8),
"BitDepthConstraint must be 8 for Multiview main profile");
- CHECK((param->numViews > 1) && (param->analysisMultiPassDistortion ||
param->analysisMultiPassRefine), "Multiview encode doesnot support
multipass feature");
+ if (param->numViews > 1)
+ {
+ CHECK(param->internalBitDepth != 8, "BitDepthConstraint must be 8
for Multiview main profile");
+ CHECK(param->analysisMultiPassDistortion ||
param->analysisMultiPassRefine, "Multiview encode doesnot support multipass
feature");
+ CHECK(param->analysisSave || param->analysisLoad, "Multiview
encode doesnot support analysis save and load feature");
+ }
#endif
#if ENABLE_SCC_EXT
+ bool checkValid = false;
+
+ if (!!param->bEnableSCC)
+ {
+ checkValid = param->keyframeMax <= 1 || param->totalFrames == 1;
+ if (checkValid) x265_log(param, X265_LOG_WARNING, "intra
constraint flag must be 0 for SCC profiles. Disabling SCC \n");
+ checkValid = param->totalFrames == 1;
+ if (checkValid) x265_log(param, X265_LOG_WARNING,
"one-picture-only constraint flag shall be 0 for SCC profiles. Disabling
SCC \n");
+ const uint32_t bitDepthIdx = (param->internalBitDepth == 8 ? 0 :
(param->internalBitDepth == 10 ? 1 : (param->internalBitDepth == 12 ? 2 :
(param->internalBitDepth == 16 ? 3 : 4))));
+ const uint32_t chromaFormatIdx = uint32_t(param->internalCsp);
+ checkValid = !((bitDepthIdx > 2 || chromaFormatIdx > 3) ? false :
(validSCCProfileNames[0][bitDepthIdx][chromaFormatIdx] != NONE));
+ if (checkValid) x265_log(param, X265_LOG_WARNING, "Invalid
intra constraint flag, bit depth constraint flag and chroma format
constraint flag combination for a RExt profile. Disabling SCC \n");
+ if (checkValid)
+ param->bEnableSCC = 0;
+ }
CHECK(!!param->bEnableSCC&& param->rdLevel != 6, "Enabling scc
extension in x265 requires rdlevel of 6 ");
#endif
+
return check_failed;
}
diff --git a/source/common/slice.cpp b/source/common/slice.cpp
index 0c09df21b..5e5ad8a92 100644
--- a/source/common/slice.cpp
+++ b/source/common/slice.cpp
@@ -35,7 +35,6 @@ void Slice::createInterLayerReferencePictureSet(PicList&
picList, PicList& refPi
for (int i = 0; i < 1; i++)
{
- int layerIdRef = 0;// getRefPicLayerId(i);
Frame* refPic = picList.getPOC(m_poc, 0);
int viewIdCur = 0;
int viewIdZero = 1;
@@ -53,9 +52,12 @@ void Slice::createInterLayerReferencePictureSet(PicList&
picList, PicList& refPi
}
#endif
-void Slice::setRefPicList(PicList& picList, PicList& refPicSetInterLayer0,
PicList& refPicSetInterLayer1, int sLayerId)
+#if ENABLE_MULTIVIEW
+void Slice::setRefPicList(PicList& picList, int sLayerId, PicList&
refPicSetInterLayer0, PicList& refPicSetInterLayer1)
+#else
+void Slice::setRefPicList(PicList& picList, int sLayerId)
+#endif
{
- bool checkNumPocTotalCurr = m_param->bEnableSCC ? false : true;
if (m_sliceType == I_SLICE)
{
memset(m_refFrameList, 0, sizeof(m_refFrameList));
@@ -64,6 +66,7 @@ void Slice::setRefPicList(PicList& picList, PicList&
refPicSetInterLayer0, PicLi
m_numRefIdx[1] = m_numRefIdx[0] = 0;
#if ENABLE_SCC_EXT
+ bool checkNumPocTotalCurr = m_param->bEnableSCC ? false : true;
if (!checkNumPocTotalCurr)
{
if (m_rps.numberOfPictures == 0)
@@ -94,6 +97,7 @@ void Slice::setRefPicList(PicList& picList, PicList&
refPicSetInterLayer0, PicLi
#endif
#if ENABLE_SCC_EXT
+ bool checkNumPocTotalCurr = m_param->bEnableSCC ? false : true;
if (!checkNumPocTotalCurr && m_rps.numberOfPictures == 0)
{
Frame* prevPic = picList.getPOC(X265_MAX(0, m_poc - 1));
diff --git a/source/common/slice.h b/source/common/slice.h
index 041bc451e..0d0b2efb4 100644
--- a/source/common/slice.h
+++ b/source/common/slice.h
@@ -434,9 +434,11 @@ public:
void disableWeights();
- void setRefPicList(PicList& picList, PicList& refPicSetInterLayer0,
PicList& refPicSetInterLayer1, int viewId);
#if ENABLE_MULTIVIEW
+ void setRefPicList(PicList& picList, int viewId, PicList&
refPicSetInterLayer0, PicList& refPicSetInterLayer1);
void createInterLayerReferencePictureSet(PicList& picList, PicList&
refPicSetInterLayer0, PicList& refPicSetInterLayer1);
+#else
+ void setRefPicList(PicList& picList, int viewId);
#endif
#if ENABLE_SCC_EXT
diff --git a/source/encoder/analysis.cpp b/source/encoder/analysis.cpp
index d60747cc0..c99c796af 100644
--- a/source/encoder/analysis.cpp
+++ b/source/encoder/analysis.cpp
@@ -2870,7 +2870,11 @@ void Analysis::recodeCU(const CUData& parentCTU,
const CUGeom& cuGeom, int32_t q
continue;
MV mvp;
+#if (ENABLE_MULTIVIEW || ENABLE_SCC_EXT)
int numMvc =
mode.cu.getPMV(mode.interNeighbours, list, ref, mode.amvpCand[list][ref],
mvc, part, pu.puAbsPartIdx);
+#else
+ int numMvc =
mode.cu.getPMV(mode.interNeighbours, list, ref, mode.amvpCand[list][ref],
mvc);
+#endif
mvp =
mode.amvpCand[list][ref][mode.cu.m_mvpIdx[list][pu.puAbsPartIdx]];
if (m_param->interRefine == 1)
{
@@ -3413,7 +3417,7 @@ void Analysis::checkRDCostIntraBCMerge2Nx2N(Mode&
mergeIBC, const CUGeom& cuGeom
{
interDirNeighbours[ui] = 0;
}
- int org_qp;
+ int8_t org_qp;
int xPos = cu.m_cuPelX;
int yPos = cu.m_cuPelY;
int width = 1 << cu.m_log2CUSize[0];
@@ -3426,7 +3430,7 @@ void Analysis::checkRDCostIntraBCMerge2Nx2N(Mode&
mergeIBC, const CUGeom& cuGeom
cu.roundMergeCandidates(cMvFieldNeighbours, numValidMergeCand);
restrictBipredMergeCand(&cu, 0, cMvFieldNeighbours,
interDirNeighbours, numValidMergeCand);
- for (uint32_t mergeCand = 0; mergeCand < numValidMergeCand;
++mergeCand)
+ for (uint8_t mergeCand = 0; mergeCand < numValidMergeCand; ++mergeCand)
{
if (interDirNeighbours[mergeCand] != 1)
{
@@ -3533,7 +3537,11 @@ void Analysis::checkInter_rd0_4(Mode& interMode,
const CUGeom& cuGeom, PartSize
}
}
+#if ENABLE_SCC_EXT
void Analysis::checkInter_rd5_6(Mode& interMode, const CUGeom& cuGeom,
PartSize partSize, uint32_t refMask[2], MV* iMVCandList)
+#else
+void Analysis::checkInter_rd5_6(Mode& interMode, const CUGeom& cuGeom,
PartSize partSize, uint32_t refMask[2])
+#endif
{
interMode.initCosts();
interMode.cu.setPartSizeSubParts(partSize);
@@ -3570,7 +3578,11 @@ void Analysis::checkInter_rd5_6(Mode& interMode,
const CUGeom& cuGeom, PartSize
}
}
+#if ENABLE_SCC_EXT
predInterSearch(interMode, cuGeom, m_csp != X265_CSP_I400 &&
m_frame->m_fencPic->m_picCsp != X265_CSP_I400, refMask, iMVCandList);
+#else
+ predInterSearch(interMode, cuGeom, m_csp != X265_CSP_I400 &&
m_frame->m_fencPic->m_picCsp != X265_CSP_I400, refMask);
+#endif
/* predInterSearch sets interMode.sa8dBits, but this is ignored */
encodeResAndCalcRdInterCU(interMode, cuGeom);
diff --git a/source/encoder/analysis.h b/source/encoder/analysis.h
index 586e50ef0..e5fa57367 100644
--- a/source/encoder/analysis.h
+++ b/source/encoder/analysis.h
@@ -195,11 +195,14 @@ protected:
/* measure inter options */
void checkInter_rd0_4(Mode& interMode, const CUGeom& cuGeom, PartSize
partSize, uint32_t refmask[2]);
- void checkInter_rd5_6(Mode& interMode, const CUGeom& cuGeom, PartSize
partSize, uint32_t refmask[2], MV* iMVCandList = NULL);
-
+#if !ENABLE_SCC_EXT
+ void checkInter_rd5_6(Mode& interMode, const CUGeom& cuGeom, PartSize
partSize, uint32_t refmask[2]);
+#endif
void checkBidir2Nx2N(Mode& inter2Nx2N, Mode& bidir2Nx2N, const CUGeom&
cuGeom);
#if ENABLE_SCC_EXT
+ void checkInter_rd5_6(Mode& interMode, const CUGeom& cuGeom, PartSize
partSize, uint32_t refmask[2], MV* iMVCandList = NULL);
+
void checkRDCostIntraBCMerge2Nx2N(Mode& merge, const CUGeom& cuGeom);
void checkIntraBC_rd5_6(Mode& intraBCMode, const CUGeom& cuGeom,
PartSize ePartSize, bool testOnlyPred, bool bUse1DSearchFor8x8, IBC& ibc,
MV* iMVCandList = NULL);
#endif
diff --git a/source/encoder/dpb.cpp b/source/encoder/dpb.cpp
index caf73ad6d..ae26c5518 100644
--- a/source/encoder/dpb.cpp
+++ b/source/encoder/dpb.cpp
@@ -295,7 +295,11 @@ void DPB::prepareEncode(Frame *newFrame)
else
#endif
slice->m_numRefIdx[1] = X265_MIN(newFrame->m_param->bBPyramid ? 2
: 1, slice->m_rps.numberOfPositivePictures);
- slice->setRefPicList(m_picList, newFrame->refPicSetInterLayer0,
newFrame->refPicSetInterLayer1, layer);
+#if ENABLE_MULTIVIEW
+ slice->setRefPicList(m_picList, layer, newFrame->refPicSetInterLayer0,
newFrame->refPicSetInterLayer1);
+#else
+ slice->setRefPicList(m_picList, layer);
+#endif
X265_CHECK(slice->m_sliceType != B_SLICE || slice->m_numRefIdx[1], "B
slice without L1 references (non-fatal)\n");
@@ -419,7 +423,7 @@ void DPB::computeRPS(int curPoc, int tempId, bool
isRAP, RPS * rps, unsigned int
if ((!m_bTemporalSublayer || (iterPic->m_tempLayer <= tempId))
&& ((m_lastIDR >= curPoc) || (m_lastIDR <= iterPic->m_poc)))
{
#if ENABLE_MULTIVIEW
- if (iterPic->m_param->numViews > 1 && layer && numNeg
== iterPic->m_param->maxNumReferences - 1 && (iterPic->m_poc - curPoc) < 0)
+ if (iterPic->m_param->numViews > 1 && layer && numNeg
== (uint8_t)(iterPic->m_param->maxNumReferences - 1) && (iterPic->m_poc -
curPoc) < 0)
{
iterPic = iterPic->m_next;
continue;
diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp
index 6533fc3c6..f5de400a4 100644
--- a/source/encoder/encoder.cpp
+++ b/source/encoder/encoder.cpp
@@ -1986,7 +1986,7 @@ int Encoder::encode(const x265_picture* pic_in,
x265_picture* pic_out)
/* Free up inputPic->analysisData since it has already
been used */
if ((m_param->analysisLoad && !m_param->analysisSave) ||
((m_param->bAnalysisType == AVC_INFO) && slice->m_sliceType != I_SLICE))
x265_free_analysis_data(m_param,
&outFrame->m_analysisData);
- if (pic_out && (&pic_out[sLayer]))
+ if (pic_out)
{
PicYuv* recpic = outFrame->m_reconPic[0];
pic_out[sLayer].poc = slice->m_poc;
@@ -2069,7 +2069,7 @@ int Encoder::encode(const x265_picture* pic_in,
x265_picture* pic_out)
}
if (m_param->rc.bStatWrite &&
(m_param->analysisMultiPassRefine || m_param->analysisMultiPassDistortion))
{
- if (pic_out && (&pic_out[sLayer]))
+ if (pic_out)
{
pic_out[sLayer].analysisData.poc =
pic_out[sLayer].poc;
pic_out[sLayer].analysisData.interData =
outFrame->m_analysisData.interData;
@@ -2163,7 +2163,7 @@ int Encoder::encode(const x265_picture* pic_in,
x265_picture* pic_out)
if (m_param->rc.bStatWrite)
if
(m_rateControl->writeRateControlFrameStats(outFrame, &curEncoder->m_rce))
m_aborted = true;
- if (pic_out && (&pic_out[sLayer]))
+ if (pic_out)
{
/* m_rcData is allocated for every frame */
pic_out[sLayer].rcData = outFrame->m_rcData;
@@ -2197,7 +2197,7 @@ int Encoder::encode(const x265_picture* pic_in,
x265_picture* pic_out)
}
/* Allow this frame to be recycled if no frame encoders
are using it for reference */
- if (!pic_out || !(&pic_out[sLayer]))
+ if (!pic_out)
{
ATOMIC_DEC(&outFrame->m_countRefEncoders);
m_dpb->recycleUnreferenced();
@@ -2473,14 +2473,14 @@ int Encoder::encode(const x265_picture* pic_in,
x265_picture* pic_out)
switch (m_param->selectiveSAO)
{
case 3: if (!IS_REFERENCED(frameEnc[layer]))
- slice->m_bUseSao =
curEncoder->m_frameFilter.m_useSao = 0;
- break;
+ slice->m_bUseSao =
curEncoder->m_frameFilter.m_useSao = 0;
+ break;
case 2: if (!!m_param->bframes && slice->m_sliceType
== B_SLICE)
- slice->m_bUseSao =
curEncoder->m_frameFilter.m_useSao = 0;
- break;
+ slice->m_bUseSao =
curEncoder->m_frameFilter.m_useSao = 0;
+ break;
case 1: if (slice->m_sliceType != I_SLICE)
- slice->m_bUseSao =
curEncoder->m_frameFilter.m_useSao = 0;
- break;
+ slice->m_bUseSao =
curEncoder->m_frameFilter.m_useSao = 0;
+ break;
}
}
else
@@ -3369,7 +3369,11 @@ void Encoder::getStreamHeaders(NALList& list,
Entropy& sbacCoder, Bitstream& bs)
/* headers for start of bitstream */
bs.resetBits();
+#if ENABLE_ALPHA || ENABLE_MULTIVIEW
sbacCoder.codeVPS(m_vps, m_sps);
+#else
+ sbacCoder.codeVPS(m_vps);
+#endif
bs.writeByteAlignment();
list.serialize(NAL_UNIT_VPS, bs);
@@ -3503,7 +3507,7 @@ void Encoder::initVPS(VPS *vps)
if (m_param->numScalableLayers > 1)
{
vps->vps_extension_flag = true;
- int dimIdLen = 0, auxDimIdLen = 0, maxAuxId = 1, auxId[2] = { 0,1
};
+ uint8_t dimIdLen = 0, auxDimIdLen = 0, maxAuxId = 1, auxId[2] = {
0,1 };
vps->splitting_flag = false;
memset(vps->m_scalabilityMask, 0, sizeof(vps->m_scalabilityMask));
memset(vps->m_layerIdInNuh, 0, sizeof(vps->m_layerIdInNuh));
@@ -3524,7 +3528,7 @@ void Encoder::initVPS(VPS *vps)
}
vps->m_dimensionIdLen[0] = dimIdLen;
- for (int i = 1; i < m_param->numScalableLayers; i++)
+ for (uint8_t i = 1; i < m_param->numScalableLayers; i++)
{
vps->m_layerIdInNuh[i] = i;
vps->m_dimensionId[i][0] = i;
diff --git a/source/encoder/entropy.cpp b/source/encoder/entropy.cpp
index 834d0014b..18978f26e 100644
--- a/source/encoder/entropy.cpp
+++ b/source/encoder/entropy.cpp
@@ -230,7 +230,11 @@ Entropy::Entropy()
X265_CHECK(sizeof(m_contextState) >= sizeof(m_contextState[0]) *
MAX_OFF_CTX_MOD, "context state table is too small\n");
}
+#if ENABLE_ALPHA || ENABLE_MULTIVIEW
void Entropy::codeVPS(const VPS& vps, const SPS& sps)
+#else
+void Entropy::codeVPS(const VPS& vps)
+#endif
{
int maxLayers = (vps.m_numLayers > 1 || vps.m_numViews > 1) + 1;
WRITE_CODE(0, 4, "vps_video_parameter_set_id");
@@ -305,7 +309,7 @@ void Entropy::codeVPS(const VPS& vps, const SPS& sps)
WRITE_CODE(vps.ptl.levelIdc, 8, "general_level_idc");
if (vps.maxTempSubLayers > 1)
{
- for (int i = 0; i < vps.maxTempSubLayers - 1; i++)
+ for (uint32_t i = 0; i < vps.maxTempSubLayers - 1; i++)
{
WRITE_FLAG(0, "sub_layer_profile_present_flag[i]");
WRITE_FLAG(0, "sub_layer_level_present_flag[i]");
@@ -389,7 +393,7 @@ void Entropy::codeVPS(const VPS& vps, const SPS& sps)
for (int i = 1; i < vps.m_vpsNumLayerSetsMinus1 + 1; i++)
{
WRITE_FLAG(vps.maxTempSubLayers > 1,
"sub_layer_flag_info_present_flag");
- for (int j = 0; j < vps.maxTempSubLayers ; j++)
+ for (uint32_t j = 0; j < vps.maxTempSubLayers ; j++)
{
if(j > 0)
WRITE_FLAG(vps.maxTempSubLayers > 1,
"sub_layer_dpb_info_present_flag");
@@ -474,7 +478,7 @@ void Entropy::codeVPS(const VPS& vps, const SPS& sps)
for (int i = 1; i < vps.m_vpsNumLayerSetsMinus1 + 1; i++)
{
WRITE_FLAG(vps.maxTempSubLayers > 1,
"sub_layer_flag_info_present_flag");
- for (int j = 0; j < vps.maxTempSubLayers; j++)
+ for (uint32_t j = 0; j < vps.maxTempSubLayers; j++)
{
if (j > 0)
WRITE_FLAG(vps.maxTempSubLayers > 1,
"sub_layer_dpb_info_present_flag");
diff --git a/source/encoder/entropy.h b/source/encoder/entropy.h
index 4271701c7..fd6fa8999 100644
--- a/source/encoder/entropy.h
+++ b/source/encoder/entropy.h
@@ -141,7 +141,11 @@ public:
void loadIntraDirModeLuma(const Entropy& src);
void copyState(const Entropy& other);
+#if ENABLE_ALPHA || ENABLE_MULTIVIEW
void codeVPS(const VPS& vps, const SPS& sps);
+#else
+ void codeVPS(const VPS& vps);
+#endif
void codeSPS(const SPS& sps, const ScalingList& scalingList, const
ProfileTierLevel& ptl, int layer = 0);
void codePPS( const PPS& pps, bool filerAcross, int iPPSInitQpMinus26,
int layer = 0);
void codeVUI(const VUI& vui, int maxSubTLayers, bool
bEmitVUITimingInfo, bool bEmitVUIHRDInfo, int layer = 0);
diff --git a/source/encoder/frameencoder.cpp
b/source/encoder/frameencoder.cpp
index e21dbfa85..b6f2d6ed1 100644
--- a/source/encoder/frameencoder.cpp
+++ b/source/encoder/frameencoder.cpp
@@ -668,8 +668,8 @@ void FrameEncoder::compressFrame(int layer)
{
int numAQPartInWidth =
(m_frame[0]->m_fencPic->m_picWidth + aqPartWidth - 1) / aqPartWidth;
int numAQPartInHeight =
(m_frame[0]->m_fencPic->m_picHeight + aqPartHeight - 1) / aqPartHeight;
- memset(m_frame[layer]->m_lowres.pAQLayer[d].dQpOffset,
0.0, sizeof(double)*numAQPartInWidth* numAQPartInHeight);
-
memset(m_frame[layer]->m_lowres.pAQLayer[d].dCuTreeOffset, 0.0,
sizeof(double)* numAQPartInWidth* numAQPartInHeight);
+ memset(m_frame[layer]->m_lowres.pAQLayer[d].dQpOffset,
0, sizeof(double)*numAQPartInWidth* numAQPartInHeight);
+
memset(m_frame[layer]->m_lowres.pAQLayer[d].dCuTreeOffset, 0,
sizeof(double)* numAQPartInWidth* numAQPartInHeight);
}
}
}
@@ -2348,6 +2348,7 @@ void
FrameEncoder::readAomModel(AomFilmGrainCharacteristics* m_aomFilmGrain, FIL
{
char const* errorMessage = "Error reading Aom FilmGrain
characteristics\n";
AomFilmGrain m_afg;
+ m_afg.m_chroma_scaling_from_luma = 0;
x265_fread((char*)&m_aomFilmGrain->m_apply_grain, sizeof(int32_t), 1,
Aomfilmgrain, errorMessage);
x265_fread((char*)&m_aomFilmGrain->m_grain_seed, sizeof(uint16_t), 1,
Aomfilmgrain, errorMessage);
x265_fread((char*)&m_aomFilmGrain->m_update_grain, sizeof(int32_t), 1,
Aomfilmgrain, errorMessage);
@@ -2454,7 +2455,7 @@ void FrameEncoder::vmafFrameLevelScore()
Frame** FrameEncoder::getEncodedPicture(NALList& output)
{
- if (m_frame && m_frame[0])
+ if (m_frame[0] && (m_param->numLayers <= 1 || m_frame[1]))
{
/* block here until worker thread completes */
m_done.wait();
diff --git a/source/encoder/level.cpp b/source/encoder/level.cpp
index defcc7950..c2f840325 100644
--- a/source/encoder/level.cpp
+++ b/source/encoder/level.cpp
@@ -60,33 +60,6 @@ LevelSpec levels[] =
{ MAX_UINT, MAX_UINT, MAX_UINT, MAX_UINT, MAX_UINT, MAX_UINT, 1,
Level::LEVEL8_5, "8.5", 85 },
};
-#if ENABLE_SCC_EXT
-enum SCCProfileName
-{
- NONE = 0,
- // The following are SCC profiles, which would map to the MAINSCC
profile idc.
- // The enumeration indicates the bit-depth constraint in the bottom 2
digits
- // the chroma format in the next digit
- // the intra constraint in the next digit
- // If it is a SCC profile there is a '2' for
the next digit.
- // If it is a highthroughput , there is a
'2' for the top digit else '1' for the top digit
- SCC_MAIN = 121108,
- SCC_MAIN_10 = 121110,
- SCC_MAIN_444 = 121308,
- SCC_MAIN_444_10 = 121310,
-};
-
-static const SCCProfileName validSCCProfileNames[1][4/* bit depth
constraint 8=0, 10=1, 12=2, 14=3*/][4/*chroma format*/] =
-{
- {
- { NONE, SCC_MAIN, NONE, SCC_MAIN_444
}, // 8-bit intra for 400, 420, 422 and 444
- { NONE, SCC_MAIN_10, NONE, SCC_MAIN_444_10
}, // 10-bit intra for 400, 420, 422 and 444
- { NONE, NONE, NONE, NONE
}, // 12-bit intra for 400, 420, 422 and 444
- { NONE, NONE, NONE, NONE
} // 16-bit intra for 400, 420, 422 and 444
- },
-};
-#endif
-
static inline int _confirm(x265_param* param, bool bflag, const char*
message)
{
if (!bflag)
@@ -282,24 +255,6 @@ void determineLevel(const x265_param ¶m, VPS& vps)
break;
}
-#if ENABLE_SCC_EXT
- x265_param m_param = param;
-#define CHECK(expr, msg) check_failed |= _confirm(&m_param, expr, msg)
- int check_failed = 0; /* abort if there is a fatal configuration
problem */
-
- if (vps.ptl.profileIdc[0] == Profile::MAINSCC)
- {
- CHECK(vps.ptl.lowerBitRateConstraintFlag == false &&
vps.ptl.intraConstraintFlag == false, "The lowerBitRateConstraint flag
cannot be false when intraConstraintFlag is false");
- CHECK(param.bEnableSCC && !(vps.ptl.profileIdc[0] ==
Profile::MAINSCC), "UseIntraBlockCopy must not be enabled unless the SCC
profile is being used.");
- CHECK(vps.ptl.intraConstraintFlag, "intra constraint flag must be
0 for SCC profiles");
- CHECK(vps.ptl.onePictureOnlyConstraintFlag, "one-picture-only
constraint flag shall be 0 for SCC profiles");
- const uint32_t bitDepthIdx = (vps.ptl.bitDepthConstraint == 8 ? 0
: (vps.ptl.bitDepthConstraint == 10 ? 1 : (vps.ptl.bitDepthConstraint == 12
? 2 : (vps.ptl.bitDepthConstraint == 16 ? 3 : 4))));
- const uint32_t chromaFormatIdx =
uint32_t(vps.ptl.chromaFormatConstraint);
- const bool bValidProfile = (bitDepthIdx > 2 || chromaFormatIdx >
3) ? false : (validSCCProfileNames[0][bitDepthIdx][chromaFormatIdx] !=
NONE);
- CHECK(!bValidProfile, "Invalid intra constraint flag, bit depth
constraint flag and chroma format constraint flag combination for a RExt
profile");
- }
-#endif
-
static const char* profiles[] = { "None", "Main", "Main 10", "Main
Still Picture", "RExt", "", "", "", "", "Main Scc" };
static const char *tiers[] = { "Main", "High" };
diff --git a/source/encoder/nal.cpp b/source/encoder/nal.cpp
index 093c91016..fe9bb9086 100644
--- a/source/encoder/nal.cpp
+++ b/source/encoder/nal.cpp
@@ -114,7 +114,7 @@ void NALList::serialize(NalUnitType nalUnitType, const
Bitstream& bs, int layerI
* nuh_reserved_zero_6bits 6-bits
* nuh_temporal_id_plus1 3-bits */
out[bytes++] = (uint8_t)nalUnitType << 1;
- out[bytes++] = (layerId << 3) | (temporalID);
+ out[bytes++] = (uint8_t)((layerId << 3) | (temporalID));
/* 7.4.1 ...
* Within the NAL unit, the following three-byte sequences shall not
occur at
diff --git a/source/encoder/search.cpp b/source/encoder/search.cpp
index ebd85dd52..e398843a8 100644
--- a/source/encoder/search.cpp
+++ b/source/encoder/search.cpp
@@ -2124,7 +2124,11 @@ void Search::singleMotionEstimation(Search& master,
Mode& interMode, const Predi
// 12 mv candidates including lowresMV
MV mvc[(MD_ABOVE_LEFT + 1) * 2 + 2];
+#if (ENABLE_MULTIVIEW || ENABLE_SCC_EXT)
int numMvc = interMode.cu.getPMV(interMode.interNeighbours, list, ref,
interMode.amvpCand[list][ref], mvc, 0, pu.puAbsPartIdx);
+#else
+ int numMvc = interMode.cu.getPMV(interMode.interNeighbours, list, ref,
interMode.amvpCand[list][ref], mvc);
+#endif
const MV* amvp = interMode.amvpCand[list][ref];
int mvpIdx = selectMVP(interMode.cu, pu, amvp, list, ref);
@@ -2213,7 +2217,11 @@ void Search::searchMV(Mode& interMode, int list, int
ref, MV& outmv, MV mvp[3],
}
}
/* find the best inter prediction for each PU of specified mode */
+#if ENABLE_SCC_EXT
void Search::predInterSearch(Mode& interMode, const CUGeom& cuGeom, bool
bChromaMC, uint32_t refMasks[2], MV* iMVCandList)
+#else
+void Search::predInterSearch(Mode& interMode, const CUGeom& cuGeom, bool
bChromaMC, uint32_t refMasks[2])
+#endif
{
ProfileCUScope(interMode.cu, motionEstimationElapsedTime,
countMotionEstimate);
@@ -2285,7 +2293,11 @@ void Search::predInterSearch(Mode& interMode, const
CUGeom& cuGeom, bool bChroma
#endif
bits += getTUBits(ref, numIdx);
+#if (ENABLE_MULTIVIEW || ENABLE_SCC_EXT)
int numMvc = cu.getPMV(interMode.interNeighbours, list,
ref, interMode.amvpCand[list][ref], mvc, puIdx, pu.puAbsPartIdx);
+#else
+ int numMvc = cu.getPMV(interMode.interNeighbours, list,
ref, interMode.amvpCand[list][ref], mvc);
+#endif
const MV* amvp = interMode.amvpCand[list][ref];
int mvpIdx = selectMVP(cu, pu, amvp, list, ref);
MV mvmin, mvmax, outmv, mvp;
@@ -2453,7 +2465,11 @@ void Search::predInterSearch(Mode& interMode, const
CUGeom& cuGeom, bool bChroma
uint32_t bits = m_listSelBits[list] + MVP_IDX_BITS;
bits += getTUBits(ref, numIdx);
+#if (ENABLE_MULTIVIEW || ENABLE_SCC_EXT)
int numMvc = cu.getPMV(interMode.interNeighbours,
list, ref, interMode.amvpCand[list][ref], mvc, puIdx, pu.puAbsPartIdx);
+#else
+ int numMvc = cu.getPMV(interMode.interNeighbours,
list, ref, interMode.amvpCand[list][ref], mvc);
+#endif
const MV* amvp = interMode.amvpCand[list][ref];
int mvpIdx = selectMVP(cu, pu, amvp, list, ref);
@@ -3490,10 +3506,10 @@ void Search::setIntraSearchRange(Mode& intraBCMode,
MV& pred, int puIdx, int roi
CUData& cu = intraBCMode.cu;
cu.clipMv(mvPred);
int srLeft, srRight, srTop, srBottom;
- int width, height;
+ int puWidth, puHeight;
uint32_t partAddr;
- cu.getPartIndexAndSize(puIdx, partAddr, width, height);
+ cu.getPartIndexAndSize(puIdx, partAddr, puWidth, puHeight);
const uint32_t lcuWidth = m_param->maxCUSize;
const uint32_t lcuHeight = m_param->maxCUSize;
@@ -3520,8 +3536,8 @@ void Search::setIntraSearchRange(Mode& intraBCMode,
MV& pred, int puIdx, int roi
pTestCU = pTestCU->m_cuLeft, width += lcuWidth)
{
}
- uint32_t maxXsr = (cuPelX % lcuWidth) + X265_MIN(maxWidth, width);
- uint32_t maxYsr = cuPelY % lcuHeight;
+ int maxXsr = (cuPelX % lcuWidth) + X265_MIN(maxWidth, width);
+ int maxYsr = cuPelY % lcuHeight;
if (cu.m_chromaFormat == X265_CSP_I420 || cu.m_chromaFormat ==
X265_CSP_I422) maxXsr &= ~0x4;
if (cu.m_chromaFormat == X265_CSP_I420)
maxYsr &= ~0x4;
@@ -3638,7 +3654,7 @@ bool Search::predIntraBCSearch(Mode& intraBCMode,
const CUGeom& cuGeom, bool bCh
int mrgIdxTemp = -1;
int xCUStart = cu.m_cuPelX;
int yCUStart = cu.m_cuPelY;
- int xStartInCU, yStartInCU;
+ int xStartInCU = 0, yStartInCU = 0;
if (ePartSize == SIZE_2Nx2N)
xStartInCU = yStartInCU = 0;
else if (ePartSize == SIZE_2NxN)
@@ -3664,7 +3680,6 @@ bool Search::predIntraBCSearch(Mode& intraBCMode,
const CUGeom& cuGeom, bool bCh
cu.setPURefIdx(1, REF_NOT_VALID, pu.puAbsPartIdx, puIdx);
cu.setPUInterDir(1, pu.puAbsPartIdx, puIdx);
motionCompensation(cu, pu, tmpPredYuv, 1, 1);
- int temp;
for (uint32_t ch = TEXT_LUMA; ch < MAX_NUM_COMPONENT; ch++)
{
int tempHeight, tempWidth;
@@ -3816,9 +3831,6 @@ bool Search::predIntraBCSearch(Mode& intraBCMode,
const CUGeom& cuGeom, bool bCh
cu.m_mvd[0][pu.puAbsPartIdx] = mvd;
cu.m_mvpIdx[0][pu.puAbsPartIdx] = (uint8_t)mvpIdxBest;
-
- cu.m_mvd[1][pu.puAbsPartIdx] = zeroMv;
- cu.m_mvpIdx[1][pu.puAbsPartIdx] = REF_NOT_VALID;
}
else
{
@@ -3939,7 +3951,7 @@ bool Search::predMixedIntraBCInterSearch(Mode&
intraBCMixedMode, const CUGeom& c
int mrgIdxTemp = -1;
int xCUStart = cu.m_cuPelX;
int yCUStart = cu.m_cuPelY;
- int xStartInCU, yStartInCU;
+ int xStartInCU = 0, yStartInCU = 0;
if (ePartSize == SIZE_2Nx2N)
xStartInCU = yStartInCU = 0;
else if (ePartSize == SIZE_2NxN)
diff --git a/source/encoder/search.h b/source/encoder/search.h
index f12ac02e0..df7ad90dd 100644
--- a/source/encoder/search.h
+++ b/source/encoder/search.h
@@ -319,7 +319,9 @@ public:
void encodeIntraInInter(Mode& intraMode, const CUGeom& cuGeom);
// estimation inter prediction (non-skip)
- void predInterSearch(Mode& interMode, const CUGeom& cuGeom, bool
bChromaMC, uint32_t masks[2], MV* iMVCandList = NULL);
+#if !ENABLE_SCC_EXT
+ void predInterSearch(Mode& interMode, const CUGeom& cuGeom, bool
bChromaMC, uint32_t masks[2]);
+#endif
void searchMV(Mode& interMode, int list, int ref, MV& outmv, MV
mvp[3], int numMvc, MV* mvc);
// encode residual and compute rd-cost for inter mode
void encodeResAndCalcRdInterCU(Mode& interMode, const CUGeom&
cuGeom);
@@ -340,6 +342,7 @@ public:
MV getLowresMV(const CUData& cu, const PredictionUnit& pu, int list,
int ref);
#if ENABLE_SCC_EXT
+ void predInterSearch(Mode& interMode, const CUGeom& cuGeom, bool
bChromaMC, uint32_t masks[2], MV* iMVCandList = NULL);
bool predIntraBCSearch(Mode& intraBCMode, const CUGeom& cuGeom,
bool bChromaMC, PartSize ePartSize, bool testOnlyPred, bool
bUse1DSearchFor8x8, IBC& ibc);
void intraBlockCopyEstimate(Mode& intraBCMode, const CUGeom&
cuGeom, int puIdx, MV* pred, MV& mv, uint32_t& cost, bool testOnlyPred,
bool bUse1DSearchFor8x8, IBC& ibc);
void setIntraSearchRange(Mode& intraBCMode, MV& pred, int puIdx,
int roiWidth, int roiHeight, MV& searchRangeLT, MV& searchRangeRB);
diff --git a/source/encoder/sei.h b/source/encoder/sei.h
index 1fa4dc69b..a33cb94e9 100644
--- a/source/encoder/sei.h
+++ b/source/encoder/sei.h
@@ -360,14 +360,17 @@ class SEIThreeDimensionalReferenceDisplaysInfo :
public SEI
{
public:
SEIThreeDimensionalReferenceDisplaysInfo()
+ : m_numRefDisplaysMinus1(0),
+ m_refViewingDistanceFlag(false),
+ m_additionalShiftPresentFlag(false)
{
m_payloadType = THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO;
m_payloadSize = 0;
}
- int m_numRefDisplaysMinus1 = 0;
- bool m_refViewingDistanceFlag = false;
- bool m_additionalShiftPresentFlag = false;
+ int m_numRefDisplaysMinus1;
+ bool m_refViewingDistanceFlag;
+ bool m_additionalShiftPresentFlag;
void writeSEI(const SPS&)
{
WRITE_UVLC(31, "prec_ref_display_width");
@@ -432,26 +435,66 @@ public:
}
};
+static int temp_sign_r[3][3] = { {0,1,0},{1,0,0},{0,1,1} };
+static int temp_exponent_r[3][3] = { {10,20,11},{10,5,11},{2,20,11} };
+static int temp_mantissa_r[3][3] = { {4,9,1},{0,3,4},{3,3,7} };
+static int temp_sign_t[1][3] = { { 0,1,0 } };
+static int temp_exponent_t[1][3] = { { 0,10,5 } };
+static int temp_mantissa_t[1][3] = { { 1,8,9 } };
+static int temp_length_mantissa_r[3][3] = { {10,20,11},{10,5,11},{2,20,11}
};
+static int temp_length_mantissa_t[1][3] = { { 1,10,5 } };
+
class SEIMultiviewAcquisitionInfo : public SEI
{
public:
SEIMultiviewAcquisitionInfo()
+ :sign_r(),
+ exponent_r(),
+ mantissa_r(),
+ sign_t(),
+ exponent_t(),
+ mantissa_t(),
+ length_mantissa_r(),
+ length_mantissa_t(),
+ m_intrinsicParamFlag(true),
+ m_extrinsicParamFlag(true),
+ m_intrinsicParamsEqualFlag(true)
{
m_payloadType = MULTIVIEW_ACQUISITION_INFO;
m_payloadSize = 0;
+
+ for (int i = 0; i <= 0; i++)
+ {
+ for (int j = 0; j <= 2; j++) /* row */
+ {
+ for (int k = 0; k <= 2; k++) /* column */
+ {
+ temp_sign_r[j][k] = sign_r[j][k];
+ temp_exponent_r[j][k] = exponent_r[j][k];
+ temp_mantissa_r[j][k] = mantissa_r[j][k];
+ temp_length_mantissa_r[j][k] = length_mantissa_r[j][k];
+ }
+ temp_sign_t[i][j] = sign_t[i][j];
+ temp_exponent_t[i][j] = exponent_t[i][j];
+ temp_mantissa_t[i][j] = mantissa_t[i][j];
+ temp_length_mantissa_t[i][j] = length_mantissa_t[i][j];
+ }
+ }
}
- int sign_r[3][3] = { {0,1,0},{1,0,0},{0,1,1} };
- int exponent_r[3][3] = { {10,20,11},{10,5,11},{2,20,11} };
- int mantissa_r[3][3] = { {4,9,1},{0,3,4},{3,3,7} };
- int sign_t[1][3] = { 0,1,0 };
- int exponent_t[1][3] = { 0,10,5 };
- int mantissa_t[1][3] = { 1,8,9 };
- int lenght_mantissa_r[3][3] = { {10,20,11},{10,5,11},{2,20,11} };
- int length_mantissa_t[1][3] = { 1,10,5 };
- bool m_intrinsicParamFlag = true;
- bool m_extrinsicParamFlag = true;
- bool m_intrinsicParamsEqualFlag = true;
+ int sign_r[3][3];
+ int exponent_r[3][3];
+ int mantissa_r[3][3];
+ int sign_t[1][3];
+ int exponent_t[1][3];
+ int mantissa_t[1][3];
+ int length_mantissa_r[3][3];
+ int length_mantissa_t[1][3];
+
+ bool m_intrinsicParamFlag;
+ bool m_extrinsicParamFlag;
+ bool m_intrinsicParamsEqualFlag;
+
void writeSEI(const SPS& sps)
{
WRITE_FLAG(m_intrinsicParamFlag, "intrinsic_param_flag");
@@ -495,7 +538,7 @@ public:
{
WRITE_FLAG(sign_r[j][k], "sign_r");
WRITE_CODE(exponent_r[j][k], 6, "exponent_r");
- WRITE_CODE(mantissa_r[j][k],
lenght_mantissa_r[j][k], "mantissa_r");
+ WRITE_CODE(mantissa_r[j][k],
length_mantissa_r[j][k], "mantissa_r");
}
WRITE_FLAG(sign_t[i][j], "sign_t");
WRITE_CODE(exponent_t[i][j], 6, "exponent_t");
diff --git a/source/x265.h b/source/x265.h
index c5082b6a9..13c4a47e2 100644
--- a/source/x265.h
+++ b/source/x265.h
@@ -637,8 +637,6 @@ typedef enum
#if ENABLE_MULTIVIEW
#define MAX_VIEWS 2
-#define MAX_VPS_NUM_SCALABILITY_TYPES 16
-#define MAX_VPS_LAYER_ID_PLUS1 MAX_VIEWS
#define MULTIVIEW_SCALABILITY_IDX 1
#else
#define MAX_VIEWS 1
@@ -646,14 +644,15 @@ typedef enum
#if ENABLE_ALPHA
#define MAX_SCALABLE_LAYERS 2
-#define MAX_VPS_NUM_SCALABILITY_TYPES 16
-#define MAX_VPS_LAYER_ID_PLUS1 MAX_SCALABLE_LAYERS
#else
#define MAX_SCALABLE_LAYERS 1
#endif
#if ENABLE_ALPHA || ENABLE_MULTIVIEW
#define MAX_LAYERS 2
+#define MAX_VPS_NUM_SCALABILITY_TYPES 16
+#define MAX_VPS_LAYER_ID_PLUS1 MAX_LAYERS
+
#else
#define MAX_LAYERS 1
#endif
diff --git a/source/x265cli.cpp b/source/x265cli.cpp
index c6812459b..9f55b017d 100755
--- a/source/x265cli.cpp
+++ b/source/x265cli.cpp
@@ -1360,6 +1360,7 @@ namespace X265_NS {
while (isspace((unsigned char)*argLine)) argLine++;
char* start = strchr(argLine, '-');
int argCount = 0;
+ char flag[] = "true";
char** args = (char**)malloc(256 * sizeof(char*));
//Adding a dummy string to avoid file parsing error
args[argCount++] = (char*)"x265";
@@ -1427,7 +1428,7 @@ namespace X265_NS {
name = nameBuf;
}
if (!optarg)
- optarg = "true";
+ optarg = flag;
else if (optarg[0] == '=')
optarg++;
#define OPT(STR) else if (!strcmp(name, STR))
--
2.36.0.windows.1
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20241009/aa173185/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Fix-build-warnings-for-MV-HEVC-Alpha-SCC-and-Code-cl.patch
Type: application/octet-stream
Size: 49415 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20241009/aa173185/attachment-0001.obj>
More information about the x265-devel
mailing list