mirror of
https://github.com/nyanmisaka/ffmpeg-rockchip.git
synced 2026-04-23 16:13:29 +08:00
lavfi: add sobel, prewitt, roberts filters
Add opencl version of sobel, prewitt, roberts filters.
This commit is contained in:
committed by
Mark Thompson
parent
54b425a7fa
commit
581bafa83b
@@ -43,3 +43,85 @@ __kernel void convolution_global(__write_only image2d_t dst,
|
||||
float4 dstPix = convPix * div + bias;
|
||||
write_imagef(dst, loc, dstPix);
|
||||
}
|
||||
|
||||
|
||||
__kernel void sobel_global(__write_only image2d_t dst,
|
||||
__read_only image2d_t src,
|
||||
float div,
|
||||
float bias)
|
||||
{
|
||||
const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
|
||||
CLK_ADDRESS_CLAMP_TO_EDGE |
|
||||
CLK_FILTER_NEAREST);
|
||||
|
||||
int2 loc = (int2)(get_global_id(0), get_global_id(1));
|
||||
|
||||
float4 sum1 = read_imagef(src, sampler, loc + (int2)(-1,-1)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 0,-1)) * -2 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1,-1)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)(-1, 1)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 0, 1)) * 2 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1, 1)) * 1;
|
||||
|
||||
float4 sum2 = read_imagef(src, sampler, loc + (int2)(-1,-1)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)(-1, 0)) * -2 +
|
||||
read_imagef(src, sampler, loc + (int2)(-1, 1)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1,-1)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1, 0)) * 2 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1, 1)) * 1;
|
||||
|
||||
float4 dstPix = hypot(sum1, sum2) * div + bias;
|
||||
write_imagef(dst, loc, dstPix);
|
||||
}
|
||||
|
||||
__kernel void prewitt_global(__write_only image2d_t dst,
|
||||
__read_only image2d_t src,
|
||||
float div,
|
||||
float bias)
|
||||
{
|
||||
const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
|
||||
CLK_ADDRESS_CLAMP_TO_EDGE |
|
||||
CLK_FILTER_NEAREST);
|
||||
|
||||
int2 loc = (int2)(get_global_id(0), get_global_id(1));
|
||||
|
||||
float4 sum1 = read_imagef(src, sampler, loc + (int2)(-1,-1)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 0,-1)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1,-1)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)(-1, 1)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 0, 1)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1, 1)) * -1;
|
||||
|
||||
float4 sum2 = read_imagef(src, sampler, loc + (int2)(-1,-1)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)(-1, 0)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)(-1, 1)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1,-1)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1, 0)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 1, 1)) * -1;
|
||||
|
||||
float4 dstPix = hypot(sum1, sum2) * div + bias;
|
||||
write_imagef(dst, loc, dstPix);
|
||||
}
|
||||
|
||||
__kernel void roberts_global(__write_only image2d_t dst,
|
||||
__read_only image2d_t src,
|
||||
float div,
|
||||
float bias)
|
||||
{
|
||||
const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
|
||||
CLK_ADDRESS_CLAMP_TO_EDGE |
|
||||
CLK_FILTER_NEAREST);
|
||||
|
||||
int2 loc = (int2)(get_global_id(0), get_global_id(1));
|
||||
|
||||
float4 sum1 = read_imagef(src, sampler, loc + (int2)(-1,-1)) * 1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 0,-1)) * -1;
|
||||
|
||||
|
||||
float4 sum2 = read_imagef(src, sampler, loc + (int2)(-1, 0)) * -1 +
|
||||
read_imagef(src, sampler, loc + (int2)( 0, 0)) * 1;
|
||||
|
||||
|
||||
float4 dstPix = hypot(sum1, sum2) * div + bias;
|
||||
write_imagef(dst, loc, dstPix);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user