Clarify 'max_sad' usage
Depending on implementation the optimized SAD functions may return early when the calculated SAD exceeds max_sad. Change-Id: I05ce5b2d34e6d45fb3ec2a450aa99c4f3343bf3a
This commit is contained in:
		@@ -13,38 +13,13 @@
 | 
			
		||||
#include "vpx_config.h"
 | 
			
		||||
#include "vpx/vpx_integer.h"
 | 
			
		||||
 | 
			
		||||
unsigned int vp8_sad16x16_c(
 | 
			
		||||
    const unsigned char *src_ptr,
 | 
			
		||||
    int  src_stride,
 | 
			
		||||
    const unsigned char *ref_ptr,
 | 
			
		||||
    int  ref_stride,
 | 
			
		||||
    int max_sad)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    int r, c;
 | 
			
		||||
    unsigned int sad = 0;
 | 
			
		||||
 | 
			
		||||
    for (r = 0; r < 16; r++)
 | 
			
		||||
    {
 | 
			
		||||
        for (c = 0; c < 16; c++)
 | 
			
		||||
        {
 | 
			
		||||
            sad += abs(src_ptr[c] - ref_ptr[c]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        src_ptr += src_stride;
 | 
			
		||||
        ref_ptr += ref_stride;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return sad;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static __inline
 | 
			
		||||
unsigned int sad_mx_n_c(
 | 
			
		||||
    const unsigned char *src_ptr,
 | 
			
		||||
    int  src_stride,
 | 
			
		||||
    const unsigned char *ref_ptr,
 | 
			
		||||
    int  ref_stride,
 | 
			
		||||
    int  max_sad,
 | 
			
		||||
    int  m,
 | 
			
		||||
    int  n)
 | 
			
		||||
{
 | 
			
		||||
@@ -59,6 +34,9 @@ unsigned int sad_mx_n_c(
 | 
			
		||||
            sad += abs(src_ptr[c] - ref_ptr[c]);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (sad > max_sad)
 | 
			
		||||
          break;
 | 
			
		||||
 | 
			
		||||
        src_ptr += src_stride;
 | 
			
		||||
        ref_ptr += ref_stride;
 | 
			
		||||
    }
 | 
			
		||||
@@ -66,6 +44,21 @@ unsigned int sad_mx_n_c(
 | 
			
		||||
    return sad;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* max_sad is provided as an optional optimization point. Alternative
 | 
			
		||||
 * implementations of these functions are not required to check it.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
unsigned int vp8_sad16x16_c(
 | 
			
		||||
    const unsigned char *src_ptr,
 | 
			
		||||
    int  src_stride,
 | 
			
		||||
    const unsigned char *ref_ptr,
 | 
			
		||||
    int  ref_stride,
 | 
			
		||||
    int  max_sad)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 16, 16);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
unsigned int vp8_sad8x8_c(
 | 
			
		||||
    const unsigned char *src_ptr,
 | 
			
		||||
@@ -75,7 +68,7 @@ unsigned int vp8_sad8x8_c(
 | 
			
		||||
    int  max_sad)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 8, 8);
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 8, 8);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -87,7 +80,7 @@ unsigned int vp8_sad16x8_c(
 | 
			
		||||
    int  max_sad)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 16, 8);
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 16, 8);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -100,7 +93,7 @@ unsigned int vp8_sad8x16_c(
 | 
			
		||||
    int  max_sad)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 8, 16);
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 8, 16);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -112,7 +105,7 @@ unsigned int vp8_sad4x4_c(
 | 
			
		||||
    int  max_sad)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, 4, 4);
 | 
			
		||||
    return sad_mx_n_c(src_ptr, src_stride, ref_ptr, ref_stride, max_sad, 4, 4);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void vp8_sad16x16x3_c(
 | 
			
		||||
 
 | 
			
		||||
@@ -89,7 +89,7 @@ sym(vp8_sad16x16_wmt):
 | 
			
		||||
;    int  src_stride,
 | 
			
		||||
;    unsigned char *ref_ptr,
 | 
			
		||||
;    int  ref_stride,
 | 
			
		||||
;    int  max_err)
 | 
			
		||||
;    int  max_sad)
 | 
			
		||||
global sym(vp8_sad8x16_wmt)
 | 
			
		||||
sym(vp8_sad8x16_wmt):
 | 
			
		||||
    push        rbp
 | 
			
		||||
 
 | 
			
		||||
@@ -19,7 +19,7 @@
 | 
			
		||||
  %define     end_ptr       rcx
 | 
			
		||||
  %define     ret_var       rbx
 | 
			
		||||
  %define     result_ptr    arg(4)
 | 
			
		||||
  %define     max_err       arg(4)
 | 
			
		||||
  %define     max_sad       arg(4)
 | 
			
		||||
  %define     height        dword ptr arg(4)
 | 
			
		||||
    push        rbp
 | 
			
		||||
    mov         rbp,        rsp
 | 
			
		||||
@@ -42,7 +42,7 @@
 | 
			
		||||
    %define     end_ptr     r10
 | 
			
		||||
    %define     ret_var     r11
 | 
			
		||||
    %define     result_ptr  [rsp+xmm_stack_space+8+4*8]
 | 
			
		||||
    %define     max_err     [rsp+xmm_stack_space+8+4*8]
 | 
			
		||||
    %define     max_sad     [rsp+xmm_stack_space+8+4*8]
 | 
			
		||||
    %define     height      dword ptr [rsp+xmm_stack_space+8+4*8]
 | 
			
		||||
  %else
 | 
			
		||||
    %define     src_ptr     rdi
 | 
			
		||||
@@ -52,7 +52,7 @@
 | 
			
		||||
    %define     end_ptr     r9
 | 
			
		||||
    %define     ret_var     r10
 | 
			
		||||
    %define     result_ptr  r8
 | 
			
		||||
    %define     max_err     r8
 | 
			
		||||
    %define     max_sad     r8
 | 
			
		||||
    %define     height      r8
 | 
			
		||||
  %endif
 | 
			
		||||
%endif
 | 
			
		||||
@@ -67,7 +67,7 @@
 | 
			
		||||
  %define     end_ptr
 | 
			
		||||
  %define     ret_var
 | 
			
		||||
  %define     result_ptr
 | 
			
		||||
  %define     max_err
 | 
			
		||||
  %define     max_sad
 | 
			
		||||
  %define     height
 | 
			
		||||
 | 
			
		||||
%if ABI_IS_32BIT
 | 
			
		||||
@@ -587,7 +587,7 @@ sym(vp8_sad4x4x3_sse3):
 | 
			
		||||
;    int  src_stride,
 | 
			
		||||
;    unsigned char *ref_ptr,
 | 
			
		||||
;    int  ref_stride,
 | 
			
		||||
;    int  max_err)
 | 
			
		||||
;    int  max_sad)
 | 
			
		||||
;%define lddqu movdqu
 | 
			
		||||
global sym(vp8_sad16x16_sse3)
 | 
			
		||||
sym(vp8_sad16x16_sse3):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user