<div dir="ltr">Thanks BugMaster. The hints were really helpful.<div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Oct 6, 2016 at 3:41 AM, BugMaster <span dir="ltr"><<a href="mailto:BugMaster@narod.ru" target="_blank">BugMaster@narod.ru</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Tue, 4 Oct 2016 17:16:16 +0530, Aishwarya wrote:<br>
> Hi<br>
<br>
Hi. Here is my understanding of this code (but I can be wrong).<br>
<span class=""><br>
> I'm trying to understand the implementation of TESA or SEA motion<br>
> search algorithm. I understand that the algorithm tries to calculate<br>
> DC of pixels within the search range and eliminate few cases before<br>
> it does ADS. But I have doubts in some part of the code which I have pasted below:<br>
<br>
>  1)<br>
</span>...<br>
<span class="">> Can someone please explain the logic behind the above code? <br>
<br>
</span><span class="">>            if( delta == 4 )<br>
>                 sums_base += stride * (h->fenc->i_lines[0] + PADV*2);<br>
<br>
</span>Change sums_base to the second plane in integral which stores 4x4 sums<br>
instead of 8x8.<br>
<span class=""><br>
>             if( i_pixel == PIXEL_16x16 || i_pixel == PIXEL_8x16 || i_pixel == PIXEL_4x8 )<br>
>                 delta *= stride;<br>
<br>
<br>
</span>There are really only 3 variants of ads:<br>
ads4: for 16x16 which use 4x 8x8 partitions<br>
ads2: for 16x8, 8x16, 8x4, 4x8 which use 2x 8x8/4x4 partitions<br>
ads1: for 8x8, 4x4 which use 1x 8x8/4x4 partition<br>
<br>
And so here we chose if we need to use 2 horizontal or 2 vertical<br>
8x8/4x4 partitions by choosing delta or delta*stirde correspondingly.<br>
16x16 case also expects delta to be in stride units.<br>
<span class=""><br>
>             if( i_pixel == PIXEL_8x16 || i_pixel == PIXEL_4x8 )<br>
>                 enc_dc[1] = enc_dc[2];<br>
<br>
</span>As ads2 use only 2 values of enc_dc[0..1] we should copy in vertical<br>
case enc_dc[2] to enc_dc[1]. This way we would use values of enc_dc[0]<br>
and enc_dc[2] as reference.<br>
<span class=""><br>
> 2) Also what value gets stored in m->integral which is used in ADS calculation in SEA. <br>
<br>
</span>There is comment at: <a href="http://git.videolan.org/?p=x264.git;a=blob;f=common/mc.c;h=dc39c5eb920c0e95019c490f0ec91ae13f8a5ca0;hb=72d53ab2ac7af24597a824e868f2ef363a22f5d4#l734" rel="noreferrer" target="_blank">http://git.videolan.org/?p=<wbr>x264.git;a=blob;f=common/mc.c;<wbr>h=<wbr>dc39c5eb920c0e95019c490f0ec91a<wbr>e13f8a5ca0;hb=<wbr>72d53ab2ac7af24597a824e868f2ef<wbr>363a22f5d4#l734</a><br>
/* generate integral image:<br>
 * frame->integral contains 2 planes. in the upper plane, each element is<br>
 * the sum of an 8x8 pixel region with top-left corner on that point.<br>
 * in the lower plane, 4x4 sums (needed only with --partitions p4x4). */<br>
<span class=""><br>
> 3)    Here delta is 8 if  i_pixel == PIXEL_8x8. What happens in the<br>
> below code for PIXEL_8x8?         <br>
<br>
>                 h->pixf.sad_x4[sad_size]( zero, p_fenc, p_fenc+delta,<br>
>                 p_fenc+delta*FENC_STRIDE, p_fenc+delta+delta*FENC_<wbr>STRIDE,<br>
>                 FENC_STRIDE, enc_dc );<br>
<br>
</span>It calculates 4 sads with zero (i.e. dc) of 8x8 size which cover 16x16<br>
block. From which for PIXEL_8x8 case we will use only first one in<br>
enc_dc[0].<br>
<br>
> Thanks<br>
<br>
______________________________<wbr>_________________<br>
x264-devel mailing list<br>
<a href="mailto:x264-devel@videolan.org">x264-devel@videolan.org</a><br>
<a href="https://mailman.videolan.org/listinfo/x264-devel" rel="noreferrer" target="_blank">https://mailman.videolan.org/<wbr>listinfo/x264-devel</a><br>
</blockquote></div><br></div>