Commit 6135c958 authored by drfer3's avatar drfer3 Committed by Mark Thompson

lavfi: Add OpenCL avgblur filter

Behaves like the existing avgblur filter, except working on OpenCL
hardware frames. Takes exactly the same options.
Signed-off-by: 's avatarMark Thompson <sw@jkqxz.net>
parent 9313422d
......@@ -3228,6 +3228,7 @@ aresample_filter_deps="swresample"
ass_filter_deps="libass"
atempo_filter_deps="avcodec"
atempo_filter_select="rdft"
avgblur_opencl_filter_deps="opencl"
azmq_filter_deps="libzmq"
blackframe_filter_deps="gpl"
boxblur_filter_deps="gpl"
......
......@@ -139,6 +139,8 @@ OBJS-$(CONFIG_ALPHAMERGE_FILTER) += vf_alphamerge.o
OBJS-$(CONFIG_ASS_FILTER) += vf_subtitles.o
OBJS-$(CONFIG_ATADENOISE_FILTER) += vf_atadenoise.o
OBJS-$(CONFIG_AVGBLUR_FILTER) += vf_avgblur.o
OBJS-$(CONFIG_AVGBLUR_OPENCL_FILTER) += vf_avgblur_opencl.o opencl.o \
opencl/avgblur.o
OBJS-$(CONFIG_BBOX_FILTER) += bbox.o vf_bbox.o
OBJS-$(CONFIG_BENCH_FILTER) += f_bench.o
OBJS-$(CONFIG_BITPLANENOISE_FILTER) += vf_bitplanenoise.o
......
......@@ -149,6 +149,7 @@ static void register_all(void)
REGISTER_FILTER(ASS, ass, vf);
REGISTER_FILTER(ATADENOISE, atadenoise, vf);
REGISTER_FILTER(AVGBLUR, avgblur, vf);
REGISTER_FILTER(AVGBLUR_OPENCL, avgblur_opencl, vf);
REGISTER_FILTER(BBOX, bbox, vf);
REGISTER_FILTER(BENCH, bench, vf);
REGISTER_FILTER(BITPLANENOISE, bitplanenoise, vf);
......
/*
* Copyright (c) 2018 Dylan Fernando
*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
__kernel void avgblur_horiz(__write_only image2d_t dst,
__read_only image2d_t src,
int rad)
{
const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
CLK_FILTER_NEAREST);
int2 loc = (int2)(get_global_id(0), get_global_id(1));
int2 size = (int2)(get_global_size(0), get_global_size(1));
int count = 0;
float4 acc = (float4)(0,0,0,0);
for (int xx = max(0, loc.x - rad); xx < min(loc.x + rad + 1, size.x); xx++) {
count++;
acc += read_imagef(src, sampler, (int2)(xx, loc.y));
}
write_imagef(dst, loc, acc / count);
}
__kernel void avgblur_vert(__write_only image2d_t dst,
__read_only image2d_t src,
int radv)
{
const sampler_t sampler = (CLK_NORMALIZED_COORDS_FALSE |
CLK_FILTER_NEAREST);
int2 loc = (int2)(get_global_id(0), get_global_id(1));
int2 size = (int2)(get_global_size(0), get_global_size(1));
int count = 0;
float4 acc = (float4)(0,0,0,0);
for (int yy = max(0, loc.y - radv); yy < min(loc.y + radv + 1, size.y); yy++) {
count++;
acc += read_imagef(src, sampler, (int2)(loc.x, yy));
}
write_imagef(dst, loc, acc / count);
}
......@@ -19,6 +19,7 @@
#ifndef AVFILTER_OPENCL_SOURCE_H
#define AVFILTER_OPENCL_SOURCE_H
extern const char *ff_opencl_source_avgblur;
extern const char *ff_opencl_source_overlay;
extern const char *ff_opencl_source_unsharp;
......
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment