[x265] [PATCH 1 of 3] improve motionEstimate() by bypass reduce MV Candidate

Deepthi Nandakumar deepthi at multicorewareinc.com
Tue Sep 1 06:13:35 CEST 2015


Min,

Inside CUData::getPMV(), the amvpCand list is specified by the HEVC
standard, but pmv (or motion vector candidate list) is not. The encoder is
free to prune/modify this list.

We can prune this list within getPMV(), and return the right numMvc (after
duplicate MVs have been removed).

Thanks,
Deepthi

On Mon, Aug 31, 2015 at 7:02 PM, chen <chenm003 at 163.com> wrote:

> This is simplest way, these MVC generate from MV reference list, we can't
> remove reduce mv in the list since it defined by HEVC specifiction.
>
> btw: my debug code catch more than 6 duplicate MVs in the list.
> At 2015-08-31 13:48:00,"Deepthi Nandakumar" <deepthi at multicorewareinc.com>
> wrote:
>
> hmm, ok. But wouldnt it be better to do this in predMV, and generate the
> right number of numCandidates?
>
> I'm looking suspiciously at the dynamic adaptation of merange (lines
> 793:844). This might be a good time to fix that as well.
>
> On Thu, Aug 27, 2015 at 5:43 AM, Min Chen <chenm003 at 163.com> wrote:
>
>> # HG changeset patch
>> # User Min Chen <chenm003 at 163.com>
>> # Date 1440632250 25200
>> # Node ID be9fbc8bf0d5e57949367293035d047d6a7d9da8
>> # Parent  d8091487bc9749e702c468786b0cd9e663478a91
>> improve motionEstimate() by bypass reduce MV Candidate
>> ---
>>  source/common/mv.h        |    2 ++
>>  source/encoder/motion.cpp |   11 ++++++++++-
>>  2 files changed, 12 insertions(+), 1 deletions(-)
>>
>> diff -r d8091487bc97 -r be9fbc8bf0d5 source/common/mv.h
>> --- a/source/common/mv.h        Tue Aug 25 16:39:12 2015 -0700
>> +++ b/source/common/mv.h        Wed Aug 26 16:37:30 2015 -0700
>> @@ -79,6 +79,8 @@
>>
>>      bool operator !() const                    { return !word; }
>>
>> +    MV operator ~() const                    { return ~word; }
>> +
>>      // Scale down a QPEL mv to FPEL mv, rounding up by one HPEL offset
>>      MV roundToFPel() const                     { return MV((x + 2) >> 2,
>> (y + 2) >> 2); }
>>
>> diff -r d8091487bc97 -r be9fbc8bf0d5 source/encoder/motion.cpp
>> --- a/source/encoder/motion.cpp Tue Aug 25 16:39:12 2015 -0700
>> +++ b/source/encoder/motion.cpp Wed Aug 26 16:37:30 2015 -0700
>> @@ -621,10 +621,19 @@
>>          }
>>      }
>>
>> -    X265_CHECK(!(ref->isLowres && numCandidates), "lowres motion
>> candidates not allowed\n")
>> +    X265_CHECK(!(ref->isLowres && numCandidates), "lowres motion
>> candidates not allowed\n");
>> +
>>      // measure SAD cost at each QPEL motion vector candidate
>> +    MV prevMV;
>> +    if (numCandidates)
>> +        prevMV = ~mvc[0];
>>      for (int i = 0; i < numCandidates; i++)
>>      {
>> +        // Bypass duplicated mvc, it isn't a good way but simplest.
>> Prepare to sort input mvc list will give us less candidate
>> +        if (prevMV == mvc[i])
>> +            continue;
>> +        prevMV = mvc[i];
>> +
>>          MV m = mvc[i].clipped(qmvmin, qmvmax);
>>          if (m.notZero() & (m != pmv ? 1 : 0) & (m != bestpre ? 1 : 0))
>> // check already measured
>>          {
>>
>> _______________________________________________
>> x265-devel mailing list
>> x265-devel at videolan.org
>> https://mailman.videolan.org/listinfo/x265-devel
>>
>
>
> _______________________________________________
> 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/20150901/032dfeba/attachment.html>


More information about the x265-devel mailing list