From e78177d36a9cae39eca521f65348e520d57300cf Mon Sep 17 00:00:00 2001
From: Roman Arzumanyan <rarzumanyan@nvidia.com>
Date: Thu, 3 Sep 2020 14:52:08 +0300
Subject: [PATCH] AV1 nvcuvid support.

---
 libavcodec/allcodecs.c |  1 +
 libavcodec/cuviddec.c  | 13 +++++++++++++
 2 files changed, 14 insertions(+)

diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c
index f055aea207..2906308f09 100644
--- a/libavcodec/allcodecs.c
+++ b/libavcodec/allcodecs.c
@@ -768,6 +768,7 @@ extern AVCodec ff_idf_decoder;
  * above is available */
 extern AVCodec ff_aac_mf_encoder;
 extern AVCodec ff_ac3_mf_encoder;
+extern AVCodec ff_av1_cuvid_decoder;
 extern AVCodec ff_h263_v4l2m2m_encoder;
 extern AVCodec ff_libaom_av1_decoder;
 /* hwaccel hooks only, so prefer external decoders */
diff --git a/libavcodec/cuviddec.c b/libavcodec/cuviddec.c
index 2d6377bc8c..ee2ecc01fe 100644
--- a/libavcodec/cuviddec.c
+++ b/libavcodec/cuviddec.c
@@ -42,6 +42,10 @@
 #define cudaVideoSurfaceFormat_YUV444_16Bit 3
 #endif
 
+#if NVDECAPI_CHECK_VERSION(11, 0)
+#define CUVID_HAS_AV1_SUPPORT
+#endif
+
 typedef struct CuvidContext
 {
     AVClass *avclass;
@@ -939,6 +943,11 @@ static av_cold int cuvid_decode_init(AVCodecContext *avctx)
     case AV_CODEC_ID_VC1:
         ctx->cuparseinfo.CodecType = cudaVideoCodec_VC1;
         break;
+#endif
+#if CONFIG_AV1_CUVID_DECODER && defined(CUVID_HAS_AV1_SUPPORT)
+    case AV_CODEC_ID_AV1:
+        ctx->cuparseinfo.CodecType = cudaVideoCodec_AV1;
+        break;
 #endif
     default:
         av_log(avctx, AV_LOG_ERROR, "Invalid CUVID codec!\n");
@@ -1134,6 +1143,10 @@ static const AVCodecHWConfigInternal *cuvid_hw_configs[] = {
         .wrapper_name   = "cuvid", \
     };
 
+#if CONFIG_AV1_CUVID_DECODER && defined(CUVID_HAS_AV1_SUPPORT)
+DEFINE_CUVID_CODEC(av1, AV1, NULL)
+#endif
+
 #if CONFIG_HEVC_CUVID_DECODER
 DEFINE_CUVID_CODEC(hevc, HEVC, "hevc_mp4toannexb")
 #endif
-- 
2.16.1.windows.4

