vortex/tests/opencl/sad/sad.h
2021-06-13 17:42:04 -07:00

83 lines
2.6 KiB
C

/***************************************************************************
*cr
*cr (C) Copyright 2007 The Board of Trustees of the
*cr University of Illinois
*cr All Rights Reserved
*cr
***************************************************************************/
/* Search offsets within 16 pixels of (0,0) */
#define SEARCH_RANGE 16
/* The total search area is 33 pixels square */
#define SEARCH_DIMENSION (2*SEARCH_RANGE+1)
/* The total number of search positions is 33^2 */
#define MAX_POS 1089
/* This is padded to a multiple of 8 when allocating memory */
#define MAX_POS_PADDED 1096
/* VBSME block indices in the SAD array for different
* block sizes. The index is computed from the
* image size in macroblocks. Block sizes are (height, width):
* 1: 16 by 16 pixels, one block per macroblock
* 2: 8 by 16 pixels, 2 blocks per macroblock
* 3: 16 by 8 pixels, 2 blocks per macroblock
* 4: 8 by 8 pixels, 4 blocks per macroblock
* 5: 4 by 8 pixels, 8 blocks per macroblock
* 6: 8 by 4 pixels, 8 blocks per macroblock
* 7: 4 by 4 pixels, 16 blocks per macroblock
*/
#define SAD_TYPE_1_IX(image_size) 0
#define SAD_TYPE_2_IX(image_size) ((image_size)*MAX_POS_PADDED)
#define SAD_TYPE_3_IX(image_size) ((image_size)*(3*MAX_POS_PADDED))
#define SAD_TYPE_4_IX(image_size) ((image_size)*(5*MAX_POS_PADDED))
#define SAD_TYPE_5_IX(image_size) ((image_size)*(9*MAX_POS_PADDED))
#define SAD_TYPE_6_IX(image_size) ((image_size)*(17*MAX_POS_PADDED))
#define SAD_TYPE_7_IX(image_size) ((image_size)*(25*MAX_POS_PADDED))
#define SAD_TYPE_IX(n, image_size) \
((n == 1) ? SAD_TYPE_1_IX(image_size) : \
((n == 2) ? SAD_TYPE_2_IX(image_size) : \
((n == 3) ? SAD_TYPE_3_IX(image_size) : \
((n == 4) ? SAD_TYPE_4_IX(image_size) : \
((n == 5) ? SAD_TYPE_5_IX(image_size) : \
((n == 6) ? SAD_TYPE_6_IX(image_size) : \
(SAD_TYPE_7_IX(image_size) \
)))))))
#define SAD_TYPE_1_CT 1
#define SAD_TYPE_2_CT 2
#define SAD_TYPE_3_CT 2
#define SAD_TYPE_4_CT 4
#define SAD_TYPE_5_CT 8
#define SAD_TYPE_6_CT 8
#define SAD_TYPE_7_CT 16
#define SAD_TYPE_CT(n) \
((n == 1) ? SAD_TYPE_1_CT : \
((n == 2) ? SAD_TYPE_2_CT : \
((n == 3) ? SAD_TYPE_3_CT : \
((n == 4) ? SAD_TYPE_4_CT : \
((n == 5) ? SAD_TYPE_5_CT : \
((n == 6) ? SAD_TYPE_6_CT : \
(SAD_TYPE_7_CT \
)))))))
#ifdef __cplusplus
extern "C" {
#endif
void sad4_cpu(unsigned short *blk_sad,
unsigned short *frame,
unsigned short *ref,
int mb_width,
int mb_height);
void larger_sads(unsigned short *sads,
int mbs);
#ifdef __cplusplus
}
#endif