[x265] [PATCH] Fix segmentation fault in scc
Karam Singh
karam.singh at multicorewareinc.com
Fri Oct 4 07:48:02 UTC 2024
This patch has been pushed to the master branch.
*__________________________*
*Karam Singh*
*Ph.D. IIT Guwahati*
Senior Software (Video Coding) Engineer
Mobile: +91 8011279030
Block 9A, 6th floor, DLF Cyber City
Manapakkam, Chennai 600 089
On Fri, Sep 27, 2024 at 3:33 PM Anusuya Kumarasamy <
anusuya.kumarasamy at multicorewareinc.com> wrote:
> From 03db2eab9c3d38d3d9c2f5305a2d42ee2ca2035f Mon Sep 17 00:00:00 2001
> From: AnusuyaKumarasamy <anusuya.kumarasamy at multicorewareinc.com>
> Date: Fri, 20 Sep 2024 16:31:31 +0530
> Subject: [PATCH 2/5] Fix segmentation fault in scc
>
> ---
> source/common/cudata.cpp | 6 +++---
> source/encoder/analysis.cpp | 2 +-
> source/encoder/encoder.cpp | 6 ++++++
> source/encoder/search.cpp | 8 ++++----
> 4 files changed, 14 insertions(+), 8 deletions(-)
>
> diff --git a/source/common/cudata.cpp b/source/common/cudata.cpp
> index 23ceeaeaf..ae1fb4694 100644
> --- a/source/common/cudata.cpp
> +++ b/source/common/cudata.cpp
> @@ -2378,9 +2378,9 @@ void CUData::getIntraBCMVPsEncOnly(uint32_t
> absPartIdx, MV* MvPred, int& nbPred,
> uint32_t m_numPartitionsInCtu = s_numPartInCUSize *
> s_numPartInCUSize;
> uint32_t m_frameWidthInCtus =
> (m_slice->m_sps->picWidthInLumaSamples % m_slice->m_param->maxCUSize) ?
> m_slice->m_sps->picWidthInLumaSamples / m_slice->m_param->maxCUSize + 1 :
> m_slice->m_sps->picWidthInLumaSamples / m_slice->m_param->maxCUSize;
>
> - uint32_t partIdxLT = m_absIdxInCTU + absPartIdx;
> - uint32_t partIdxLB =
> g_rasterToZscan[g_zscanToRaster[partIdxLT] + (height / 4 - 1) *
> numPartInCUWidth];
> - uint32_t partIdxRT =
> g_rasterToZscan[g_zscanToRaster[partIdxLT] + width / 4 - 1];
> + uint32_t partIdxLT = m_absIdxInCTU;
> + uint32_t partIdxLB =
> g_rasterToZscan[g_zscanToRaster[m_absIdxInCTU] + (((1 << (m_log2CUSize[0] -
> LOG2_UNIT_SIZE - 1)) - 1) << LOG2_RASTER_SIZE)];
> + uint32_t partIdxRT =
> g_rasterToZscan[g_zscanToRaster[partIdxLT] + (1 << (m_log2CUSize[0] -
> LOG2_UNIT_SIZE)) - 1];
>
> left = above = 0;
>
> diff --git a/source/encoder/analysis.cpp b/source/encoder/analysis.cpp
> index 53a19b29f..d60747cc0 100644
> --- a/source/encoder/analysis.cpp
> +++ b/source/encoder/analysis.cpp
> @@ -3623,7 +3623,7 @@ void Analysis::checkBidir2Nx2N(Mode& inter2Nx2N,
> Mode& bidir2Nx2N, const CUGeom&
> CUData& cu = bidir2Nx2N.cu;
>
> #if ENABLE_SCC_EXT
> - if ((cu.is8x8BipredRestriction(inter2Nx2N.bestME[0][0].mv,
> inter2Nx2N.bestME[0][1].mv, inter2Nx2N.bestME[0][0].ref,
> inter2Nx2N.bestME[0][1].ref) ? (cu.m_cuDepth[0] == 3) :
> cu.isBipredRestriction()) || inter2Nx2N.bestME[0][0].cost == MAX_UINT ||
> inter2Nx2N.bestME[0][1].cost == MAX_UINT)
> + if ((cu.is8x8BipredRestriction(inter2Nx2N.bestME[0][0].mv,
> inter2Nx2N.bestME[0][1].mv, inter2Nx2N.bestME[0][0].ref,
> inter2Nx2N.bestME[0][1].ref) ? (1 << cu.m_log2CUSize[0] == 8) :
> cu.isBipredRestriction()) || inter2Nx2N.bestME[0][0].cost == MAX_UINT ||
> inter2Nx2N.bestME[0][1].cost == MAX_UINT)
> #else
> if (cu.isBipredRestriction() || inter2Nx2N.bestME[0][0].cost ==
> MAX_UINT || inter2Nx2N.bestME[0][1].cost == MAX_UINT)
> #endif
> diff --git a/source/encoder/encoder.cpp b/source/encoder/encoder.cpp
> index 82123606c..f4a998fa9 100644
> --- a/source/encoder/encoder.cpp
> +++ b/source/encoder/encoder.cpp
> @@ -4715,6 +4715,12 @@ void Encoder::configure(x265_param *p)
> p->keyframeMin = p->keyframeMax;
> }
> }
> +
> + if (!!p->bEnableSCC && p->maxNumReferences == 1)
> + {
> + x265_log(p, X265_LOG_WARNING, "Screen Content Coding requies
> maximum number of references should be atleast greater than 1.Increamenting
> by one.\n");
> + p->maxNumReferences++;
> + }
> }
>
> void Encoder::readAnalysisFile(x265_analysis_data* analysis, int curPoc,
> const x265_picture* picIn, int paramBytes)
> diff --git a/source/encoder/search.cpp b/source/encoder/search.cpp
> index 0df11b431..ebd85dd52 100644
> --- a/source/encoder/search.cpp
> +++ b/source/encoder/search.cpp
> @@ -3503,7 +3503,7 @@ void Search::setIntraSearchRange(Mode& intraBCMode,
> MV& pred, int puIdx, int roi
> const uint32_t picWidth = m_slice->m_sps->picWidthInLumaSamples;
> const uint32_t picHeight = m_slice->m_sps->picHeightInLumaSamples;
> bool isFullFrameSearchrangeEnabled = false; // disabled by default
> - if (cu.m_cuDepth[0] == 2 && cu.m_partSize[0] == SIZE_2Nx2N &&
> isFullFrameSearchrangeEnabled)// full frame search
> + if (1 << cu.m_log2CUSize[0] == 16 && cu.m_partSize[0] == SIZE_2Nx2N
> && isFullFrameSearchrangeEnabled)// full frame search
> {
> srLeft = -1 * cuPelX;
> srTop = -1 * cuPelY;
> @@ -3513,7 +3513,7 @@ void Search::setIntraSearchRange(Mode& intraBCMode,
> MV& pred, int puIdx, int roi
> }
> else
> {
> - const uint32_t searchWidthInCTUs = cu.m_cuDepth[0] == 3 ? 1 :
> (isFullFrameSearchrangeEnabled) ? -1 : 1;
> + const uint32_t searchWidthInCTUs = 1 << cu.m_log2CUSize[0] == 8 ?
> 1 : (isFullFrameSearchrangeEnabled) ? -1 : 1;
> uint32_t width = 0, maxWidth = searchWidthInCTUs * lcuWidth;
> for (const CUData* pTestCU = cu.m_cuLeft;
> width < maxWidth && pTestCU != NULL && pTestCU->m_slice !=
> NULL;
> @@ -3718,7 +3718,7 @@ bool Search::predIntraBCSearch(Mode& intraBCMode,
> const CUGeom& cuGeom, bool bCh
>
> if (ePartSize != SIZE_2Nx2N)
> {
> - if (log2ParallelMergeLevelMinus2 && ePartSize != SIZE_2Nx2N
> && cu.m_cuDepth[0] >= 3)
> + if (log2ParallelMergeLevelMinus2 && ePartSize != SIZE_2Nx2N
> && 1 << cu.m_log2CUSize[0] >= 8)
> {
> cu.setPartSizeSubParts(SIZE_2Nx2N);
> if (puIdx == 0)
> @@ -4010,7 +4010,7 @@ bool Search::predMixedIntraBCInterSearch(Mode&
> intraBCMixedMode, const CUGeom& c
>
> if (ePartSize != SIZE_2Nx2N)
> {
> - if (log2ParallelMergeLevelMinus2 && ePartSize !=
> SIZE_2Nx2N && cu.m_cuDepth[0] >= 3)
> + if (log2ParallelMergeLevelMinus2 && ePartSize !=
> SIZE_2Nx2N && 1 << cu.m_log2CUSize[0] >= 8)
> {
> cu.setPartSizeSubParts(SIZE_2Nx2N);
> if (partIdx == 0)
> --
> 2.36.0.windows.1
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20241004/24c066f0/attachment-0001.htm>
More information about the x265-devel
mailing list