<div dir="ltr"><div dir="ltr"><div>From 5b4eb291b7daeb0e303c1e0a42204c83ddc988dd Mon Sep 17 00:00:00 2001</div><div>From: ashok2022 <<a href="mailto:ashok@multicorewareinc.com">ashok@multicorewareinc.com</a>></div><div>Date: Thu, 13 Oct 2022 19:32:22 +0530</div><div>Subject: [PATCH] Fixed left and above motion vector index</div><div><br></div><div>---</div><div> source/common/temporalfilter.cpp | 17 +++++++++++------</div><div> 1 file changed, 11 insertions(+), 6 deletions(-)</div><div><br></div><div>diff --git a/source/common/temporalfilter.cpp b/source/common/temporalfilter.cpp</div><div>index 1d7e670e1..1d5a7d076 100644</div><div>--- a/source/common/temporalfilter.cpp</div><div>+++ b/source/common/temporalfilter.cpp</div><div>@@ -624,7 +624,6 @@ void TemporalFilter::bilateralFilter(Frame* frame,</div><div>                 newVal /= temporalWeightSum;</div><div>                 pixel sampleVal = (pixel)round(newVal);</div><div>                 sampleVal = (sampleVal < 0 ? 0 : (sampleVal > maxSampleValue ? maxSampleValue : sampleVal));</div><div>-                //*dstPel = sampleVal;</div><div>                 *srcPel = sampleVal;</div><div>             }</div><div>         }</div><div>@@ -819,7 +818,8 @@ void TemporalFilter::motionEstimationLuma(MV *mvs, uint32_t mvStride, PicYuv *or</div><div> </div><div>             if (blockY > 0)</div><div>             {</div><div>-                MV aboveMV = mvs[(blockX / stepSize, (blockY - stepSize) / stepSize)];</div><div>+                int idx = ((blockY - stepSize) / stepSize) * mvStride + (blockX / stepSize);</div><div>+                MV aboveMV = mvs[idx];</div><div>                 int error = motionErrorLuma(orig, buffer, blockX, blockY, aboveMV.x, aboveMV.y, blockSize, leastError);</div><div>                 if (error < leastError)</div><div>                 {</div><div>@@ -827,9 +827,12 @@ void TemporalFilter::motionEstimationLuma(MV *mvs, uint32_t mvStride, PicYuv *or</div><div>                     leastError = error;</div><div>                 }</div><div>             }</div><div>+</div><div>             if (blockX > 0)</div><div>             {</div><div>-                MV leftMV = mvs[((blockX - stepSize) / stepSize, blockY / stepSize)];</div><div>+                int idx = ((blockY / stepSize) * mvStride + (blockX - stepSize) / stepSize);</div><div>+                MV leftMV = mvs[idx];</div><div>+</div><div>                 int error = motionErrorLuma(orig, buffer, blockX, blockY, leftMV.x, leftMV.y, blockSize, leastError);</div><div>                 if (error < leastError)</div><div>                 {</div><div>@@ -974,7 +977,8 @@ void TemporalFilter::motionEstimationLumaDoubleRes(MV *mvs, uint32_t mvStride, P</div><div> </div><div>             if (blockY > 0)</div><div>             {</div><div>-                MV aboveMV = mvs[(blockX / stepSize, (blockY - stepSize) / stepSize)];</div><div>+                int idx = ((blockY - stepSize) / stepSize) * mvStride + (blockX / stepSize);</div><div>+                MV aboveMV = mvs[idx];</div><div>                 int error = motionErrorLuma(orig, buffer, blockX, blockY, aboveMV.x, aboveMV.y, blockSize, leastError);</div><div>                 if (error < leastError)</div><div>                 {</div><div>@@ -982,9 +986,11 @@ void TemporalFilter::motionEstimationLumaDoubleRes(MV *mvs, uint32_t mvStride, P</div><div>                     leastError = error;</div><div>                 }</div><div>             }</div><div>+</div><div>             if (blockX > 0)</div><div>             {</div><div>-                MV leftMV = mvs[((blockX - stepSize) / stepSize, blockY / stepSize)];</div><div>+                int idx = ((blockY / stepSize) * mvStride + (blockX - stepSize) / stepSize);</div><div>+                MV leftMV = mvs[idx];</div><div>                 int error = motionErrorLuma(orig, buffer, blockX, blockY, leftMV.x, leftMV.y, blockSize, leastError);</div><div>                 if (error < leastError)</div><div>                 {</div><div>@@ -1051,7 +1057,6 @@ void TemporalFilter::subsampleLuma(PicYuv *input, PicYuv *output, int factor)</div><div>         }</div><div>     }</div><div> </div><div>-    // output.extendPicBorder();</div><div>     extendPicBorder(output->m_picOrg[0], output->m_stride, output->m_picWidth, output->m_picHeight, output->m_lumaMarginX, output->m_lumaMarginY);</div><div> }</div><div> </div><div>-- </div><div>2.34.1.windows.1</div><div><br></div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><i><font face="georgia, serif">Thanks and Regards,</font></i></div><div><i><font face="georgia, serif"><b>Snehaa.G</b><br>Video Codec Engineer,<br>Media & AI analytics<br><a href="https://multicorewareinc.com/" target="_blank"><img src="https://ci3.googleusercontent.com/mail-sig/AIorK4yEumXeQ2mgcFAR2us9INa7z3rCbl8ordut3fbdeIbuPv0n3EA75Or1rHs0neGaI0WM8mFPz1g"></a><br><span></span><span></span><br></font></i></div></div></div></div></div></div>