On 13/04/2020 17:48, Dennis Mungai wrote: > On Mon, 13 Apr 2020 at 18:34, Mark Thompson <s...@jkqxz.net> wrote: > >> 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, >> }; >> -- >> 2.25.1 >> >> >> > What type of hardware is considered "suitable"? Systems with multiple > NVENC-capable GPUs?
Something supporting CUDA, NVENC and D3D11. > Also, provide a sample command line extending on the examples above that > you'd like tested and I'll report back with results. Create CUDA and D3D11 devices and make sure that they get passed to an NVENC encoder. Since NVENC chooses a device itself if not given one, I think you would need to stop it in a debugger to make sure that the right thing happened. Thanks, - Mark _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".