Re: [x265] [PATCH 2 of 2] Implement slice-level SAO filter

2019-09-12 Thread Aruna Matheswaran
Pushed to default.

On Wed, Sep 11, 2019 at 10:48 PM  wrote:

> # HG changeset patch
> # User Soundariya Ranin Venkatesh 
> # Date 1567501320 -19800
> #  Tue Sep 03 14:32:00 2019 +0530
> # Node ID ef2a478cde8712ba9b558257111f4abc50283609
> # Parent  5e791399ec4a0a788f880a9967c9e21fbaa22fa3
> Implement slice-level SAO filter.
>
> diff -r 5e791399ec4a -r ef2a478cde87 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->bEnableSAO)
> +if (!slice->m_bUseSao)
> +{
>  for (uint32_t i = 0; i < numSubstreams; i++)
>  m_rows[i].rowGoOnCoder.setBitstream(_outStreams[i]);
> +}
>  }
>  else
>  {
>  for (uint32_t i = 0; i < numSubstreams; i++)
> +{
>  m_outStreams[i].resetBits();
> +if (!slice->m_bUseSao)
> +m_rows[i].rowGoOnCoder.setBitstream(_outStreams[i]);
> +else
> +m_rows[i].rowGoOnCoder.setBitstream(NULL);
> +}
>  }
>
>  m_rce.encodeOrder = m_frame->m_encodeOrder;
> @@ -981,7 +989,7 @@
>  m_entropyCoder.setBitstream(_bs);
>
>  // finish encode of each CTU row, only required when SAO is enabled
> -if (m_param->bEnableSAO)
> +if (slice->m_bUseSao)
>  encodeSlice(0);
>
>  m_entropyCoder.setBitstream(_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->bEnableSAO && 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->bEnableSAO)
> +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->bEnableSAO && (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->bEnableSAO) & (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 5e791399ec4a -r ef2a478cde87 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;
> ___
> x265-devel mailing list
> x265-devel@videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>


-- 
Regards,
Aruna
___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel


Re: [x265] [PATCH 2 of 2] Implement slice-level SAO filter

2019-09-11 Thread Pooja Venkatesan
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  wrote:

> # HG changeset patch
> # User Soundariya Ranin Venkatesh 
> # 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(_outStreams[i]);
> +}
>  }
>  else
>  {
>  for (uint32_t i = 0; i < numSubstreams; i++)
> +{
>  m_outStreams[i].resetBits();
> +if (!slice->m_bUseSao)
> +m_rows[i].rowGoOnCoder.setBitstream(_outStreams[i]);
> +else
> +m_rows[i].rowGoOnCoder.setBitstream(NULL);
> +}
>  }
>
>  m_rce.encodeOrder = m_frame->m_encodeOrder;
> @@ -981,7 +989,7 @@
>  m_entropyCoder.setBitstream(_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(_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;
>
___
x265-devel mailing list
x265-devel@videolan.org
https://mailman.videolan.org/listinfo/x265-devel