You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

117 lines
4.0 KiB

// #define TEST
#define X 95
#define Y 22
//#define USE_DBL
#ifdef USE_DBL
#define TYPE_FLT double
#define TYPE_INT long
#define MASK 0xFFFF
#define SHIFT 16
#define EPSILSON 4.94065645841247E-324
#else
#define TYPE_FLT float
#define TYPE_INT int
#define MASK 0x00FF
#define SHIFT 8
#define EPSILSON 1.401298E-45
#endif
constant sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE |
CLK_ADDRESS_CLAMP_TO_EDGE |
CLK_FILTER_LINEAR;
struct input
{
int criFilterMode;
int frameCntr;
int scenariFrameNo;
float zeroSteeringFrameWeight;
float nonZeroSteeringFrameWeight;
};
TYPE_FLT read_data(image2d_t input_frame, int x, int z)
{
int2 gid = (int2)(x, z);
uint4 pixel = read_imageui(input_frame, sampler, gid);
TYPE_INT temp = (TYPE_INT)((TYPE_INT)pixel.x & MASK) |
(TYPE_INT)(((TYPE_INT)pixel.y & MASK) << SHIFT) |
(TYPE_INT)(((TYPE_INT)pixel.z & MASK) << (SHIFT * 2)) |
(TYPE_INT)(((TYPE_INT)pixel.w & MASK) << (SHIFT * 3));
TYPE_FLT raw_data = *((TYPE_FLT*)(&temp));
return raw_data;
}
// kernel void Cri(read_only image2d_array_t input_frame, read_write image2d_t output_frame, struct input params)
// {
// //int2 gid = (int2)(get_global_id(0), get_global_id(1));
// //TYPE_FLT input = read_data(input_frame[0], gid.x, gid.y);
// int4 gid = ((int4)(get_global_size(0), get_global_size(1),get_global_size(2) , 0));
// // printf(" :hi! I am the cri kernel 1");
// // const int rows = get_image_height(input_frame);
// // const int cols = get_image_width(input_frame);
// printf("gid : %d\n",gid.z);
// // printf(input_frame);
// // int4 f = read_imagei(input_frame, (rows,cols,1,1));
// // printf("out: %a | ", f.x);
// // output_frame = input_frame;
// printf(" :hi! I am the cri kernel");
// }
int isNonzeropixel(int x, int y, image2d_t arrayInput)
{
if(read_data(x,y,input_frame) == 0.0F)
return 0;
else
return 1;
}
kernel void Cri(read_only image2d_t input_frame1, read_only image2d_t input_frame2, read_only image2d_t input_frame3,
read_only image2d_t input_frame4, read_only image2d_t input_frame5, read_only image2d_t input_frame6,
read_only image2d_t input_frame7, read_only image2d_t input_frame8, read_only image2d_t input_frame9,
read_only image2d_t input_frame10, read_only image2d_t input_frame11, read_write image2d_t output_frame, struct input params)
{
int2 gid = (int2)(get_global_id(0), get_global_id(1));
image2d_t imgArray[11] = {input_frame1, input_frame2, input_frame3,
input_frame4, input_frame5, input_frame6,
input_frame7, input_frame8, input_frame9,
input_frame10, input_frame11};
const int rows = get_image_height(input_frame);
const int cols = get_image_width(input_frame);
int nonZeroFrameNo = 0;
int i = 1;
for(i= 1; i < 11;i++)
{
nonZeroFrameNo = nonZeroFrameNo + isNonzeropixel(gid.x,gid.y,imgArray[i]);
}
float additionalPoint = (1 - params.zeroSteeringFrameWeight - nonZeroFrameNo * params.nonZeroSteeringFrameWeight);
float pixelWeight[12] = {0.0F};
float sum = 0;
for(i = 1; i < 11; i++)
{
pixelWeight[i] = params.nonZeroSteeringFrameWeight + additionalPoint * params.nonZeroSteeringFrameWeight/(params.nonZeroSteeringFrameWeight * nonZeroFrameNo + params.zeroSteeringFrameWeight);
sum = pixelWeight[i];
}
pixelWeight[0] = 1 - sum;
TYPE_FLT output_data = 0;
for(i = 0; i < 11; i++)
{
output_data = output_data + (pixelWeight[i] * read_data(gid.x,gid.y,imgArray[i])
}
TYPE_INT out = *((TYPE_INT*)(&output_data));
uint4 pixel;
pixel.x = (TYPE_INT)(out & MASK);
pixel.y = (TYPE_INT)((out >> SHIFT) & MASK);
pixel.z = (TYPE_INT)((out >> (SHIFT *2)) & MASK);
pixel.w = (TYPE_INT)((out >> (SHIFT * 3)) & MASK);
write_imageui(output_frame, gid, pixel);
}