[x265] [PATCH 7 of 7] entropy: after encodeCU, the CU structures need to be reset with the right QP
Steve Borho
steve at borho.org
Sat Apr 18 21:21:53 CEST 2015
On 04/18, deepthi at multicorewareinc.com wrote:
> # HG changeset patch
> # User Deepthi Nandakumar <deepthi at multicorewareinc.com>
> # Date 1429334781 -19800
> # Sat Apr 18 10:56:21 2015 +0530
> # Node ID 313a17ef22f4b82e21098ce9f784d2c6d1e52163
> # Parent d138bbee3b0155e1433be7b8360afab9d5ccdaf0
> entropy: after encodeCU, the CU structures need to be reset with the right QP
>
> This is used by the deblocking filter to index into the the beta and tc tables.
> Without deblocking, no-one cares about the QP structures of CU after encode,
> so it wouldnt cause any problems.
series queued for testing with some re-ordering of the patches to ensure
deblocking is only broken on one commit, and a couple of coding style
nits fixed.
> diff -r d138bbee3b01 -r 313a17ef22f4 source/encoder/entropy.cpp
> --- a/source/encoder/entropy.cpp Thu Apr 09 00:48:54 2015 -0400
> +++ b/source/encoder/entropy.cpp Sat Apr 18 10:56:21 2015 +0530
> @@ -585,7 +585,7 @@
> if (ctu.isSkipped(absPartIdx))
> {
> codeMergeIndex(ctu, absPartIdx);
> - finishCU(ctu, absPartIdx, depth);
> + finishCU(ctu, absPartIdx, depth, bEncodeDQP);
> return;
> }
> codePredMode(ctu.m_predMode[absPartIdx]);
> @@ -606,7 +606,7 @@
> codeCoeff(ctu, absPartIdx, bEncodeDQP, tuDepthRange);
>
> // --- write terminating bit ---
> - finishCU(ctu, absPartIdx, depth);
> + finishCU(ctu, absPartIdx, depth, bEncodeDQP);
> }
>
> /* Return bit count of signaling inter mode */
> @@ -658,7 +658,7 @@
> }
>
> /* finish encoding a cu and handle end-of-slice conditions */
> -void Entropy::finishCU(const CUData& ctu, uint32_t absPartIdx, uint32_t depth)
> +void Entropy::finishCU(const CUData& ctu, uint32_t absPartIdx, uint32_t depth, bool bCodeDQP)
> {
> const Slice* slice = ctu.m_slice;
> uint32_t realEndAddress = slice->m_endCUAddr;
> @@ -672,6 +672,10 @@
> bool granularityBoundary = (((rpelx & granularityMask) == 0 || (rpelx == slice->m_sps->picWidthInLumaSamples )) &&
> ((bpely & granularityMask) == 0 || (bpely == slice->m_sps->picHeightInLumaSamples)));
>
> + if (slice->m_pps->bUseDQP)
> + {
> + ((CUData&)ctu).setQPSubParts(bCodeDQP ? ctu.getRefQP(absPartIdx) : ctu.m_qp[absPartIdx], absPartIdx, depth);
it's a bit unfortunate having to use a const-cast here. Can deblocking
lookup the ref QP() or is there context missing by then?
> + }
> if (granularityBoundary)
> {
> // Encode slice finish
> diff -r d138bbee3b01 -r 313a17ef22f4 source/encoder/entropy.h
> --- a/source/encoder/entropy.h Thu Apr 09 00:48:54 2015 -0400
> +++ b/source/encoder/entropy.h Sat Apr 18 10:56:21 2015 +0530
> @@ -221,7 +221,7 @@
> }
>
> void encodeCU(const CUData& ctu, const CUGeom &cuGeom, uint32_t absPartIdx, uint32_t depth, bool& bEncodeDQP);
> - void finishCU(const CUData& ctu, uint32_t absPartIdx, uint32_t depth);
> + void finishCU(const CUData& ctu, uint32_t absPartIdx, uint32_t depth, bool bEncodeDQP);
>
> void writeOut();
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
--
Steve Borho
More information about the x265-devel
mailing list