| /* |
| * function: kernel_csc |
| * input: image2d_t as read only |
| * output: image2d_t as write only |
| * vertical_offset, vertical offset from y to uv |
| */ |
| |
| "__kernel void kernel_csc (__read_only image2d_t input, __write_only image2d_t output, uint vertical_offset) " |
| "{ " |
| " int x = get_global_id (0); " |
| " int y = get_global_id (1); " |
| " sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE | CLK_ADDRESS_NONE | CLK_FILTER_NEAREST; " |
| " float4 pixel_in1 = read_imagef(input, sampler, (int2)(2*x,2*y)); " |
| " float4 pixel_in2 = read_imagef(input, sampler, (int2)(2*x+1,2*y)); " |
| " float4 pixel_in3 = read_imagef(input, sampler, (int2)(2*x,2*y+1)); " |
| " float4 pixel_in4 = read_imagef(input, sampler, (int2)(2*x+1,2*y+1)); " |
| " float4 pixel_out_y1,pixel_out_y2,pixel_out_y3,pixel_out_y4,pixel_out_u,pixel_out_v; " |
| " pixel_out_y1.x = 0.3*pixel_in1.x + 0.59*pixel_in1.y + 0.11*pixel_in1.z; " |
| " pixel_out_y1.y = 0.0; " |
| " pixel_out_y1.z = 0.0; " |
| " pixel_out_y1.w= 1.0; " |
| " pixel_out_y2.x = 0.3*pixel_in2.x + 0.59*pixel_in2.y + 0.11*pixel_in2.z; " |
| " pixel_out_y2.y = 0.0; " |
| " pixel_out_y2.z = 0.0; " |
| " pixel_out_y2.w= 1.0; " |
| " pixel_out_y3.x = 0.3*pixel_in3.x + 0.59*pixel_in3.y + 0.11*pixel_in3.z; " |
| " pixel_out_y3.y = 0.0; " |
| " pixel_out_y3.z = 0.0; " |
| " pixel_out_y3.w= 1.0; " |
| " pixel_out_y4.x = 0.3*pixel_in4.x + 0.59*pixel_in4.y + 0.11*pixel_in4.z; " |
| " pixel_out_y4.y = 0.0; " |
| " pixel_out_y4.z = 0.0; " |
| " pixel_out_y4.w= 1.0; " |
| " pixel_out_u.x = (0.493*(pixel_in1.z - (0.3*pixel_in1.x + 0.59*pixel_in1.y + 0.11*pixel_in1.z))*255.0 +128.0)/255.0; " |
| " pixel_out_u.y = 0.0; " |
| " pixel_out_u.z = 0.0; " |
| " pixel_out_u.w= 1.0; " |
| " pixel_out_v.x = (0.877*(pixel_in1.x - (0.3*pixel_in1.x + 0.59*pixel_in1.y + 0.11*pixel_in1.z))*255.0 +128.0)/255.0; " |
| " pixel_out_v.y = 0.0; " |
| " pixel_out_v.z = 0.0; " |
| " pixel_out_v.w= 1.0; " |
| " write_imagef(output, (int2)(2*x,2*y), pixel_out_y1); " |
| " write_imagef(output, (int2)(2*x+1,2*y), pixel_out_y2); " |
| " write_imagef(output, (int2)(2*x,2*y+1), pixel_out_y3); " |
| " write_imagef(output, (int2)(2*x+1,2*y+1), pixel_out_y4); " |
| " write_imagef(output, (int2)(2*x,y + vertical_offset), pixel_out_u); " |
| " write_imagef(output, (int2)(2*x+1,y + vertical_offset), pixel_out_v); " |
| "} " |
| |