From patchwork Mon Apr 13 15:33:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Thompson X-Patchwork-Id: 18922 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id 37C27449F3D for ; Mon, 13 Apr 2020 18:33:41 +0300 (EEST) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 235D368B96A; Mon, 13 Apr 2020 18:33:41 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B4A0968B958 for ; Mon, 13 Apr 2020 18:33:32 +0300 (EEST) Received: by mail-wm1-f51.google.com with SMTP id v8so10340910wma.0 for ; Mon, 13 Apr 2020 08:33:32 -0700 (PDT) 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:in-reply-to:references:mime-version :content-transfer-encoding; bh=3bqUh7e0iDdvIrQgdHzm6lmPr4PQaqzLjBQFZ5Z99+o=; b=LOY6GMFNMdOtjRxw4w1QkbVIZpDP6rHx4mZ/qDtkWBt9wKcOrrqZGIU3pv9RcREl4T B4ETM0Ihzea1gnWPIIC46o86YObOO4iJhnz7/19H0RfWZPwCP2VIn5X1I3v++ga1Sqay mpyfoFpxwNDRnD1bsgn8QzKNaycUopTzTZjsAOUovgwMSz6ok+5xSofKVIHA8+aEQJXl jZ2eHmTEpdXK/D867lMouWtB+lLhh7iBpSPnm2U2634aSZH+RNlkkDQCba1H6+W+2QNx mf2Bw616k+vhWjpK060TsEMT/hIrbEhIbl7N3SdUOEbvehG7Qj5xXdNWjZe4uSY6Z6kc U3Sg== 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:in-reply-to :references:mime-version:content-transfer-encoding; bh=3bqUh7e0iDdvIrQgdHzm6lmPr4PQaqzLjBQFZ5Z99+o=; b=pS4ZXS2LY13PLEivw9QSSP3POQsNLN6G1Q6WhEIyPAlEz4mTMqXGbfJpMKiA/vqV7B lnYcA3guiHIhPDHaMQOwJyi95etyOPkqcjkXwShfHUeMryM6Ttr3zm5hfC0nrzkRKsiH JcQjlkh9dOOZyTPrWg9a1Ae6tJDS8Tz8txXkxfnZ3LOsbGnKiQ6PIt6kNz0PsHs0F8z0 fVMtq4ciPI605iOReMDgEnjglL7Hb7eV4qPVXiaQLRuJNeq6rfpIgeJFFGEWY+o7pqua 8/i+d3bfU5U2N00mVR+Kmm/5WE5lZDYCHwvSjC5AMftmQpjUV5CXp28NeWM5OSaILrD8 3unw== X-Gm-Message-State: AGi0PuYtsLpUNIAL1P0kt7H1ouPEHl6RwC8zM4IWosvX04+tJshh+iyF EywgcD21jMWgIyGmSwjQ6MrESmEmbRY= X-Google-Smtp-Source: APiQypI0bR82wLgA87TzC9YoGcf8OsJA6C0pu+izDC3YYFFssY6LCcw9P+Isg4RKoCLjD8UVlSdUOQ== X-Received: by 2002:a1c:f715:: with SMTP id v21mr17992287wmh.83.1586792011784; Mon, 13 Apr 2020 08:33:31 -0700 (PDT) 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 t8sm15157557wrq.88.2020.04.13.08.33.30 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 13 Apr 2020 08:33:31 -0700 (PDT) From: Mark Thompson To: ffmpeg-devel@ffmpeg.org Date: Mon, 13 Apr 2020 16:33:18 +0100 Message-Id: <20200413153321.5956-5-sw@jkqxz.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200413153321.5956-1-sw@jkqxz.net> References: <20200413153321.5956-1-sw@jkqxz.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/8] lavc/nvenc: Add hardware config metadata 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" NOT TESTED. --- Needs someone with suitable hardware to try it. With this and the relevant ffmpeg patches, existing stuff should continue to work and you should also be able to choose between multiple devices for a standalone encoder with things like: ffmpeg -init_hw_device cuda:2 ... -c:v nvenc ... ffmpeg -init_hw_device d3d11:2 ... -c:v nvenc ... libavcodec/nvenc.c | 11 +++++++++++ libavcodec/nvenc.h | 1 + libavcodec/nvenc_h264.c | 1 + libavcodec/nvenc_hevc.c | 1 + 4 files changed, 14 insertions(+) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index 9a96bf2bba..b0cd8874ee 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -30,6 +30,7 @@ #include "libavutil/avassert.h" #include "libavutil/mem.h" #include "libavutil/pixdesc.h" +#include "hwconfig.h" #include "internal.h" #define CHECK_CU(x) FF_CUDA_CHECK_DL(avctx, dl_fn->cuda_dl, x) @@ -55,6 +56,16 @@ const enum AVPixelFormat ff_nvenc_pix_fmts[] = { AV_PIX_FMT_NONE }; +const AVCodecHWConfigInternal *ff_nvenc_hw_configs[] = { + HW_CONFIG_ENCODER_FRAMES(CUDA, CUDA), + HW_CONFIG_ENCODER_DEVICE(NONE, CUDA), +#if CONFIG_D3D11VA + HW_CONFIG_ENCODER_FRAMES(D3D11, D3D11), + HW_CONFIG_ENCODER_DEVICE(NONE, D3D11), +#endif + NULL, +}; + #define IS_10BIT(pix_fmt) (pix_fmt == AV_PIX_FMT_P010 || \ pix_fmt == AV_PIX_FMT_P016 || \ pix_fmt == AV_PIX_FMT_YUV444P16) diff --git a/libavcodec/nvenc.h b/libavcodec/nvenc.h index c44c81e675..c80332d914 100644 --- a/libavcodec/nvenc.h +++ b/libavcodec/nvenc.h @@ -217,5 +217,6 @@ int ff_nvenc_encode_frame(AVCodecContext *avctx, AVPacket *pkt, void ff_nvenc_encode_flush(AVCodecContext *avctx); extern const enum AVPixelFormat ff_nvenc_pix_fmts[]; +extern const AVCodecHWConfigInternal *ff_nvenc_hw_configs[]; #endif /* AVCODEC_NVENC_H */ diff --git a/libavcodec/nvenc_h264.c b/libavcodec/nvenc_h264.c index 479155fe15..6d82422308 100644 --- a/libavcodec/nvenc_h264.c +++ b/libavcodec/nvenc_h264.c @@ -248,4 +248,5 @@ AVCodec ff_h264_nvenc_encoder = { .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .pix_fmts = ff_nvenc_pix_fmts, .wrapper_name = "nvenc", + .hw_configs = ff_nvenc_hw_configs, }; diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 7c9b3848f1..58d5265977 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -206,4 +206,5 @@ AVCodec ff_hevc_nvenc_encoder = { .capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .wrapper_name = "nvenc", + .hw_configs = ff_nvenc_hw_configs, };