[x265] [PATCH 2 of 4] limit TU : use cbf and quantization coefficients to limit recursion

Deepthi Nandakumar deepthipnandakumar at gmail.com
Mon Oct 10 08:16:15 CEST 2016


Is this condition ever satisfied? Minimum value of a coeff, to be counted
in numSig is 1 (since it's uint16).

On Sat, Oct 8, 2016 at 5:07 PM, Bhavna Hariharan <
bhavna at multicorewareinc.com> wrote:

> Hi Deepthi,
>
> On Fri, Oct 7, 2016 at 1:17 PM, Deepthi Nandakumar <
> deepthipnandakumar at gmail.com> wrote:
>
>> Kavitha/Bhavana, excellent job! The test metrics look pretty good.
>>
>>
>>
>> On Tue, Oct 4, 2016 at 2:50 PM, <kavitha at multicorewareinc.com> wrote:
>>
>>> # HG changeset patch
>>> # User Bhavna Hariharan <bhavna at multicorewareinc.com>
>>> # Date 1474620761 -19800
>>> #      Fri Sep 23 14:22:41 2016 +0530
>>> # Node ID c018bc0ffc156902b1a9a13ecd6996d30d7403df
>>> # Parent  c10ef341f4e65883243f78040f52ed06ace99535
>>> limit TU : use cbf and quantization coefficients to limit recursion
>>>
>>> diff -r c10ef341f4e6 -r c018bc0ffc15 source/encoder/search.cpp
>>> --- a/source/encoder/search.cpp Tue Oct 04 13:27:48 2016 +0530
>>> +++ b/source/encoder/search.cpp Fri Sep 23 14:22:41 2016 +0530
>>> @@ -3194,6 +3194,8 @@
>>>                  singlePsyEnergy[TEXT_LUMA][0] = nonZeroPsyEnergyY;
>>>                  cbfFlag[TEXT_LUMA][0] = !!numSigTSkipY;
>>>                  bestTransformMode[TEXT_LUMA][0] = 1;
>>> +                if (m_param->limitTU)
>>> +                    numSig[TEXT_LUMA][0] = numSigTSkipY;
>>>                  uint32_t numCoeffY = 1 << (log2TrSize << 1);
>>>                  memcpy(coeffCurY, m_tsCoeff, sizeof(coeff_t) *
>>> numCoeffY);
>>>                  primitives.cu[partSize].copy_ss(curResiY, strideResiY,
>>> m_tsResidual, trSize);
>>> @@ -3331,6 +3333,21 @@
>>>              fullCost.rdcost = m_rdCost.calcPsyRdCost(fullCost.distortion,
>>> fullCost.bits, fullCost.energy);
>>>          else
>>>              fullCost.rdcost = m_rdCost.calcRdCost(fullCost.distortion,
>>> fullCost.bits);
>>> +
>>> +        if (m_param->limitTU && bCheckSplit)
>>> +        {
>>> +            // Stop recursion if the TU's energy level is minimal
>>> +            if (cbfFlag[TEXT_LUMA][0] == 0)
>>> +                bCheckSplit = false;
>>>
>>
>> Agreed.
>>
>> +            else if (numSig[TEXT_LUMA][0] < (cuGeom.numPartitions / 16))
>>> +            {
>>> +                uint32_t energy = 0;
>>> +                for (uint32_t i = 0; i < cuGeom.numPartitions; i++)
>>> +                    energy += abs(coeffCurY[i]);
>>> +                if (energy < numSig[TEXT_LUMA][0])
>>>
>>
>> One question, why are we comparing actual coefficient values to number of
>> significant coefficients?
>>
>
> We want to stop recursion when the energy of TU is low. If the value of
> each of the coefficients is minimal (close to 1), the energy will be less
> than the number of coefficients.
>
>
>>
>>> +                    bCheckSplit = false;
>>> +            }
>>> +        }
>>>      }
>>>
>>>      // code sub-blocks
>>> _______________________________________________
>>> x265-devel mailing list
>>> x265-devel at videolan.org
>>> https://mailman.videolan.org/listinfo/x265-devel
>>>
>>
>>
>>
>> --
>> Deepthi
>>
>> _______________________________________________
>> x265-devel mailing list
>> x265-devel at videolan.org
>> https://mailman.videolan.org/listinfo/x265-devel
>
>
>
> Regards,
>
> Bhavna Hariharan
>
>
> _______________________________________________
> x265-devel mailing list
> x265-devel at videolan.org
> https://mailman.videolan.org/listinfo/x265-devel
>
>


-- 
Deepthi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.videolan.org/pipermail/x265-devel/attachments/20161010/90e3679d/attachment.html>


More information about the x265-devel mailing list