应用prewitt运算符输入视频流。
过滤器接受以下选项:
planes
设置要处理的平面,将复制未处理的平面。 默认值为0xf,将处理所有平面。
scale
设定值将与过滤结果相乘。
delta
设置将添加到筛选结果的值。
使用OpenCL程序过滤视频。
source
OpenCL程序源文件。
kernel
程序中的内核名称。
inputs
过滤器的输入数量。 默认为1。
size, s
输出帧的大小。 默认值与第一个输入相同。
程序源文件必须包含具有给定名称的内核函数,该函数将针对输出的每个平面运行一次。 平面上的每次运行都会作为单独的2D全局NDRange排队,每个像素都会生成一个工作项。 因此,每个工作项的全局ID偏移量是目标图像中像素的坐标。
学习地址:音视频新手快速入门必备系列-FFmpeg+SDL播放器开发实现-学习视频教程-腾讯课堂
【文章福利】免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~
![]()
内核函数需要采用以下参数:
__ write_only image2d_t。这个图像将成为输出; 内核应该写出所有内容。
unsigned int。这是一个从零开始的计数器,每帧增加一个。
__ read_only image2d_t。这些是每个输入的最新图像。 内核可以从它们读取以生成输出,但是它们无法写入。
示例程序如下:
将输入复制到输出(输出必须与输入的大小相同)。
- __kernel void copy(__write_only image2d_t destination,
- unsigned int index,
- __read_only image2d_t source)
- {
- const sampler_t sampler = CLK_NORMALIZED_COORDS_FALSE;
-
- int2 location = (int2)(get_global_id(0), get_global_id(1));
-
- float4 value = read_imagef(source, sampler, location);
-
- write_imagef(destination, location, value);
- }
应用简单的转换,使用索引计数器增加一个量的输入。 采样器对像素值进行线性插值,输出的尺寸不必与输入相同。
- __kernel void rotate_image(__write_only image2d_t dst,
- unsigned int index,
- __read_only image2d_t src)
- {
- const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
- CLK_FILTER_LINEAR);
-
- float angle = (float