From patchwork Wed Jan 3 22:47:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 7110 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.79.195 with SMTP id r64csp16445399jad; Wed, 3 Jan 2018 14:47:37 -0800 (PST) X-Google-Smtp-Source: ACJfBotaploQGIWav40MXyzFUvK1e4sqRLKxCbOJljkJO3w4fF8/6RTBLRqkIdLMQ2U/SrbbVhit X-Received: by 10.223.154.241 with SMTP id a104mr2716732wrc.48.1515019657675; Wed, 03 Jan 2018 14:47:37 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1515019657; cv=none; d=google.com; s=arc-20160816; b=Eezzfg7BHauzIKMOejE4qlcZpQ9ZSxRY+BF5qD3Y3Dmozr1qqnJ3ujKFUhEC1vfjhP T02ry94XmgHRvlqnupp00tGRpdSVLsO1kueCbn+gL8H5hTSbR9jccAsLRChAIO3eOULx KNciX+0N0ToQYXhmKXcB80gzQOGTYouOIGg3MSpkNSTocOkiQzCN7G9gt1Y3yZNv5Hu2 5ZLrKsHcZwGVLyhlk6dTDmGB02jGVsOkG58iIeJXgJnzOKHfpiOyveidsI7+78bR5PH5 +Cm7Ed5qm5Oi/dMrqaIDz5Tz52VFgIR9wFk1FsKY2+qhIy9QQdIRwYAh/1+LvdCCLvJF 0/mg== 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:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=FK/iCErnejYECzSTiSTdXt0tTD7dDy8x7k7fC/QGYBc=; b=LKSPIRGxzbZm4pQfWXRjxrHjDo0vopZLoENF8D/DFXyZ26ID5RJBeukLzQBGgc3fyB evC6+GoT8Qch/S70EYzr+WpCOJbM6U4ldhVP3mDFTePzvgWbogoTgtBTW+a6N7NxCAlh U0BPND5NaQpZ4nanMK8GeLHPP4yNktyj5jc/zD0wKNbv+uZtl9aTKheIGC0exq/VvDr3 IbGwT9yoOc20rpH7MUT3o1pi/M/pIeSmsOc1yK8Ia2pXbT7H2cXQr0FE9dJPbPmaxKXV yPEzK8ityxLUV4ISXMSkIZF5YvoCOJgSHRtYV3FS2k89/HlBQ0SnzyywyfmotbbD/bPw Y1MA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=BkyN3z5L; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id p17si1558690wrp.318.2018.01.03.14.47.37; Wed, 03 Jan 2018 14:47:37 -0800 (PST) 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=@jkqxz-net.20150623.gappssmtp.com header.s=20150623 header.b=BkyN3z5L; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 014536898AC; Thu, 4 Jan 2018 00:47:20 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr0-f196.google.com (mail-wr0-f196.google.com [209.85.128.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 890016883E7 for ; Thu, 4 Jan 2018 00:47:14 +0200 (EET) Received: by mail-wr0-f196.google.com with SMTP id w107so3322648wrb.9 for ; Wed, 03 Jan 2018 14:47:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jkqxz-net.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id; bh=iaK0WEY8juG2masG29WlCz2N6X4/zaChlVoz04vNgMQ=; b=BkyN3z5Ly9DTSXrdOyhOty9xSZ4nZllX35ZWqCDV+j/ra+BEEP6B0OfLRAz0N8Czvs wXQvDz3KqO55z4em6ZI+Tc0yx0rzHVwimjF6nxOFBsWACTCbMTBjcnEW6Uvx2CenPTXQ nKYUBt12Xk25DAvIk34KLUGXrORzz3UPIVWyfoxTKMSQhGTTSrAbdMCPTjw/MbAgJOJb MK8iAp78GJD8XziorIcw9+BcgpA+obtoQlwQBpS7m9M+dIkqQ+2b33ZpLaEL04s4YhGg zoVw2b7U9V5s7GFB/da4iyxT43//2vCIlnA4GLigDRBSAaGnf+DEYblC9z4DPvrc+fSZ v78Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=iaK0WEY8juG2masG29WlCz2N6X4/zaChlVoz04vNgMQ=; b=BqR2qG8GWPqHbns/seSmbNIth4eN8vqzLrvg8eMLuGDKVEJqNdSRQwen3EreBn1j2Y ncCcmz1w1k4lQfuNUjHVRtiBS0z7sEtJdHdoqBozeuAcIJuqZnQago3lrCLobz+QrVz9 pS0dNgT7UUBW+UIdqeSAIplol79Ui7LQmD99h9+gHOKWJw8keH4Gf+Xu+e4XuN8JC5rm uCIIdiN4IkKRMlNiOO4gVqc0+F7MnOgxjyCCYL8ZIiDpUTvbR46aYzj7ilS1ejq2vP+z fmzLHRLnaAZvGAOmPLo6GgFBx51ia6COhUe14kcXxqMe9Mh8E9XXh0xXi16AhwwO24KC WZwQ== X-Gm-Message-State: AKGB3mKyfwJMfpC2/yKsT4HvV5GMvDaO9uZBecdw7WI1ALbA+qT81HFP RfP7haTgIy2uO/KueQHOU7DsAjW7 X-Received: by 10.223.201.6 with SMTP id m6mr2887274wrh.107.1515019650551; Wed, 03 Jan 2018 14:47:30 -0800 (PST) Received: from rywe.jkqxz.net (cpc91242-cmbg18-2-0-cust650.5-4.cable.virginm.net. [82.8.130.139]) by smtp.gmail.com with ESMTPSA id j10sm2983170wrb.49.2018.01.03.14.47.29 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 03 Jan 2018 14:47:30 -0800 (PST) From: Mark Thompson To: ffmpeg-devel@ffmpeg.org Date: Wed, 3 Jan 2018 22:47:20 +0000 Message-Id: <20180103224722.6040-1-sw@jkqxz.net> X-Mailer: git-send-email 2.11.0 Subject: [FFmpeg-devel] [PATCH 1/3] lavfi/opencl: Use filter device if no input device is available 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This allows implementing sources as well as filters. --- libavfilter/opencl.c | 39 +++++++++++++++++++++++++++++++++------ 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/libavfilter/opencl.c b/libavfilter/opencl.c index 005ad089e2..37afc41f8b 100644 --- a/libavfilter/opencl.c +++ b/libavfilter/opencl.c @@ -42,11 +42,29 @@ int ff_opencl_filter_query_formats(AVFilterContext *avctx) return ff_set_common_formats(avctx, formats); } +static int opencl_filter_set_device(AVFilterContext *avctx, + AVBufferRef *device) +{ + OpenCLFilterContext *ctx = avctx->priv; + + av_buffer_unref(&ctx->device_ref); + + ctx->device_ref = av_buffer_ref(device); + if (!ctx->device_ref) + return AVERROR(ENOMEM); + + ctx->device = (AVHWDeviceContext*)ctx->device_ref->data; + ctx->hwctx = ctx->device->hwctx; + + return 0; +} + int ff_opencl_filter_config_input(AVFilterLink *inlink) { AVFilterContext *avctx = inlink->dst; OpenCLFilterContext *ctx = avctx->priv; AVHWFramesContext *input_frames; + int err; if (!inlink->hw_frames_ctx) { av_log(avctx, AV_LOG_ERROR, "OpenCL filtering requires a " @@ -59,15 +77,12 @@ int ff_opencl_filter_config_input(AVFilterLink *inlink) return 0; input_frames = (AVHWFramesContext*)inlink->hw_frames_ctx->data; - if (input_frames->format != AV_PIX_FMT_OPENCL) return AVERROR(EINVAL); - ctx->device_ref = av_buffer_ref(input_frames->device_ref); - if (!ctx->device_ref) - return AVERROR(ENOMEM); - ctx->device = input_frames->device_ctx; - ctx->hwctx = ctx->device->hwctx; + err = opencl_filter_set_device(avctx, input_frames->device_ref); + if (err < 0) + return err; // Default output parameters match input parameters. if (ctx->output_format == AV_PIX_FMT_NONE) @@ -90,6 +105,18 @@ int ff_opencl_filter_config_output(AVFilterLink *outlink) av_buffer_unref(&outlink->hw_frames_ctx); + if (!ctx->device_ref) { + if (!avctx->hw_device_ctx) { + av_log(avctx, AV_LOG_ERROR, "OpenCL filtering requires an " + "OpenCL device.\n"); + return AVERROR(EINVAL); + } + + err = opencl_filter_set_device(avctx, avctx->hw_device_ctx); + if (err < 0) + return err; + } + output_frames_ref = av_hwframe_ctx_alloc(ctx->device_ref); if (!output_frames_ref) { err = AVERROR(ENOMEM);