<div dir="ltr"><div>hmm, ok. But wouldnt it be better to do this in predMV, and generate the right number of numCandidates? <br><br></div>I'm looking suspiciously at the dynamic adaptation of merange (lines 793:844). This might be a good time to fix that as well. <br></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Aug 27, 2015 at 5:43 AM, Min Chen <span dir="ltr"><<a href="mailto:chenm003@163.com" target="_blank">chenm003@163.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"># HG changeset patch<br>
# User Min Chen <<a href="mailto:chenm003@163.com">chenm003@163.com</a>><br>
# Date 1440632250 25200<br>
# Node ID be9fbc8bf0d5e57949367293035d047d6a7d9da8<br>
# Parent d8091487bc9749e702c468786b0cd9e663478a91<br>
improve motionEstimate() by bypass reduce MV Candidate<br>
---<br>
source/common/mv.h | 2 ++<br>
source/encoder/motion.cpp | 11 ++++++++++-<br>
2 files changed, 12 insertions(+), 1 deletions(-)<br>
<br>
diff -r d8091487bc97 -r be9fbc8bf0d5 source/common/mv.h<br>
--- a/source/common/mv.h Tue Aug 25 16:39:12 2015 -0700<br>
+++ b/source/common/mv.h Wed Aug 26 16:37:30 2015 -0700<br>
@@ -79,6 +79,8 @@<br>
<br>
bool operator !() const { return !word; }<br>
<br>
+ MV operator ~() const { return ~word; }<br>
+<br>
// Scale down a QPEL mv to FPEL mv, rounding up by one HPEL offset<br>
MV roundToFPel() const { return MV((x + 2) >> 2, (y + 2) >> 2); }<br>
<br>
diff -r d8091487bc97 -r be9fbc8bf0d5 source/encoder/motion.cpp<br>
--- a/source/encoder/motion.cpp Tue Aug 25 16:39:12 2015 -0700<br>
+++ b/source/encoder/motion.cpp Wed Aug 26 16:37:30 2015 -0700<br>
@@ -621,10 +621,19 @@<br>
}<br>
}<br>
<br>
- X265_CHECK(!(ref->isLowres && numCandidates), "lowres motion candidates not allowed\n")<br>
+ X265_CHECK(!(ref->isLowres && numCandidates), "lowres motion candidates not allowed\n");<br>
+<br>
// measure SAD cost at each QPEL motion vector candidate<br>
+ MV prevMV;<br>
+ if (numCandidates)<br>
+ prevMV = ~mvc[0];<br>
for (int i = 0; i < numCandidates; i++)<br>
{<br>
+ // Bypass duplicated mvc, it isn't a good way but simplest. Prepare to sort input mvc list will give us less candidate<br>
+ if (prevMV == mvc[i])<br>
+ continue;<br>
+ prevMV = mvc[i];<br>
+<br>
MV m = mvc[i].clipped(qmvmin, qmvmax);<br>
if (m.notZero() & (m != pmv ? 1 : 0) & (m != bestpre ? 1 : 0)) // check already measured<br>
{<br>
<br>
_______________________________________________<br>
x265-devel mailing list<br>
<a href="mailto:x265-devel@videolan.org">x265-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x265-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/listinfo/x265-devel</a><br>
</blockquote></div><br></div>