[FFmpeg-devel] [PATCH] vf_unsharp_opencl: Do not apply kernel to locations outside images

Jun Zhao mypopydev at gmail.com
Fri Mar 9 03:49:53 EET 2018



On 2018/3/9 8:47, Mark Thompson wrote:
> ---
> (Oops.)
>
>
>  libavfilter/vf_unsharp_opencl.c | 24 ++++++++++++++++++++----
>  1 file changed, 20 insertions(+), 4 deletions(-)
>
> diff --git a/libavfilter/vf_unsharp_opencl.c b/libavfilter/vf_unsharp_opencl.c
> index 6a453c014b..3ee1b5b4ae 100644
> --- a/libavfilter/vf_unsharp_opencl.c
> +++ b/libavfilter/vf_unsharp_opencl.c
> @@ -236,6 +236,7 @@ static int unsharp_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
>      size_t global_work[2];
>      size_t local_work[2];
>      cl_mem src, dst;
> +    size_t plane_width, plane_height;
>      int err, p;
>  
>      av_log(ctx, AV_LOG_DEBUG, "Filter input: %s, %ux%u (%"PRId64").\n",
> @@ -268,6 +269,21 @@ static int unsharp_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
>          if (!dst)
>              break;
>  
> +        cle = clGetImageInfo(src, CL_IMAGE_WIDTH,
> +                             sizeof(plane_width), &plane_width, NULL);
> +        if (cle != CL_SUCCESS) {
> +            av_log(avctx, AV_LOG_ERROR, "Failed to get plane %d "
> +                   "width: %d.\n", p, cle);
> +            goto fail;
> +        }
> +        cle = clGetImageInfo(src, CL_IMAGE_HEIGHT,
> +                             sizeof(plane_height), &plane_height, NULL);
> +        if (cle != CL_SUCCESS) {
> +            av_log(avctx, AV_LOG_ERROR, "Failed to get plane %d "
> +                   "height: %d.\n", p, cle);
> +            goto fail;
> +        }
> +
>          cle = clSetKernelArg(ctx->kernel, 0, sizeof(cl_mem), &dst);
>          if (cle != CL_SUCCESS) {
>              av_log(avctx, AV_LOG_ERROR, "Failed to set kernel "
> @@ -321,11 +337,11 @@ static int unsharp_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input)
>          }
>  
>          if (ctx->global) {
> -            global_work[0] = output->width;
> -            global_work[1] = output->height;
> +            global_work[0] = plane_width;
> +            global_work[1] = plane_height;
>          } else {
> -            global_work[0] = FFALIGN(output->width,  16);
> -            global_work[1] = FFALIGN(output->height, 16);
> +            global_work[0] = FFALIGN(plane_width,  16);
> +            global_work[1] = FFALIGN(plane_height, 16);
>              local_work[0]  = 16;
>              local_work[1]  = 16;
>          }
LGTM, maybe add some commit message more better :)


More information about the ffmpeg-devel mailing list