[x265] [PATCH 2 of 2] Implement slice-level SAO filter
Pooja Venkatesan
pooja at multicorewareinc.com
Thu Sep 12 07:41:00 CEST 2019
Please ignore this patch. I have sent an updated version which can be found
in the link -
https://mailman.videolan.org/pipermail/x265-devel/2019-September/012662.html
On Tue, Sep 10, 2019 at 11:08 AM <pooja at multicorewareinc.com> wrote:
> # HG changeset patch
> # User Soundariya Ranin Venkatesh <soundariya at multicorewareinc.com>
> # Date 1567501320 -19800
> # Tue Sep 03 14:32:00 2019 +0530
> # Node ID b1799841d3307237a741eb7d097cba2efd76f1eb
> # Parent f6d9a0145c4fcd7ac0a2a776a4f99fc431f8fd4a
> Implement slice-level SAO filter.
>
> diff -r f6d9a0145c4f -r b1799841d330 source/encoder/frameencoder.cpp
> --- a/source/encoder/frameencoder.cpp Tue Sep 03 14:25:44 2019 +0530
> +++ b/source/encoder/frameencoder.cpp Tue Sep 03 14:32:00 2019 +0530
> @@ -634,14 +634,22 @@
> if (!m_param->bEnableWavefront)
> m_backupStreams = new Bitstream[numSubstreams];
> m_substreamSizes = X265_MALLOC(uint32_t, numSubstreams);
> - if (!m_param->enableSAO)
> + if (!slice->m_bUseSao)
> + {
> for (uint32_t i = 0; i < numSubstreams; i++)
> m_rows[i].rowGoOnCoder.setBitstream(&m_outStreams[i]);
> + }
> }
> else
> {
> for (uint32_t i = 0; i < numSubstreams; i++)
> + {
> m_outStreams[i].resetBits();
> + if (!slice->m_bUseSao)
> + m_rows[i].rowGoOnCoder.setBitstream(&m_outStreams[i]);
> + else
> + m_rows[i].rowGoOnCoder.setBitstream(NULL);
> + }
> }
>
> m_rce.encodeOrder = m_frame->m_encodeOrder;
> @@ -981,7 +989,7 @@
> m_entropyCoder.setBitstream(&m_bs);
>
> // finish encode of each CTU row, only required when SAO is enabled
> - if (m_param->enableSAO)
> + if (slice->m_bUseSao)
> encodeSlice(0);
>
> m_entropyCoder.setBitstream(&m_bs);
> @@ -1221,7 +1229,7 @@
> const uint32_t lastCUAddr = (slice->m_endCUAddr +
> m_param->num4x4Partitions - 1) / m_param->num4x4Partitions;
> const uint32_t numSubstreams = m_param->bEnableWavefront ?
> slice->m_sps->numCuInHeight : 1;
>
> - SAOParam* saoParam = slice->m_sps->bUseSAO ?
> m_frame->m_encData->m_saoParam : NULL;
> + SAOParam* saoParam = slice->m_sps->bUseSAO && slice->m_bUseSao ?
> m_frame->m_encData->m_saoParam : NULL;
> for (uint32_t cuAddr = sliceAddr; cuAddr < lastCUAddr; cuAddr++)
> {
> uint32_t col = cuAddr % widthInLCUs;
> @@ -1515,11 +1523,11 @@
> curRow.bufferedEntropy.loadContexts(rowCoder);
>
> /* SAO parameter estimation using non-deblocked pixels for CTU
> bottom and right boundary areas */
> - if (m_param->enableSAO && m_param->bSaoNonDeblocked)
> + if (slice->m_bUseSao && m_param->bSaoNonDeblocked)
>
> m_frameFilter.m_parallelFilter[row].m_sao.calcSaoStatsCu_BeforeDblk(m_frame,
> col, row);
>
> /* Deblock with idle threading */
> - if (m_param->bEnableLoopFilter | m_param->enableSAO)
> + if (m_param->bEnableLoopFilter | slice->m_bUseSao)
> {
> // NOTE: in VBV mode, we may reencode anytime, so we can't do
> Deblock stage-Horizon and SAO
> if (!bIsVbv)
> @@ -1833,12 +1841,12 @@
>
> /* flush row bitstream (if WPP and no SAO) or flush frame if no WPP
> and no SAO */
> /* end_of_sub_stream_one_bit / end_of_slice_segment_flag */
> - if (!m_param->enableSAO && (m_param->bEnableWavefront ||
> bLastRowInSlice))
> - rowCoder.finishSlice();
> + if (!slice->m_bUseSao && (m_param->bEnableWavefront ||
> bLastRowInSlice))
> + rowCoder.finishSlice();
>
>
> /* Processing left Deblock block with current threading */
> - if ((m_param->bEnableLoopFilter | m_param->enableSAO) & (rowInSlice
> >= 2))
> + if ((m_param->bEnableLoopFilter | slice->m_bUseSao) & (rowInSlice >=
> 2))
> {
> /* Check conditional to start previous row process with current
> threading */
> if (m_frameFilter.m_parallelFilter[row - 2].m_lastDeblocked.get()
> == (int)numCols)
> diff -r f6d9a0145c4f -r b1799841d330 source/encoder/frameencoder.h
> --- a/source/encoder/frameencoder.h Tue Sep 03 14:25:44 2019 +0530
> +++ b/source/encoder/frameencoder.h Tue Sep 03 14:32:00 2019 +0530
> @@ -150,6 +150,7 @@
> uint32_t m_filterRowDelay;
> uint32_t m_filterRowDelayCus;
> uint32_t m_refLagRows;
> + bool m_bUseSao;
>
> CTURow* m_rows;
> uint16_t m_sliceAddrBits;
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20190912/316d4f41/attachment.html>
More information about the x265-devel
mailing list