checkasm: motion: Test different h parameters
Previously, the checkasm test always passed h=8, so no other cases were tested. Out of the me_cmp functions, in practice, some functions are hardcoded to always assume a 8x8 block (ignoring the h parameter), while others do use the parameter. For those with hardcoded height, both the reference C function and the assembly implementations ignore the parameter similarly. The documentation for the functions indicate that heights between w/2 and 2*w, within the range of 4 to 16, should be supported. This patch just tests random heights in that range, without knowing what width the current function actually uses. Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
		
							parent
							
								
									dc55e63578
								
							
						
					
					
						commit
						d69d12a5b9
					
				@ -45,7 +45,7 @@ static void test_motion(const char *name, me_cmp_func test_func)
 | 
			
		||||
    /* motion estimation can look up to 17 bytes ahead */
 | 
			
		||||
    static const int look_ahead = 17;
 | 
			
		||||
 | 
			
		||||
    int i, x, y, d1, d2;
 | 
			
		||||
    int i, x, y, h, d1, d2;
 | 
			
		||||
    uint8_t *ptr;
 | 
			
		||||
 | 
			
		||||
    LOCAL_ALIGNED_16(uint8_t, img1, [WIDTH * HEIGHT]);
 | 
			
		||||
@ -68,14 +68,16 @@ static void test_motion(const char *name, me_cmp_func test_func)
 | 
			
		||||
        for (i = 0; i < ITERATIONS; i++) {
 | 
			
		||||
            x = rnd() % (WIDTH - look_ahead);
 | 
			
		||||
            y = rnd() % (HEIGHT - look_ahead);
 | 
			
		||||
            // Pick a random h between 4 and 16; pick an even value.
 | 
			
		||||
            h = 4 + ((rnd() % (16 + 1 - 4)) & ~1);
 | 
			
		||||
 | 
			
		||||
            ptr = img2 + y * WIDTH + x;
 | 
			
		||||
            d2 = call_ref(NULL, img1, ptr, WIDTH, 8);
 | 
			
		||||
            d1 = call_new(NULL, img1, ptr, WIDTH, 8);
 | 
			
		||||
            d2 = call_ref(NULL, img1, ptr, WIDTH, h);
 | 
			
		||||
            d1 = call_new(NULL, img1, ptr, WIDTH, h);
 | 
			
		||||
 | 
			
		||||
            if (d1 != d2) {
 | 
			
		||||
                fail();
 | 
			
		||||
                printf("func: %s, x=%d y=%d, error: asm=%d c=%d\n", name, x, y, d1, d2);
 | 
			
		||||
                printf("func: %s, x=%d y=%d h=%d, error: asm=%d c=%d\n", name, x, y, h, d1, d2);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user