From patchwork Mon Jun 4 00:03:48 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Danil Iashchenko X-Patchwork-Id: 9241 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:11c:0:0:0:0:0 with SMTP id c28-v6csp114696jad; Sun, 3 Jun 2018 17:04:11 -0700 (PDT) X-Google-Smtp-Source: ADUXVKL3m2Q/sXpSLIschoMVV6cdvkbvtqiYV9dDzb0feiyolbjbjE/NePRWGSMKLw8fmI73QHT2 X-Received: by 2002:a1c:6744:: with SMTP id b65-v6mr7379377wmc.9.1528070651427; Sun, 03 Jun 2018 17:04:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528070651; cv=none; d=google.com; s=arc-20160816; b=f7BU6fX1717IV6IyymEAfmrWhEhGbG/ZxR+h7nPLdBNzuDK/NNiL3PQQXxqYWoWtn7 tXHBENVVRVNi1LJs21AIAPjmlQBS5uk8XEDZNYOz38BlCmUlJXouA2tWix7v0fCW3DO4 XvMyDETNmBDepHKaW5kXwioPst5lyOBoJ+POABgBd2xd0azG40LVkaOPmL70yNyzAS6Z seWa4dv78i0zbaZerXGzFZUKzejbEYbS3A7YHLtj/h/imPKaEUaMv7w0+ddO5+UjYkkR DVM3bbTnU7Rv20CP938GW2uImDr4VvTKL0HPXqXwZEvtAYjyRNslOZCEKO2+hK3a25gh WHWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=mZmbExYXvXAOv+wPEN9mnaRcmXE03p6sir6z5uyJnkk=; b=QjcTRyGGUrLEclYtobJsoUsO5fGlCwy8vcxOpMG9+CBFz5cmNVgl9OtxVevYyEshsx qvKuPq4nQkovteFvNM91FSt9Ju1DDzBkSen7z0LbojDxe8Q1SXHtxsQ3Cu3xdckHlSBv qP59fJGuYAKYbBWkY29snA08mn+/ma4YaOvQ3va1M4U28E6ekq/3pJDevyjWZWABD0JC laBkhwmJPLeAhnqBxFpRtQYU9QTd/lylWd/XxYsRf7yW6FZNWlS15xcpdVhPJlskD+xX rFpxNh/cnEcpD3f6ohThuX3dOWowbCDDnsMGDDmYbKf2PkXhxKV/VBuN9RPQyvDSakCg oDPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=l/1CKP1w; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id r6-v6si5497239wma.177.2018.06.03.17.04.10; Sun, 03 Jun 2018 17:04:11 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=l/1CKP1w; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7955768A4DD; Mon, 4 Jun 2018 03:03:22 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf0-f65.google.com (mail-lf0-f65.google.com [209.85.215.65]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AA225689B04 for ; Mon, 4 Jun 2018 03:03:16 +0300 (EEST) Received: by mail-lf0-f65.google.com with SMTP id t134-v6so22407628lff.6 for ; Sun, 03 Jun 2018 17:04:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=gNrwW5XXKRXJbeku3hIAuCwM+HRtasLe8CiBlGHNMdA=; b=l/1CKP1w1WIk9hjIwUawurTC1I1YuvVN6YL+EKLfD8vTKTHQXN10dfd2NVeEhDvxVX pxyfPneI0TB2t5LlhTec3N53ms61/s8MINQc3DaXK63UZs0f0nnmc6SIiWxdFnisoiJR o58L1iduqPDm+U17xpkUzH0BvrzzDdeFcF/znCrZZ61kIXLyGS7XRJRbrMQOdh30o3bw t/ENLlICvUAOKcmnober35UKDwA4QM4rWf1nCDeeKpORTw13JA1S0v7S/KEFgJg780C5 LawAqSJNaVKkw50kCnk/v8eQ4H48CsZwWn1eKZ9cwg4z+E4q2TstcbmwJRgBumAP4dSk BPyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=gNrwW5XXKRXJbeku3hIAuCwM+HRtasLe8CiBlGHNMdA=; b=Ftk3GrkFpbKXRwB2YTaBEj8jrfMrc2nZ+Ry6lDeFDozojlgls8DJ0C93IY2Z2sJpdG yTUwKNNsJoTtRTy3nEYpq6xUn1kRECM5uibwdhlGRoCvN7P6EMxzh78+iLaVZNgGZE5K +jRqCqLzT1OEI3x7XCra4RtgSLaHu//nqW+uo1ZqETVnBAaP1Ne0Krzt+xpYHme0GV/H aQJ+Auj3lDNxM9tGBFRCAXxDj3fAleuiOqN6UZo47VTSK24CVQBdHPoDnggBaCEteerA TqwBZAflQgRu95q97nbcRfvglBrzAcGdqElidOPqwS8Dptu530E211AFaqxVgE4coLs6 n9EA== X-Gm-Message-State: ALKqPwdpBnqzJLoFuOHXIIC9oEbFSINWP/Evi6mZKfey4BaUALCSQaEC oOJirWPjqbOUPxOhtlGyNATNS7I= X-Received: by 2002:a19:6a0f:: with SMTP id u15-v6mr9729794lfu.81.1528070641759; Sun, 03 Jun 2018 17:04:01 -0700 (PDT) Received: from dan-acer.lan (campus.ifmo.ru. [194.85.161.2]) by smtp.gmail.com with ESMTPSA id a125-v6sm2528314lfb.61.2018.06.03.17.04.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 03 Jun 2018 17:04:01 -0700 (PDT) From: Danil Iashchenko To: ffmpeg-devel@ffmpeg.org Date: Mon, 4 Jun 2018 03:03:48 +0300 Message-Id: <1528070628-8202-1-git-send-email-danyaschenko@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <34284b4b-89b3-f648-b637-c1b32d473829@jkqxz.net> References: <34284b4b-89b3-f648-b637-c1b32d473829@jkqxz.net> Subject: [FFmpeg-devel] [PATCH] libavfilter/opencl.h: Add macro for setting opencl kernel X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Danil Iashchenko MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Fixed, thanks! Also implemented macro for other filters: avgblur_opencl, convolution_opencl, unsharp_opencl, overlay_opencl. --- libavfilter/opencl.h | 13 +++++++++ libavfilter/vf_avgblur_opencl.c | 48 ++++--------------------------- libavfilter/vf_convolution_opencl.c | 43 ++++------------------------ libavfilter/vf_overlay_opencl.c | 36 ++++++----------------- libavfilter/vf_unsharp_opencl.c | 57 ++++++------------------------------- 5 files changed, 42 insertions(+), 155 deletions(-) diff --git a/libavfilter/opencl.h b/libavfilter/opencl.h index c0a4519..c192f44 100644 --- a/libavfilter/opencl.h +++ b/libavfilter/opencl.h @@ -46,6 +46,19 @@ typedef struct OpenCLFilterContext { int output_height; } OpenCLFilterContext; + +/** + * set argument to specific Kernel. + * This macro relies on usage of local label "fail" and variable avctx. + */ +#define CL_SET_KERNEL_ARG(kernel, arg_num, type, arg) \ + cle = clSetKernelArg(kernel, arg_num, sizeof(type), arg); \ + if (cle != CL_SUCCESS) { \ + av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " \ + "argument %d: error %d.\n", arg_num, cle); \ + goto fail; \ + } + /** * Return that all inputs and outputs support only AV_PIX_FMT_OPENCL. */ diff --git a/libavfilter/vf_avgblur_opencl.c b/libavfilter/vf_avgblur_opencl.c index 48cebb5..8d4c264 100644 --- a/libavfilter/vf_avgblur_opencl.c +++ b/libavfilter/vf_avgblur_opencl.c @@ -151,27 +151,9 @@ static int avgblur_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input) radius_y = 0; } - cle = clSetKernelArg(ctx->kernel_horiz, 0, sizeof(cl_mem), &inter); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "destination image argument: %d.\n", cle); - err = AVERROR_UNKNOWN; - goto fail; - } - cle = clSetKernelArg(ctx->kernel_horiz, 1, sizeof(cl_mem), &src); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "source image argument: %d.\n", cle); - err = AVERROR_UNKNOWN; - goto fail; - } - cle = clSetKernelArg(ctx->kernel_horiz, 2, sizeof(cl_int), &radius_x); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "sizeX argument: %d.\n", cle); - err = AVERROR_UNKNOWN; - goto fail; - } + CL_SET_KERNEL_ARG(ctx->kernel_horiz, 0, cl_mem, &inter); + CL_SET_KERNEL_ARG(ctx->kernel_horiz, 1, cl_mem, &src); + CL_SET_KERNEL_ARG(ctx->kernel_horiz, 2, cl_int, &radius_x); err = ff_opencl_filter_work_size_from_image(avctx, global_work, intermediate, p, 0); @@ -192,27 +174,9 @@ static int avgblur_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input) goto fail; } - cle = clSetKernelArg(ctx->kernel_vert, 0, sizeof(cl_mem), &dst); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "destination image argument: %d.\n", cle); - err = AVERROR_UNKNOWN; - goto fail; - } - cle = clSetKernelArg(ctx->kernel_vert, 1, sizeof(cl_mem), &inter); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "source image argument: %d.\n", cle); - err = AVERROR_UNKNOWN; - goto fail; - } - cle = clSetKernelArg(ctx->kernel_vert, 2, sizeof(cl_int), &radius_y); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "sizeY argument: %d.\n", cle); - err = AVERROR_UNKNOWN; - goto fail; - } + CL_SET_KERNEL_ARG(ctx->kernel_vert, 0, cl_mem, &dst); + CL_SET_KERNEL_ARG(ctx->kernel_vert, 1, cl_mem, &inter); + CL_SET_KERNEL_ARG(ctx->kernel_vert, 2, cl_int, &radius_y); err = ff_opencl_filter_work_size_from_image(avctx, global_work, output, p, 0); diff --git a/libavfilter/vf_convolution_opencl.c b/libavfilter/vf_convolution_opencl.c index 2df51e0..4d0ecf8 100644 --- a/libavfilter/vf_convolution_opencl.c +++ b/libavfilter/vf_convolution_opencl.c @@ -204,43 +204,12 @@ static int convolution_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input) if (!dst) break; - cle = clSetKernelArg(ctx->kernel, 0, sizeof(cl_mem), &dst); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "destination image argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 1, sizeof(cl_mem), &src); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "source image argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 2, sizeof(cl_int), &ctx->dims[p]); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "matrix size argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 3, sizeof(cl_mem), &ctx->matrix[p]); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "matrix argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 4, sizeof(cl_float), &ctx->rdivs[p]); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "rdiv argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 5, sizeof(cl_float), &ctx->biases[p]); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "bias argument: %d.\n", cle); - goto fail; - } - + CL_SET_KERNEL_ARG(ctx->kernel, 0, cl_mem, &dst); + CL_SET_KERNEL_ARG(ctx->kernel, 1, cl_mem, &src); + CL_SET_KERNEL_ARG(ctx->kernel, 2, cl_int, &ctx->dims[p]); + CL_SET_KERNEL_ARG(ctx->kernel, 3, cl_mem, &ctx->matrix[p]); + CL_SET_KERNEL_ARG(ctx->kernel, 4, cl_float, &ctx->rdivs[p]); + CL_SET_KERNEL_ARG(ctx->kernel, 5, cl_float, &ctx->biases[p]); err = ff_opencl_filter_work_size_from_image(avctx, global_work, output, p, 0); if (err < 0) diff --git a/libavfilter/vf_overlay_opencl.c b/libavfilter/vf_overlay_opencl.c index b43050d..8046c8d 100644 --- a/libavfilter/vf_overlay_opencl.c +++ b/libavfilter/vf_overlay_opencl.c @@ -167,47 +167,31 @@ static int overlay_opencl_blend(FFFrameSync *fs) kernel_arg = 0; mem = (cl_mem)output->data[plane]; - cle = clSetKernelArg(ctx->kernel, kernel_arg++, sizeof(cl_mem), &mem); - if (cle != CL_SUCCESS) - goto fail_kernel_arg; + CL_SET_KERNEL_ARG(ctx->kernel, kernel_arg++, cl_mem, &mem); mem = (cl_mem)input_main->data[plane]; - cle = clSetKernelArg(ctx->kernel, kernel_arg++, sizeof(cl_mem), &mem); - if (cle != CL_SUCCESS) - goto fail_kernel_arg; + CL_SET_KERNEL_ARG(ctx->kernel, kernel_arg++, cl_mem, &mem); mem = (cl_mem)input_overlay->data[plane]; - cle = clSetKernelArg(ctx->kernel, kernel_arg++, sizeof(cl_mem), &mem); - if (cle != CL_SUCCESS) - goto fail_kernel_arg; + CL_SET_KERNEL_ARG(ctx->kernel, kernel_arg++, cl_mem, &mem); if (ctx->alpha_separate) { mem = (cl_mem)input_overlay->data[ctx->nb_planes]; - cle = clSetKernelArg(ctx->kernel, kernel_arg++, sizeof(cl_mem), &mem); - if (cle != CL_SUCCESS) - goto fail_kernel_arg; + CL_SET_KERNEL_ARG(ctx->kernel, kernel_arg++, cl_mem, &mem); } x = ctx->x_position / (plane == 0 ? 1 : ctx->x_subsample); y = ctx->y_position / (plane == 0 ? 1 : ctx->y_subsample); - cle = clSetKernelArg(ctx->kernel, kernel_arg++, sizeof(cl_int), &x); - if (cle != CL_SUCCESS) - goto fail_kernel_arg; - cle = clSetKernelArg(ctx->kernel, kernel_arg++, sizeof(cl_int), &y); - if (cle != CL_SUCCESS) - goto fail_kernel_arg; + CL_SET_KERNEL_ARG(ctx->kernel, kernel_arg++, cl_int, &x); + CL_SET_KERNEL_ARG(ctx->kernel, kernel_arg++, cl_int, &y); if (ctx->alpha_separate) { cl_int alpha_adj_x = plane == 0 ? 1 : ctx->x_subsample; cl_int alpha_adj_y = plane == 0 ? 1 : ctx->y_subsample; - cle = clSetKernelArg(ctx->kernel, kernel_arg++, sizeof(cl_int), &alpha_adj_x); - if (cle != CL_SUCCESS) - goto fail_kernel_arg; - cle = clSetKernelArg(ctx->kernel, kernel_arg++, sizeof(cl_int), &alpha_adj_y); - if (cle != CL_SUCCESS) - goto fail_kernel_arg; + CL_SET_KERNEL_ARG(ctx->kernel, kernel_arg++, cl_int, &alpha_adj_x); + CL_SET_KERNEL_ARG(ctx->kernel, kernel_arg++, cl_int, &alpha_adj_y); } err = ff_opencl_filter_work_size_from_image(avctx, global_work, @@ -241,10 +225,6 @@ static int overlay_opencl_blend(FFFrameSync *fs) return ff_filter_frame(outlink, output); -fail_kernel_arg: - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel arg %d: %d.\n", - kernel_arg, cle); - err = AVERROR(EIO); fail: av_frame_free(&output); return err; diff --git a/libavfilter/vf_unsharp_opencl.c b/libavfilter/vf_unsharp_opencl.c index 19c9185..385d851 100644 --- a/libavfilter/vf_unsharp_opencl.c +++ b/libavfilter/vf_unsharp_opencl.c @@ -268,56 +268,17 @@ static int unsharp_opencl_filter_frame(AVFilterLink *inlink, AVFrame *input) if (!dst) break; - cle = clSetKernelArg(ctx->kernel, 0, sizeof(cl_mem), &dst); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "destination image argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 1, sizeof(cl_mem), &src); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "source image argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 2, sizeof(cl_int), &ctx->plane[p].size_x); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "matrix size argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 3, sizeof(cl_int), &ctx->plane[p].size_y); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "matrix size argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 4, sizeof(cl_float), &ctx->plane[p].amount); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "amount argument: %d.\n", cle); - goto fail; - } + CL_SET_KERNEL_ARG(ctx->kernel, 0, cl_mem, &dst); + CL_SET_KERNEL_ARG(ctx->kernel, 1, cl_mem, &src); + CL_SET_KERNEL_ARG(ctx->kernel, 2, cl_int, &ctx->plane[p].size_x); + CL_SET_KERNEL_ARG(ctx->kernel, 3, cl_int, &ctx->plane[p].size_y); + CL_SET_KERNEL_ARG(ctx->kernel, 4, cl_float, &ctx->plane[p].amount); + if (ctx->global) { - cle = clSetKernelArg(ctx->kernel, 5, sizeof(cl_mem), &ctx->plane[p].matrix); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "matrix argument: %d.\n", cle); - goto fail; - } + CL_SET_KERNEL_ARG(ctx->kernel, 5, cl_mem, &ctx->plane[p].matrix); } else { - cle = clSetKernelArg(ctx->kernel, 5, sizeof(cl_mem), &ctx->plane[p].coef_x); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "x-coef argument: %d.\n", cle); - goto fail; - } - cle = clSetKernelArg(ctx->kernel, 6, sizeof(cl_mem), &ctx->plane[p].coef_y); - if (cle != CL_SUCCESS) { - av_log(avctx, AV_LOG_ERROR, "Failed to set kernel " - "y-coef argument: %d.\n", cle); - goto fail; - } + CL_SET_KERNEL_ARG(ctx->kernel, 5, cl_mem, &ctx->plane[p].coef_x); + CL_SET_KERNEL_ARG(ctx->kernel, 6, cl_mem, &ctx->plane[p].coef_y); } err = ff_opencl_filter_work_size_from_image(avctx, global_work, output, p,