[x265] [PATCH] deblock: removed bonded task group support in filtering
Pradeep Ramachandran
pradeep at multicorewareinc.com
Thu Sep 28 08:13:19 CEST 2017
On Thu, Sep 21, 2017 at 8:16 PM, <ashok at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Ashok Kumar Mishra <ashok at multicorewareinc.com>
> # Date 1498722236 -19800
> # Thu Jun 29 13:13:56 2017 +0530
> # Node ID 1a7edb6fd9932b09c2b5646c7dcc820a51795827
> # Parent f8ae7afc1f61ed0db3b2f23f5d581706fe6ed677
> deblock: removed bonded task group support in filtering
> Since filtering is very light weight process compared to encoding the ctu,
> there is no need to use bonded task group for filtering. There is little
> improvement in performance after removing bonded task group.
>
LGTM - will push into default. Sorry for the delay!
>
> diff -r f8ae7afc1f61 -r 1a7edb6fd993 source/encoder/frameencoder.cpp
> --- a/source/encoder/frameencoder.cpp Mon Sep 11 11:12:19 2017 +0530
> +++ b/source/encoder/frameencoder.cpp Thu Jun 29 13:13:56 2017 +0530
> @@ -1264,10 +1264,7 @@
> if (bFirstRowInSlice && !curRow.completed)
> {
> // Load SBAC coder context from previous row and initialize row
> state.
> - //rowCoder.copyState(m_initSliceContext);
> - //rowCoder.loadContexts(m_rows[row - 1].bufferedEntropy);
> - rowCoder.load(m_initSliceContext);
> - //m_rows[row - 1].bufferedEntropy.loadContexts(m_
> initSliceContext);
> + rowCoder.load(m_initSliceContext);
> }
>
> // calculate mean QP for consistent deltaQP signalling calculation
> @@ -1328,9 +1325,7 @@
> }
> curRow.avgQPComputed = 1;
> }
> - }
> -
> - // TODO: specially case handle on first and last row
> + }
>
> // Initialize restrict on MV range in slices
> tld.analysis.m_sliceMinY = -(int16_t)(rowInSlice * m_param->maxCUSize
> * 4) + 3 * 4;
> @@ -1428,15 +1423,10 @@
> {
> // NOTE: in VBV mode, we may reencode anytime, so we can't do
> Deblock stage-Horizon and SAO
> if (!bIsVbv)
> - {
> - // TODO: Multiple Threading
> - // Delay ONE row to avoid Intra Prediction Conflict
> + {
> + // Delay one row to avoid intra prediction conflict
> if (m_pool && !bFirstRowInSlice)
> - {
> - // Waitting last threading finish
> - m_frameFilter.m_parallelFilter[row -
> 1].waitForExit();
> -
> - // Processing new group
> + {
> int allowCol = col;
>
> // avoid race condition on last column
> @@ -1446,15 +1436,11 @@
> :
> m_frameFilter.m_parallelFilter[row - 2].m_lastCol.get()), (int)col);
> }
> m_frameFilter.m_parallelFilter[row -
> 1].m_allowedCol.set(allowCol);
> - m_frameFilter.m_parallelFilter[row -
> 1].tryBondPeers(*this, 1);
> }
>
> // Last Row may start early
> if (m_pool && bLastRowInSlice)
> {
> - // Waiting for the last thread to finish
> - m_frameFilter.m_parallelFilter[row].waitForExit();
> -
> // Deblocking last row
> int allowCol = col;
>
> @@ -1465,7 +1451,6 @@
> :
> m_frameFilter.m_parallelFilter[row - 1].m_lastCol.get()), (int)col);
> }
> m_frameFilter.m_parallelFilter[row].m_
> allowedCol.set(allowCol);
> - m_frameFilter.m_parallelFilter[row].tryBondPeers(*this,
> 1);
> }
> } // end of !bIsVbv
> }
> @@ -1481,7 +1466,7 @@
> FrameStats frameLog;
> curEncData.m_rowStat[row].sumQpAq += collectCTUStatistics(*ctu,
> &frameLog);
>
> - // copy no. of intra, inter Cu cnt per row into frame stats for 2
> pass
> + // copy number of intra, inter cu per row into frame stats for 2
> pass
> if (m_param->rc.bStatWrite)
> {
> curRow.rowStats.mvBits += best.mvBits;
> @@ -1537,7 +1522,6 @@
> }
>
> // If current block is at row end checkpoint, call vbv
> ratecontrol.
> -
> if (!m_param->bEnableWavefront && col == numCols - 1)
> {
> double qpBase = curEncData.m_cuStat[cuAddr].baseQp;
> @@ -1566,9 +1550,7 @@
> curEncData.m_rowStat[row].sumQpAq = 0;
> }
> }
> -
> // If current block is at row diagonal checkpoint, call vbv
> ratecontrol.
> -
> else if (m_param->bEnableWavefront && row == col && row)
> {
> if (m_param->rc.bEnableConstVbv)
> @@ -1683,7 +1665,7 @@
> }
> }
>
> - /** this row of CTUs has been compressed **/
> + /* this row of CTUs has been compressed */
> if (m_param->bEnableWavefront && m_param->rc.bEnableConstVbv)
> {
> if (row == m_numRows - 1)
> @@ -1740,13 +1722,10 @@
> /* Processing left Deblock block with current threading */
> if ((m_param->bEnableLoopFilter | m_param->bEnableSAO) & (rowInSlice
> >= 2))
> {
> - /* TODO: Multiple Threading */
> -
> /* Check conditional to start previous row process with current
> threading */
> if (m_frameFilter.m_parallelFilter[row -
> 2].m_lastDeblocked.get() == (int)numCols)
> {
> /* stop threading on current row and restart it */
> - m_frameFilter.m_parallelFilter[row - 1].waitForExit();
> m_frameFilter.m_parallelFilter[row -
> 1].m_allowedCol.set(numCols);
> m_frameFilter.m_parallelFilter[row - 1].processTasks(-1);
> }
> diff -r f8ae7afc1f61 -r 1a7edb6fd993 source/encoder/framefilter.cpp
> --- a/source/encoder/framefilter.cpp Mon Sep 11 11:12:19 2017 +0530
> +++ b/source/encoder/framefilter.cpp Thu Jun 29 13:13:56 2017 +0530
> @@ -582,10 +582,7 @@
> CUData* ctu = encData.getPicCTU(m_parallelFilter[row].m_rowAddr);
>
> /* Processing left block Deblock with current threading */
> - {
> - /* stop threading on current row */
> - m_parallelFilter[row].waitForExit();
> -
> + {
> /* Check to avoid previous row process slower than current row */
> X265_CHECK(ctu->m_bFirstRowInSlice || m_parallelFilter[row -
> 1].m_lastDeblocked.get() == m_numCols, "previous row not finish");
>
> @@ -618,7 +615,6 @@
> }
>
> // this row of CTUs has been encoded
> -
> if (!ctu->m_bFirstRowInSlice)
> processPostRow(row - 1);
>
> diff -r f8ae7afc1f61 -r 1a7edb6fd993 source/encoder/framefilter.h
> --- a/source/encoder/framefilter.h Mon Sep 11 11:12:19 2017 +0530
> +++ b/source/encoder/framefilter.h Thu Jun 29 13:13:56 2017 +0530
> @@ -62,7 +62,7 @@
> void* m_ssimBuf; /* Temp storage for ssim computation
> */
>
> #define MAX_PFILTER_CUS (4) /* maximum CUs for every thread */
> - class ParallelFilter : public BondedTaskGroup, public Deblock
> + class ParallelFilter : public Deblock
> {
> public:
> uint32_t m_rowHeight;
> @@ -104,10 +104,6 @@
> {
> return m_rowHeight;
> }
> -
> - protected:
> -
> - ParallelFilter operator=(const ParallelFilter&);
> };
>
> ParallelFilter* m_parallelFilter;
> _______________________________________________
> 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/20170928/7cd83d17/attachment.html>
More information about the x265-devel
mailing list