Hello community,

here is the log from the commit of package ffnvcodec for openSUSE:Factory 
checked in at 2020-07-15 11:30:41
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ffnvcodec (Old)
 and      /work/SRC/openSUSE:Factory/.ffnvcodec.new.3060 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ffnvcodec"

Wed Jul 15 11:30:41 2020 rev:10 rq:819298 version:10.0.26.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/ffnvcodec/ffnvcodec.changes      2020-05-08 
23:03:34.749644995 +0200
+++ /work/SRC/openSUSE:Factory/.ffnvcodec.new.3060/ffnvcodec.changes    
2020-07-15 11:33:27.542109745 +0200
@@ -1,0 +2,6 @@
+Tue Jul  7 22:26:12 UTC 2020 - Mia Herkt <m...@0x0.st>
+
+- Update to 10.0.26.0:
+  * Update headers from Video SDK 10.0
+
+-------------------------------------------------------------------

Old:
----
  nv-codec-headers-9.1.23.1.tar.xz

New:
----
  nv-codec-headers-10.0.26.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ffnvcodec.spec ++++++
--- /var/tmp/diff_new_pack.XZSCFG/_old  2020-07-15 11:33:38.322121083 +0200
+++ /var/tmp/diff_new_pack.XZSCFG/_new  2020-07-15 11:33:38.326121088 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           ffnvcodec
-Version:        9.1.23.1
+Version:        10.0.26.0
 Release:        0
 Summary:        FFmpeg version of NVIDIA codec API headers
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.XZSCFG/_old  2020-07-15 11:33:38.354121117 +0200
+++ /var/tmp/diff_new_pack.XZSCFG/_new  2020-07-15 11:33:38.354121117 +0200
@@ -4,7 +4,7 @@
     <param name="scm">git</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">n([0-9\.]*)</param>
-    <param name="revision">n9.1.23.1</param>
+    <param name="revision">n10.0.26.0</param>
   </service>
   <service mode="disabled" name="recompress">
     <param name="file">*.tar</param>

++++++ nv-codec-headers-9.1.23.1.tar.xz -> nv-codec-headers-10.0.26.0.tar.xz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nv-codec-headers-9.1.23.1/README 
new/nv-codec-headers-10.0.26.0/README
--- old/nv-codec-headers-9.1.23.1/README        2019-11-18 14:14:38.000000000 
+0100
+++ new/nv-codec-headers-10.0.26.0/README       2020-06-30 18:51:46.000000000 
+0200
@@ -1,7 +1,7 @@
 FFmpeg version of headers required to interface with Nvidias codec APIs.
 
-Corresponds to Video Codec SDK version 9.1.23.
+Corresponds to Video Codec SDK version 10.0.26.
 
 Minimum required driver versions:
-Linux: 435.21 or newer
-Windows: 436.15 or newer
+Linux: 445.87 or newer
+Windows: 450.51 or newer
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/nv-codec-headers-9.1.23.1/ffnvcodec.pc.in 
new/nv-codec-headers-10.0.26.0/ffnvcodec.pc.in
--- old/nv-codec-headers-9.1.23.1/ffnvcodec.pc.in       2019-11-18 
14:14:38.000000000 +0100
+++ new/nv-codec-headers-10.0.26.0/ffnvcodec.pc.in      2020-06-30 
18:51:46.000000000 +0200
@@ -3,5 +3,5 @@
 
 Name: ffnvcodec
 Description: FFmpeg version of Nvidia Codec SDK headers
-Version: 9.1.23.1
+Version: 10.0.26.0
 Cflags: -I${includedir}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/nv-codec-headers-9.1.23.1/include/ffnvcodec/dynlink_cuviddec.h 
new/nv-codec-headers-10.0.26.0/include/ffnvcodec/dynlink_cuviddec.h
--- old/nv-codec-headers-9.1.23.1/include/ffnvcodec/dynlink_cuviddec.h  
2019-11-18 14:14:38.000000000 +0100
+++ new/nv-codec-headers-10.0.26.0/include/ffnvcodec/dynlink_cuviddec.h 
2020-06-30 18:51:46.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * This copyright notice applies to this header file only:
  *
- * Copyright (c) 2010-2019 NVIDIA Corporation
+ * Copyright (c) 2010-2020 NVIDIA Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
@@ -41,8 +41,8 @@
 #endif
 #endif
 
-#define NVDECAPI_MAJOR_VERSION 9
-#define NVDECAPI_MINOR_VERSION 1
+#define NVDECAPI_MAJOR_VERSION 10
+#define NVDECAPI_MINOR_VERSION 0
 
 #define NVDECAPI_VERSION (NVDECAPI_MAJOR_VERSION | (NVDECAPI_MINOR_VERSION << 
24))
 
@@ -897,6 +897,9 @@
 
/************************************************************************************************************/
 //! \fn CUresult CUDAAPI cuvidGetDecodeStatus(CUvideodecoder hDecoder, int 
nPicIdx);
 //! Get the decode status for frame corresponding to nPicIdx
+//! API is supported for Maxwell and above generation GPUs.
+//! API is currently supported for HEVC, H264 and JPEG codecs.
+//! API returns CUDA_ERROR_NOT_SUPPORTED error code for unsupported GPU or 
codec.
 
/************************************************************************************************************/
 typedef CUresult CUDAAPI tcuvidGetDecodeStatus(CUvideodecoder hDecoder, int 
nPicIdx, CUVIDGETDECODESTATUS* pDecodeStatus);
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/nv-codec-headers-9.1.23.1/include/ffnvcodec/dynlink_nvcuvid.h 
new/nv-codec-headers-10.0.26.0/include/ffnvcodec/dynlink_nvcuvid.h
--- old/nv-codec-headers-9.1.23.1/include/ffnvcodec/dynlink_nvcuvid.h   
2019-11-18 14:14:38.000000000 +0100
+++ new/nv-codec-headers-10.0.26.0/include/ffnvcodec/dynlink_nvcuvid.h  
2020-06-30 18:51:46.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * This copyright notice applies to this header file only:
  *
- * Copyright (c) 2010-2019 NVIDIA Corporation
+ * Copyright (c) 2010-2020 NVIDIA Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/nv-codec-headers-9.1.23.1/include/ffnvcodec/nvEncodeAPI.h 
new/nv-codec-headers-10.0.26.0/include/ffnvcodec/nvEncodeAPI.h
--- old/nv-codec-headers-9.1.23.1/include/ffnvcodec/nvEncodeAPI.h       
2019-11-18 14:14:38.000000000 +0100
+++ new/nv-codec-headers-10.0.26.0/include/ffnvcodec/nvEncodeAPI.h      
2020-06-30 18:51:46.000000000 +0200
@@ -1,7 +1,7 @@
 /*
  * This copyright notice applies to this header file only:
  *
- * Copyright (c) 2010-2019 NVIDIA Corporation
+ * Copyright (c) 2010-2020 NVIDIA Corporation
  *
  * Permission is hereby granted, free of charge, to any person
  * obtaining a copy of this software and associated documentation
@@ -30,7 +30,7 @@
  *   NVIDIA GPUs - beginning with the Kepler generation - contain a 
hardware-based encoder
  *   (referred to as NVENC) which provides fully-accelerated hardware-based 
video encoding.
  *   NvEncodeAPI provides the interface for NVIDIA video encoder (NVENC).
- * \date 2011-2019
+ * \date 2011-2020
  *  This file contains the interface constants, structure definitions and 
function prototypes.
  */
 
@@ -76,6 +76,7 @@
 #ifdef _WIN32
 typedef RECT NVENC_RECT;
 #else
+#define NVENCAPI
 // 
=========================================================================================
 #if !defined(GUID) && !defined(GUID_DEFINED)
 /*!
@@ -114,8 +115,8 @@
 typedef void* NV_ENC_REGISTERED_PTR;        /**< A Resource that has been 
registered with NVENCODE API*/
 typedef void* NV_ENC_CUSTREAM_PTR;          /**< Pointer to CUstream*/
 
-#define NVENCAPI_MAJOR_VERSION 9
-#define NVENCAPI_MINOR_VERSION 1
+#define NVENCAPI_MAJOR_VERSION 10
+#define NVENCAPI_MINOR_VERSION 0
 
 #define NVENCAPI_VERSION (NVENCAPI_MAJOR_VERSION | (NVENCAPI_MINOR_VERSION << 
24))
 
@@ -129,6 +130,12 @@
 
 #define NV_MAX_SEQ_HDR_LEN  (512)
 
+#ifdef __GNUC__
+#define NV_ENC_DEPRECATED __attribute__ ((deprecated("WILL BE REMOVED IN A 
FUTURE VIDEO CODEC SDK VERSION")))
+#elif defined(_MSC_VER)
+#define NV_ENC_DEPRECATED __declspec(deprecated("WILL BE REMOVED IN A FUTURE 
VIDEO CODEC SDK VERSION"))
+#endif
+
 // 
=========================================================================================
 // Encode Codec GUIDS supported by the NvEncodeAPI interface.
 // 
=========================================================================================
@@ -200,41 +207,72 @@
 // *   Preset GUIDS supported by the NvEncodeAPI interface.
 // 
=========================================================================================
 // {B2DFB705-4EBD-4C49-9B5F-24A777D3E587}
-static const GUID NV_ENC_PRESET_DEFAULT_GUID =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_DEFAULT_GUID =
 { 0xb2dfb705, 0x4ebd, 0x4c49, { 0x9b, 0x5f, 0x24, 0xa7, 0x77, 0xd3, 0xe5, 0x87 
} };
 
 // {60E4C59F-E846-4484-A56D-CD45BE9FDDF6}
-static const GUID NV_ENC_PRESET_HP_GUID =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_HP_GUID =
 { 0x60e4c59f, 0xe846, 0x4484, { 0xa5, 0x6d, 0xcd, 0x45, 0xbe, 0x9f, 0xdd, 0xf6 
} };
 
 // {34DBA71D-A77B-4B8F-9C3E-B6D5DA24C012}
-static const GUID NV_ENC_PRESET_HQ_GUID =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_HQ_GUID =
 { 0x34dba71d, 0xa77b, 0x4b8f, { 0x9c, 0x3e, 0xb6, 0xd5, 0xda, 0x24, 0xc0, 0x12 
} };
 
 // {82E3E450-BDBB-4e40-989C-82A90DF9EF32}
-static const GUID NV_ENC_PRESET_BD_GUID  =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_BD_GUID  =
 { 0x82e3e450, 0xbdbb, 0x4e40, { 0x98, 0x9c, 0x82, 0xa9, 0xd, 0xf9, 0xef, 0x32 
} };
 
 // {49DF21C5-6DFA-4feb-9787-6ACC9EFFB726}
-static const GUID NV_ENC_PRESET_LOW_LATENCY_DEFAULT_GUID  =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOW_LATENCY_DEFAULT_GUID  =
 { 0x49df21c5, 0x6dfa, 0x4feb, { 0x97, 0x87, 0x6a, 0xcc, 0x9e, 0xff, 0xb7, 0x26 
} };
 
 // {C5F733B9-EA97-4cf9-BEC2-BF78A74FD105}
-static const GUID NV_ENC_PRESET_LOW_LATENCY_HQ_GUID  =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOW_LATENCY_HQ_GUID  =
 { 0xc5f733b9, 0xea97, 0x4cf9, { 0xbe, 0xc2, 0xbf, 0x78, 0xa7, 0x4f, 0xd1, 0x5 
} };
 
 // {67082A44-4BAD-48FA-98EA-93056D150A58}
-static const GUID NV_ENC_PRESET_LOW_LATENCY_HP_GUID =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOW_LATENCY_HP_GUID =
 { 0x67082a44, 0x4bad, 0x48fa, { 0x98, 0xea, 0x93, 0x5, 0x6d, 0x15, 0xa, 0x58 } 
};
 
 // {D5BFB716-C604-44e7-9BB8-DEA5510FC3AC}
-static const GUID NV_ENC_PRESET_LOSSLESS_DEFAULT_GUID =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOSSLESS_DEFAULT_GUID =
 { 0xd5bfb716, 0xc604, 0x44e7, { 0x9b, 0xb8, 0xde, 0xa5, 0x51, 0xf, 0xc3, 0xac 
} };
 
 // {149998E7-2364-411d-82EF-179888093409}
-static const GUID NV_ENC_PRESET_LOSSLESS_HP_GUID =
+NV_ENC_DEPRECATED static const GUID NV_ENC_PRESET_LOSSLESS_HP_GUID =
 { 0x149998e7, 0x2364, 0x411d, { 0x82, 0xef, 0x17, 0x98, 0x88, 0x9, 0x34, 0x9 } 
};
 
+// Performance degrades and quality improves as we move from P1 to P7. Presets 
P3 to P7 for H264 and Presets P2 to P7 for HEVC have B frames enabled by default
+// for HIGH_QUALITY and LOSSLESS tuning info, and will not work with Weighted 
Prediction enabled. In case Weighted Prediction is required, disable B frames by
+// setting frameIntervalP = 1
+// {FC0A8D3E-45F8-4CF8-80C7-298871590EBF}
+static const GUID NV_ENC_PRESET_P1_GUID   =
+{ 0xfc0a8d3e, 0x45f8, 0x4cf8, { 0x80, 0xc7, 0x29, 0x88, 0x71, 0x59, 0xe, 0xbf 
} };
+
+// {F581CFB8-88D6-4381-93F0-DF13F9C27DAB}
+static const GUID NV_ENC_PRESET_P2_GUID   =
+{ 0xf581cfb8, 0x88d6, 0x4381, { 0x93, 0xf0, 0xdf, 0x13, 0xf9, 0xc2, 0x7d, 0xab 
} };
+
+// {36850110-3A07-441F-94D5-3670631F91F6}
+static const GUID NV_ENC_PRESET_P3_GUID   =
+{ 0x36850110, 0x3a07, 0x441f, { 0x94, 0xd5, 0x36, 0x70, 0x63, 0x1f, 0x91, 0xf6 
} };
+
+// {90A7B826-DF06-4862-B9D2-CD6D73A08681}
+static const GUID NV_ENC_PRESET_P4_GUID   =
+{ 0x90a7b826, 0xdf06, 0x4862, { 0xb9, 0xd2, 0xcd, 0x6d, 0x73, 0xa0, 0x86, 0x81 
} };
+
+// {21C6E6B4-297A-4CBA-998F-B6CBDE72ADE3}
+static const GUID NV_ENC_PRESET_P5_GUID   =
+{ 0x21c6e6b4, 0x297a, 0x4cba, { 0x99, 0x8f, 0xb6, 0xcb, 0xde, 0x72, 0xad, 0xe3 
} };
+
+// {8E75C279-6299-4AB6-8302-0B215A335CF5}
+static const GUID NV_ENC_PRESET_P6_GUID   =
+{ 0x8e75c279, 0x6299, 0x4ab6, { 0x83, 0x2, 0xb, 0x21, 0x5a, 0x33, 0x5c, 0xf5 } 
};
+
+// {84848C12-6F71-4C13-931B-53E283F57974}
+static const GUID NV_ENC_PRESET_P7_GUID   =
+{ 0x84848c12, 0x6f71, 0x4c13, { 0x93, 0x1b, 0x53, 0xe2, 0x83, 0xf5, 0x79, 0x74 
} };
+
 /**
  * \addtogroup ENCODER_STRUCTURE NvEncodeAPI Data structures
  * @{
@@ -258,12 +296,23 @@
     NV_ENC_PARAMS_RC_CONSTQP                = 0x0,       /**< Constant QP mode 
*/
     NV_ENC_PARAMS_RC_VBR                    = 0x1,       /**< Variable bitrate 
mode */
     NV_ENC_PARAMS_RC_CBR                    = 0x2,       /**< Constant bitrate 
mode */
-    NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ        = 0x8,       /**< low-delay CBR, 
high quality */
-    NV_ENC_PARAMS_RC_CBR_HQ                 = 0x10,      /**< CBR, high 
quality (slower) */
-    NV_ENC_PARAMS_RC_VBR_HQ                 = 0x20       /**< VBR, high 
quality (slower) */
+    NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ        = 0x8,       /**< Deprecated, use 
NV_ENC_PARAMS_RC_CBR + NV_ENC_TWO_PASS_QUARTER_RESOLUTION / 
NV_ENC_TWO_PASS_FULL_RESOLUTION +
+                                                              
lowDelayKeyFrameScale=1 */
+    NV_ENC_PARAMS_RC_CBR_HQ                 = 0x10,      /**< Deprecated, use 
NV_ENC_PARAMS_RC_CBR + NV_ENC_TWO_PASS_QUARTER_RESOLUTION / 
NV_ENC_TWO_PASS_FULL_RESOLUTION */
+    NV_ENC_PARAMS_RC_VBR_HQ                 = 0x20       /**< Deprecated, use 
NV_ENC_PARAMS_RC_VBR + NV_ENC_TWO_PASS_QUARTER_RESOLUTION / 
NV_ENC_TWO_PASS_FULL_RESOLUTION */
 } NV_ENC_PARAMS_RC_MODE;
 
 /**
+ * Multi Pass encoding
+ */
+typedef enum _NV_ENC_MULTI_PASS
+{
+    NV_ENC_MULTI_PASS_DISABLED              = 0x0,        /**< Single Pass */
+    NV_ENC_TWO_PASS_QUARTER_RESOLUTION      = 0x1,        /**< Two Pass 
encoding is enabled where first Pass is quarter resolution */
+    NV_ENC_TWO_PASS_FULL_RESOLUTION         = 0x2,        /**< Two Pass 
encoding is enabled where first Pass is full resolution */
+} NV_ENC_MULTI_PASS;
+
+/**
  * Emphasis Levels
  */
 typedef enum _NV_ENC_EMPHASIS_MAP_LEVEL
@@ -282,7 +331,7 @@
 typedef enum _NV_ENC_QP_MAP_MODE
 {
     NV_ENC_QP_MAP_DISABLED               = 0x0,             /**< Value in 
NV_ENC_PIC_PARAMS::qpDeltaMap have no effect. */
-    NV_ENC_QP_MAP_EMPHASIS               = 0x1,             /**< Value in 
NV_ENC_PIC_PARAMS::qpDeltaMap will be treated as Empasis level. Currently this 
is only supported for H264 */
+    NV_ENC_QP_MAP_EMPHASIS               = 0x1,             /**< Value in 
NV_ENC_PIC_PARAMS::qpDeltaMap will be treated as Emphasis level. Currently this 
is only supported for H264 */
     NV_ENC_QP_MAP_DELTA                  = 0x2,             /**< Value in 
NV_ENC_PIC_PARAMS::qpDeltaMap will be treated as QP delta map. */
     NV_ENC_QP_MAP                        = 0x3,             /**< Currently 
This is not supported. Value in NV_ENC_PIC_PARAMS::qpDeltaMap will be treated 
as QP value.   */
 } NV_ENC_QP_MAP_MODE;
@@ -324,10 +373,10 @@
  */
 typedef enum _NV_ENC_MV_PRECISION
 {
-    NV_ENC_MV_PRECISION_DEFAULT     = 0x0,       /**<Driver selects QuarterPel 
motion vector precision by default*/
-    NV_ENC_MV_PRECISION_FULL_PEL    = 0x01,    /**< FullPel  motion vector 
precision */
-    NV_ENC_MV_PRECISION_HALF_PEL    = 0x02,    /**< HalfPel motion vector 
precision */
-    NV_ENC_MV_PRECISION_QUARTER_PEL = 0x03     /**< QuarterPel motion vector 
precision */
+    NV_ENC_MV_PRECISION_DEFAULT     = 0x0,     /**< Driver selects Quarter-Pel 
motion vector precision by default */
+    NV_ENC_MV_PRECISION_FULL_PEL    = 0x01,    /**< Full-Pel motion vector 
precision */
+    NV_ENC_MV_PRECISION_HALF_PEL    = 0x02,    /**< Half-Pel motion vector 
precision */
+    NV_ENC_MV_PRECISION_QUARTER_PEL = 0x03     /**< Quarter-Pel motion vector 
precision */
 } NV_ENC_MV_PRECISION;
 
 
@@ -399,7 +448,9 @@
     NV_ENC_LEVEL_H264_5             = 50,
     NV_ENC_LEVEL_H264_51            = 51,
     NV_ENC_LEVEL_H264_52            = 52,
-
+    NV_ENC_LEVEL_H264_60            = 60,
+    NV_ENC_LEVEL_H264_61            = 61,
+    NV_ENC_LEVEL_H264_62            = 62,
 
     NV_ENC_LEVEL_HEVC_1             = 30,
     NV_ENC_LEVEL_HEVC_2             = 60,
@@ -636,7 +687,7 @@
 } NV_ENC_H264_ENTROPY_CODING_MODE;
 
 /**
- * H.264 specific Bdirect modes
+ * H.264 specific BDirect modes
  */
 typedef enum _NV_ENC_H264_BDIRECT_MODE
 {
@@ -653,7 +704,7 @@
 {
     NV_ENC_H264_FMO_AUTOSELECT          = 0x0,          /**< FMO usage is auto 
selected by the encoder driver */
     NV_ENC_H264_FMO_ENABLE              = 0x1,          /**< Enable FMO */
-    NV_ENC_H264_FMO_DISABLE             = 0x2,          /**< Disble FMO */
+    NV_ENC_H264_FMO_DISABLE             = 0x2,          /**< Disable FMO */
 } NV_ENC_H264_FMO_MODE;
 
 /**
@@ -770,8 +821,8 @@
 
     /**
      * Indicates HW capability for Quarter pel motion estimation.
-     * \n 0 : QuarterPel Motion Estimation not supported.
-     * \n 1 : QuarterPel Motion Estimation supported.
+     * \n 0 : Quarter-Pel Motion Estimation not supported.
+     * \n 1 : Quarter-Pel Motion Estimation supported.
      */
     NV_ENC_CAPS_SUPPORT_QPELMV,
 
@@ -890,7 +941,7 @@
     NV_ENC_CAPS_SUPPORT_DYN_RCMODE_CHANGE,
 
     /**
-     * Indicates Subframe readback support for slice-based encoding.
+     * Indicates Subframe readback support for slice-based encoding. If this 
feature is supported, it can be enabled by setting enableSubFrameWrite = 1.
      * \n 0 : Subframe readback not supported.
      * \n 1 : Subframe readback supported.
      */
@@ -900,11 +951,10 @@
      * Indicates Constrained Encoding mode support.
      * Support added from NvEncodeAPI version 2.0.
      * \n 0 : Constrained encoding mode not supported.
-     * \n 1 : Constarined encoding mode supported.
-     * If this mode is supported client can enable this during initialisation.
+     * \n 1 : Constrained encoding mode supported.
+     * If this mode is supported client can enable this during initialization.
      * Client can then force a picture to be coded as constrained picture where
-     * each slice in a constrained picture will have 
constrained_intra_pred_flag set to 1
-     * and disable_deblocking_filter_idc will be set to 2 and prediction 
vectors for inter
+     * in-loop filtering is disabled across slice boundaries and prediction 
vectors for inter
      * macroblocks in each slice will be restricted to the slice region.
      */
     NV_ENC_CAPS_SUPPORT_CONSTRAINED_ENCODING,
@@ -918,7 +968,7 @@
     NV_ENC_CAPS_SUPPORT_INTRA_REFRESH,
 
     /**
-     * Indicates Custom VBV Bufer Size support. It can be used for capping 
frame size.
+     * Indicates Custom VBV Buffer Size support. It can be used for capping 
frame size.
      * Support added from NvEncodeAPI version 2.0.
      * \n 0 : Custom VBV buffer size specification from client, not supported.
      * \n 1 : Custom VBV buffer size specification from client, supported.
@@ -942,7 +992,7 @@
     NV_ENC_CAPS_SUPPORT_REF_PIC_INVALIDATION,
 
     /**
-     * Indicates support for PreProcessing.
+     * Indicates support for Pre-Processing.
      * The API return value is a bitmask of the values defined in 
::NV_ENC_PREPROC_FLAGS
      */
     NV_ENC_CAPS_PREPROC_SUPPORT,
@@ -986,7 +1036,7 @@
     NV_ENC_CAPS_SUPPORT_SAO,
 
     /**
-     * Indicates HW support for MEOnly Mode.
+     * Indicates HW support for Motion Estimation Only Mode.
      * \n 0 : MEOnly Mode not supported.
      * \n 1 : MEOnly Mode supported for I and P frames.
      * \n 2 : MEOnly Mode supported for I, P and B frames.
@@ -1018,9 +1068,9 @@
     NV_ENC_CAPS_NUM_MAX_LTR_FRAMES,
 
     /**
-     * Indicates HW support for Weighted Predicition.
-     * \n 0 : Weighted Predicition not supported.
-     * \n 1 : Weighted Predicition supported.
+     * Indicates HW support for Weighted Prediction.
+     * \n 0 : Weighted Prediction not supported.
+     * \n 1 : Weighted Prediction supported.
      */
     NV_ENC_CAPS_SUPPORT_WEIGHTED_PREDICTION,
 
@@ -1032,12 +1082,12 @@
      * If the available encoder capacity is returned as zero, applications may 
choose to switch to software encoding
      * and continue to call this API (e.g. polling once per second) until 
capacity becomes available.
      *
-     * On baremetal (non-virtualized GPU) and linux platforms, this API always 
returns 100.
+     * On bare metal (non-virtualized GPU) and linux platforms, this API 
always returns 100.
      */
     NV_ENC_CAPS_DYNAMIC_QUERY_ENCODER_CAPACITY,
 
      /**
-     * Indicates B as refererence support.
+     * Indicates B as reference support.
      * \n 0 : B as reference is not supported.
      * \n 1 : each B-Frame as reference is supported.
      * \n 2 : only Middle B-frame as reference is supported.
@@ -1117,13 +1167,13 @@
 typedef struct _NV_ENC_CREATE_INPUT_BUFFER
 {
     uint32_t                  version;                 /**< [in]: Struct 
version. Must be set to ::NV_ENC_CREATE_INPUT_BUFFER_VER */
-    uint32_t                  width;                   /**< [in]: Input buffer 
width */
-    uint32_t                  height;                  /**< [in]: Input buffer 
width */
+    uint32_t                  width;                   /**< [in]: Input frame 
width */
+    uint32_t                  height;                  /**< [in]: Input frame 
height */
     NV_ENC_MEMORY_HEAP        memoryHeap;              /**< [in]: Deprecated. 
Do not use */
     NV_ENC_BUFFER_FORMAT      bufferFmt;               /**< [in]: Input buffer 
format */
     uint32_t                  reserved;                /**< [in]: Reserved and 
must be set to 0 */
     NV_ENC_INPUT_PTR          inputBuffer;             /**< [out]: Pointer to 
input buffer */
-    void*                     pSysMemBuffer;           /**< [in]: Pointer to 
existing sysmem buffer */
+    void*                     pSysMemBuffer;           /**< [in]: Pointer to 
existing system memory buffer */
     uint32_t                  reserved1[57];           /**< [in]: Reserved and 
must be set to 0 */
     void*                     reserved2[63];           /**< [in]: Reserved and 
must be set to NULL */
 } NV_ENC_CREATE_INPUT_BUFFER;
@@ -1154,8 +1204,8 @@
  */
 typedef struct _NV_ENC_MVECTOR
 {
-    int16_t             mvx;               /**< the x component of MV in qpel 
units */
-    int16_t             mvy;               /**< the y component of MV in qpel 
units */
+    int16_t             mvx;               /**< the x component of MV in 
quarter-pel units */
+    int16_t             mvy;               /**< the y component of MV in 
quarter-pel units */
 } NV_ENC_MVECTOR;
 
 /**
@@ -1209,7 +1259,7 @@
 } NV_ENC_QP;
 
 /**
- * Rate Control Configuration Paramters
+ * Rate Control Configuration Parameters
  */
  typedef struct _NV_ENC_RC_PARAMS
  {
@@ -1222,7 +1272,7 @@
     uint32_t                        vbvInitialDelay;                           
  /**< [in]: Specifies the VBV(HRD) initial delay in bits. Set 0 to use the 
default VBV  initial delay .*/
     uint32_t                        enableMinQP          :1;                   
  /**< [in]: Set this to 1 if minimum QP used for rate control. */
     uint32_t                        enableMaxQP          :1;                   
  /**< [in]: Set this to 1 if maximum QP used for rate control. */
-    uint32_t                        enableInitialRCQP    :1;                   
  /**< [in]: Set this to 1 if user suppplied initial QP is used for rate 
control. */
+    uint32_t                        enableInitialRCQP    :1;                   
  /**< [in]: Set this to 1 if user supplied initial QP is used for rate 
control. */
     uint32_t                        enableAQ             :1;                   
  /**< [in]: Set this to 1 to enable adaptive quantization (Spatial). */
     uint32_t                        reservedBitField1    :1;                   
  /**< [in]: Reserved bitfields and must be set to 0. */
     uint32_t                        enableLookahead      :1;                   
  /**< [in]: Set this to 1 to enable lookahead with depth <lookaheadDepth> (if 
lookahead is enabled, input frames must remain available to the encoder until 
encode completion) */
@@ -1232,17 +1282,21 @@
     uint32_t                        zeroReorderDelay     :1;                   
  /**< [in]: Set this to 1 to indicate zero latency operation (no reordering 
delay, num_reorder_frames=0) */
     uint32_t                        enableNonRefP        :1;                   
  /**< [in]: Set this to 1 to enable automatic insertion of non-reference 
P-frames (no effect if enablePTD=0) */
     uint32_t                        strictGOPTarget      :1;                   
  /**< [in]: Set this to 1 to minimize GOP-to-GOP rate fluctuations */
-    uint32_t                        aqStrength           :4;                   
  /**< [in]: When AQ (Spatial) is enabled (i.e. NV_ENC_RC_PARAMS::enableAQ is 
set), this field is used to specify AQ strength. AQ strength scale is from 1 
(low) - 15 (aggressive). If not set, strength is autoselected by driver. */
+    uint32_t                        aqStrength           :4;                   
  /**< [in]: When AQ (Spatial) is enabled (i.e. NV_ENC_RC_PARAMS::enableAQ is 
set), this field is used to specify AQ strength. AQ strength scale is from 1 
(low) - 15 (aggressive).
+                                                                               
             If not set, strength is auto selected by driver. */
     uint32_t                        reservedBitFields    :16;                  
  /**< [in]: Reserved bitfields and must be set to 0 */
     NV_ENC_QP                       minQP;                                     
  /**< [in]: Specifies the minimum QP used for rate control. Client must set 
NV_ENC_CONFIG::enableMinQP to 1. */
     NV_ENC_QP                       maxQP;                                     
  /**< [in]: Specifies the maximum QP used for rate control. Client must set 
NV_ENC_CONFIG::enableMaxQP to 1. */
     NV_ENC_QP                       initialRCQP;                               
  /**< [in]: Specifies the initial QP used for rate control. Client must set 
NV_ENC_CONFIG::enableInitialRCQP to 1. */
     uint32_t                        temporallayerIdxMask;                      
  /**< [in]: Specifies the temporal layers (as a bitmask) whose QPs have 
changed. Valid max bitmask is [2^NV_ENC_CAPS_NUM_MAX_TEMPORAL_LAYERS - 1] */
-    uint8_t                         temporalLayerQP[8];                        
  /**< [in]: Specifies the temporal layer QPs used for rate control. Temporal 
layer index is used as as the array index */
+    uint8_t                         temporalLayerQP[8];                        
  /**< [in]: Specifies the temporal layer QPs used for rate control. Temporal 
layer index is used as the array index */
     uint8_t                         targetQuality;                             
  /**< [in]: Target CQ (Constant Quality) level for VBR mode (range 0-51 with 
0-automatic)  */
     uint8_t                         targetQualityLSB;                          
  /**< [in]: Fractional part of target quality (as 8.8 fixed point format) */
-    uint16_t                        lookaheadDepth;                            
  /**< [in]: Maximum depth of lookahead with range 0-32 (only used if 
enableLookahead=1) */
-    uint32_t                        reserved1;
+    uint16_t                        lookaheadDepth;                            
  /**< [in]: Maximum depth of lookahead with range 0-(31 - number of B frames).
+                                                                               
             lookaheadDepth is only used if enableLookahead=1.*/
+    uint8_t                         lowDelayKeyFrameScale;                     
  /**< [in]: Specifies the ratio of I frame bits to P frame bits in case of 
single frame VBV and CBR rate control mode,
+                                                                               
             is set to 2 by default for low latency tuning info and 1 by 
default for ultra low latency tuning info  */
+    uint8_t                         reserved1[3];
     NV_ENC_QP_MAP_MODE              qpMapMode;                                 
  /**< [in]: This flag is used to interpret values in array specified by 
NV_ENC_PIC_PARAMS::qpDeltaMap.
                                                                                
             Set this to NV_ENC_QP_MAP_EMPHASIS to treat values specified by 
NV_ENC_PIC_PARAMS::qpDeltaMap as Emphasis Level Map.
                                                                                
             Emphasis Level can be assigned any value specified in enum 
NV_ENC_EMPHASIS_MAP_LEVEL.
@@ -1255,12 +1309,13 @@
                                                                                
             This feature is not supported when AQ( Spatial/Temporal) is 
enabled.
                                                                                
             This feature is only supported for H264 codec currently.
 
-                                                                               
             Set this to NV_ENC_QP_MAP_DELTA to treat values specified by 
NV_ENC_PIC_PARAMS::qpDeltaMap as QPDelta. This specifies QP modifier to be 
applied on top of the QP chosen by rate control
+                                                                               
             Set this to NV_ENC_QP_MAP_DELTA to treat values specified by 
NV_ENC_PIC_PARAMS::qpDeltaMap as QP Delta. This specifies QP modifier to be 
applied on top of the QP chosen by rate control
 
                                                                                
             Set this to NV_ENC_QP_MAP_DISABLED to ignore 
NV_ENC_PIC_PARAMS::qpDeltaMap values. In this case, qpDeltaMap should be set to 
NULL.
 
                                                                                
             Other values are reserved for future use.*/
-    uint32_t                        reserved[7];
+    NV_ENC_MULTI_PASS               multiPass;                                 
   /**< [in]: This flag is used to enable multi-pass encoding for a given 
::NV_ENC_PARAMS_RC_MODE. This flag is not valid for H264 and HEVC MEOnly mode */
+    uint32_t                        reserved[6];
  } NV_ENC_RC_PARAMS;
 
 /** macro for constructing the version field of ::_NV_ENC_RC_PARAMS */
@@ -1299,10 +1354,10 @@
  */
 typedef struct _NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE
 {
-    uint32_t   numCandsPerBlk16x16                   : 4;   /**< [in]: 
Supported for H264,HEVC.It Specifies the number of candidates per 16x16 block. 
*/
-    uint32_t   numCandsPerBlk16x8                    : 4;   /**< [in]: 
Supported for H264 only.Specifies the number of candidates per 16x8 block. */
-    uint32_t   numCandsPerBlk8x16                    : 4;   /**< [in]: 
Supported for H264 only.Specifies the number of candidates per 8x16 block. */
-    uint32_t   numCandsPerBlk8x8                     : 4;   /**< [in]: 
Supported for H264,HEVC.Specifies the number of candidates per 8x8 block. */
+    uint32_t   numCandsPerBlk16x16                   : 4;   /**< [in]: 
Supported for H264, HEVC. It Specifies the number of candidates per 16x16 
block. */
+    uint32_t   numCandsPerBlk16x8                    : 4;   /**< [in]: 
Supported for H264 only. Specifies the number of candidates per 16x8 block. */
+    uint32_t   numCandsPerBlk8x16                    : 4;   /**< [in]: 
Supported for H264 only. Specifies the number of candidates per 8x16 block. */
+    uint32_t   numCandsPerBlk8x8                     : 4;   /**< [in]: 
Supported for H264, HEVC. Specifies the number of candidates per 8x8 block. */
     uint32_t   reserved                              : 16;  /**< [in]: 
Reserved for padding. */
     uint32_t   reserved1[3];                                /**< [in]: 
Reserved for future use. */
 } NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE;
@@ -1332,20 +1387,22 @@
 {
     uint32_t reserved                  :1;                          /**< [in]: 
Reserved and must be set to 0 */
     uint32_t enableStereoMVC           :1;                          /**< [in]: 
Set to 1 to enable stereo MVC*/
-    uint32_t hierarchicalPFrames       :1;                          /**< [in]: 
Set to 1 to enable hierarchical PFrames */
-    uint32_t hierarchicalBFrames       :1;                          /**< [in]: 
Set to 1 to enable hierarchical BFrames */
+    uint32_t hierarchicalPFrames       :1;                          /**< [in]: 
Set to 1 to enable hierarchical P Frames */
+    uint32_t hierarchicalBFrames       :1;                          /**< [in]: 
Set to 1 to enable hierarchical B Frames */
     uint32_t outputBufferingPeriodSEI  :1;                          /**< [in]: 
Set to 1 to write SEI buffering period syntax in the bitstream */
     uint32_t outputPictureTimingSEI    :1;                          /**< [in]: 
Set to 1 to write SEI picture timing syntax in the bitstream.  When set for 
following rateControlMode : NV_ENC_PARAMS_RC_CBR, 
NV_ENC_PARAMS_RC_CBR_LOWDELAY_HQ,
-                                                                               
NV_ENC_PARAMS_RC_CBR_HQ, filler data is inserted if needed to achieve hrd 
bitrate */
+                                                                               
NV_ENC_PARAMS_RC_CBR_HQ, filler data is inserted if needed to achieve HRD 
bitrate */
     uint32_t outputAUD                 :1;                          /**< [in]: 
Set to 1 to write access unit delimiter syntax in bitstream */
     uint32_t disableSPSPPS             :1;                          /**< [in]: 
Set to 1 to disable writing of Sequence and Picture parameter info in bitstream 
*/
     uint32_t outputFramePackingSEI     :1;                          /**< [in]: 
Set to 1 to enable writing of frame packing arrangement SEI messages to 
bitstream */
     uint32_t outputRecoveryPointSEI    :1;                          /**< [in]: 
Set to 1 to enable writing of recovery point SEI message */
     uint32_t enableIntraRefresh        :1;                          /**< [in]: 
Set to 1 to enable gradual decoder refresh or intra refresh. If the GOP 
structure uses B frames this will be ignored */
-    uint32_t enableConstrainedEncoding :1;                          /**< [in]: 
Set this to 1 to enable constrainedFrame encoding where each slice in the 
constarined picture is independent of other slices
+    uint32_t enableConstrainedEncoding :1;                          /**< [in]: 
Set this to 1 to enable constrainedFrame encoding where each slice in the 
constrained picture is independent of other slices.
+                                                                               
Constrained encoding works only with rectangular slices.
                                                                                
Check support for constrained encoding using 
::NV_ENC_CAPS_SUPPORT_CONSTRAINED_ENCODING caps. */
     uint32_t repeatSPSPPS              :1;                          /**< [in]: 
Set to 1 to enable writing of Sequence and Picture parameter for every IDR 
frame */
-    uint32_t enableVFR                 :1;                          /**< [in]: 
Set to 1 to enable variable frame rate. */
+    uint32_t enableVFR                 :1;                          /**< [in]: 
Setting enableVFR=1 currently only sets the fixed_frame_rate_flag=0 in the VUI 
but otherwise
+                                                                               
has no impact on the encoder behavior. For more details please refer to E.1 VUI 
syntax of H.264 standard. Note, however, that NVENC does not support VFR 
encoding and rate control. */
     uint32_t enableLTR                 :1;                          /**< [in]: 
Set to 1 to enable LTR (Long Term Reference) frame support. LTR can be used in 
two modes: "LTR Trust" mode and "LTR Per Picture" mode.
                                                                                
LTR Trust mode: In this mode, ltrNumFrames pictures after IDR are automatically 
marked as LTR. This mode is enabled by setting ltrTrustMode = 1.
                                                                                
                Use of LTR Trust mode is strongly discouraged as this mode may 
be deprecated in future.
@@ -1370,7 +1427,11 @@
     uint32_t level;                                                 /**< [in]: 
Specifies the encoding level. Client is recommended to set this to 
NV_ENC_LEVEL_AUTOSELECT in order to enable the NvEncodeAPI interface to select 
the correct level. */
     uint32_t idrPeriod;                                             /**< [in]: 
Specifies the IDR interval. If not set, this is made equal to gopLength in 
NV_ENC_CONFIG.Low latency application client can set IDR interval to 
NVENC_INFINITE_GOPLENGTH so that IDR frames are not inserted automatically. */
     uint32_t separateColourPlaneFlag;                               /**< [in]: 
Set to 1 to enable 4:4:4 separate colour planes */
-    uint32_t disableDeblockingFilterIDC;                            /**< [in]: 
Specifies the deblocking filter mode. Permissible value range: [0,2] */
+    uint32_t disableDeblockingFilterIDC;                            /**< [in]: 
Specifies the deblocking filter mode. Permissible value range: [0,2]. This flag 
corresponds
+                                                                               
to the flag disable_deblocking_filter_idc specified in section 7.4.3 of H.264 
specification,
+                                                                               
which specifies whether the operation of the deblocking filter shall be 
disabled across some
+                                                                               
block edges of the slice and specifies for which edges the filtering is 
disabled. See section
+                                                                               
7.4.3 of H.264 specification for more details.*/
     uint32_t numTemporalLayers;                                     /**< [in]: 
Specifies max temporal layers to be used for hierarchical coding. Valid value 
range is [1,::NV_ENC_CAPS_NUM_MAX_TEMPORAL_LAYERS] */
     uint32_t spsId;                                                 /**< [in]: 
Specifies the SPS id of the sequence header */
     uint32_t ppsId;                                                 /**< [in]: 
Specifies the PPS id of the picture header */
@@ -1378,11 +1439,11 @@
     NV_ENC_H264_FMO_MODE                fmoMode;                    /**< [in]: 
Specified the FMO Mode. Check support for FMO using ::NV_ENC_CAPS_SUPPORT_FMO 
caps. */
     NV_ENC_H264_BDIRECT_MODE            bdirectMode;                /**< [in]: 
Specifies the BDirect mode. Check support for BDirect mode using 
::NV_ENC_CAPS_SUPPORT_BDIRECT_MODE caps.*/
     NV_ENC_H264_ENTROPY_CODING_MODE     entropyCodingMode;          /**< [in]: 
Specifies the entropy coding mode. Check support for CABAC mode using 
::NV_ENC_CAPS_SUPPORT_CABAC caps. */
-    NV_ENC_STEREO_PACKING_MODE          stereoMode;                 /**< [in]: 
Specifies the stereo frame packing mode which is to be signalled in frame 
packing arrangement SEI */
+    NV_ENC_STEREO_PACKING_MODE          stereoMode;                 /**< [in]: 
Specifies the stereo frame packing mode which is to be signaled in frame 
packing arrangement SEI */
     uint32_t                            intraRefreshPeriod;         /**< [in]: 
Specifies the interval between successive intra refresh if enableIntrarefresh 
is set. Requires enableIntraRefresh to be set.
                                                                                
Will be disabled if NV_ENC_CONFIG::gopLength is not set to 
NVENC_INFINITE_GOPLENGTH. */
     uint32_t                            intraRefreshCnt;            /**< [in]: 
Specifies the length of intra refresh in number of frames for periodic intra 
refresh. This value should be smaller than intraRefreshPeriod */
-    uint32_t                            maxNumRefFrames;            /**< [in]: 
Specifies the DPB size used for encoding. Setting it to 0 will let driver use 
the default dpb size.
+    uint32_t                            maxNumRefFrames;            /**< [in]: 
Specifies the DPB size used for encoding. Setting it to 0 will let driver use 
the default DPB size.
                                                                                
The low latency application which wants to invalidate reference frame as an 
error resilience tool
                                                                                
is recommended to use a large DPB size so that the encoder can keep old 
reference frames which can be used if recent
                                                                                
frames are invalidated. */
@@ -1395,7 +1456,7 @@
                                                                                
sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except 
last slice)
                                                                                
sliceMode = 2, sliceModeData specifies # of MB rows in each slice (except last 
slice)
                                                                                
sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver 
will divide picture into slices optimally */
-    NV_ENC_CONFIG_H264_VUI_PARAMETERS   h264VUIParameters;          /**< [in]: 
Specifies the H264 video usability info pamameters */
+    NV_ENC_CONFIG_H264_VUI_PARAMETERS   h264VUIParameters;          /**< [in]: 
Specifies the H264 video usability info parameters */
     uint32_t                            ltrNumFrames;               /**< [in]: 
Specifies the number of LTR frames. This parameter has different meaning in two 
LTR modes.
                                                                                
In "LTR Trust" mode (ltrTrustMode = 1), encoder will mark the first 
ltrNumFrames base layer reference frames within each IDR interval as LTR.
                                                                                
In "LTR Per Picture" mode (ltrTrustMode = 0 and ltrMarkFrame = 1), ltrNumFrames 
specifies maximum number of LTR frames in DPB. */
@@ -1437,7 +1498,7 @@
                                                                                
                      ltrTrustMode = 0 and ltrMarkFrame = 1 for the picture to 
be marked as LTR. This is the preferred mode
                                                                                
                      for using LTR.
                                                                                
Note that LTRs are not supported if encoding session is configured with 
B-frames */
-    uint32_t disableSPSPPS                         :1;              /**< [in]: 
Set 1 to disable VPS,SPS and PPS signalling in the bitstream. */
+    uint32_t disableSPSPPS                         :1;              /**< [in]: 
Set 1 to disable VPS, SPS and PPS signaling in the bitstream. */
     uint32_t repeatSPSPPS                          :1;              /**< [in]: 
Set 1 to output VPS,SPS and PPS for every IDR frame.*/
     uint32_t enableIntraRefresh                    :1;              /**< [in]: 
Set 1 to enable gradual decoder refresh or intra refresh. If the GOP structure 
uses B frames this will be ignored */
     uint32_t chromaFormatIDC                       :2;              /**< [in]: 
Specifies the chroma format. Should be set to 1 for yuv420 input, 3 for yuv444 
input.*/
@@ -1452,8 +1513,11 @@
                                                                                
NV_ENC_INITIALIZE_PARAMS::enableOutputInVidmem is also set
                                                                                
is currently not supported and will make ::NvEncInitializeEncoder()
                                                                                
return an error. */
-    uint32_t reserved                              :17;             /**< [in]: 
Reserved bitfields.*/
-    uint32_t idrPeriod;                                             /**< [in]: 
Specifies the IDR interval. If not set, this is made equal to gopLength in 
NV_ENC_CONFIG.Low latency application client can set IDR interval to 
NVENC_INFINITE_GOPLENGTH so that IDR frames are not inserted automatically. */
+    uint32_t enableConstrainedEncoding             :1;              /**< [in]: 
Set this to 1 to enable constrainedFrame encoding where each slice in the 
constrained picture is independent of other slices.
+                                                                               
Constrained encoding works only with rectangular slices.
+                                                                               
Check support for constrained encoding using 
::NV_ENC_CAPS_SUPPORT_CONSTRAINED_ENCODING caps. */
+    uint32_t reserved                              :16;             /**< [in]: 
Reserved bitfields.*/
+    uint32_t idrPeriod;                                             /**< [in]: 
Specifies the IDR interval. If not set, this is made equal to gopLength in 
NV_ENC_CONFIG. Low latency application client can set IDR interval to 
NVENC_INFINITE_GOPLENGTH so that IDR frames are not inserted automatically. */
     uint32_t intraRefreshPeriod;                                    /**< [in]: 
Specifies the interval between successive intra refresh if enableIntrarefresh 
is set. Requires enableIntraRefresh to be set.
                                                                     Will be 
disabled if NV_ENC_CONFIG::gopLength is not set to NVENC_INFINITE_GOPLENGTH. */
     uint32_t intraRefreshCnt;                                       /**< [in]: 
Specifies the length of intra refresh in number of frames for periodic intra 
refresh. This value should be smaller than intraRefreshPeriod */
@@ -1473,7 +1537,7 @@
                                                                                
 sliceMode = 2, sliceModeData specifies # of CTU rows in each slice (except 
last slice)
                                                                                
 sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver 
will divide picture into slices optimally */
     uint32_t maxTemporalLayersMinus1;                               /**< [in]: 
Specifies the max temporal layer used for hierarchical coding. */
-    NV_ENC_CONFIG_HEVC_VUI_PARAMETERS   hevcVUIParameters;          /**< [in]: 
Specifies the HEVC video usability info pamameters */
+    NV_ENC_CONFIG_HEVC_VUI_PARAMETERS   hevcVUIParameters;          /**< [in]: 
Specifies the HEVC video usability info parameters */
     uint32_t ltrTrustMode;                                          /**< [in]: 
Specifies the LTR operating mode. See comments near 
NV_ENC_CONFIG_HEVC::enableLTR for description of the two modes.
                                                                                
Set to 1 to use "LTR Trust" mode of LTR operation. Clients are discouraged to 
use "LTR Trust" mode as this mode may
                                                                                
be deprecated in future releases.
@@ -1494,11 +1558,11 @@
  */
 typedef struct _NV_ENC_CONFIG_H264_MEONLY
 {
-    uint32_t disablePartition16x16 :1;                          /**< [in]: 
Disable MotionEstimation on 16x16 blocks*/
-    uint32_t disablePartition8x16  :1;                          /**< [in]: 
Disable MotionEstimation on 8x16 blocks*/
-    uint32_t disablePartition16x8  :1;                          /**< [in]: 
Disable MotionEstimation on 16x8 blocks*/
-    uint32_t disablePartition8x8   :1;                          /**< [in]: 
Disable MotionEstimation on 8x8 blocks*/
-    uint32_t disableIntraSearch    :1;                          /**< [in]: 
Disable Intra search during MotionEstimation*/
+    uint32_t disablePartition16x16 :1;                          /**< [in]: 
Disable Motion Estimation on 16x16 blocks*/
+    uint32_t disablePartition8x16  :1;                          /**< [in]: 
Disable Motion Estimation on 8x16 blocks*/
+    uint32_t disablePartition16x8  :1;                          /**< [in]: 
Disable Motion Estimation on 16x8 blocks*/
+    uint32_t disablePartition8x8   :1;                          /**< [in]: 
Disable Motion Estimation on 8x8 blocks*/
+    uint32_t disableIntraSearch    :1;                          /**< [in]: 
Disable Intra search during Motion Estimation*/
     uint32_t bStereoEnable         :1;                          /**< [in]: 
Enable Stereo Mode for Motion Estimation where each view is independently 
executed*/
     uint32_t reserved              :26;                         /**< [in]: 
Reserved and must be set to 0 */
     uint32_t reserved1 [255];                                   /**< [in]: 
Reserved and must be set to 0 */
@@ -1538,7 +1602,7 @@
 typedef struct _NV_ENC_CONFIG
 {
     uint32_t                        version;                                   
  /**< [in]: Struct version. Must be set to ::NV_ENC_CONFIG_VER. */
-    GUID                            profileGUID;                               
  /**< [in]: Specifies the codec profile guid. If client specifies \p 
NV_ENC_CODEC_PROFILE_AUTOSELECT_GUID the NvEncodeAPI interface will select the 
appropriate codec profile. */
+    GUID                            profileGUID;                               
  /**< [in]: Specifies the codec profile GUID. If client specifies \p 
NV_ENC_CODEC_PROFILE_AUTOSELECT_GUID the NvEncodeAPI interface will select the 
appropriate codec profile. */
     uint32_t                        gopLength;                                 
  /**< [in]: Specifies the number of pictures in one GOP. Low latency 
application client can set goplength to NVENC_INFINITE_GOPLENGTH so that 
keyframes are not inserted automatically. */
     int32_t                         frameIntervalP;                            
  /**< [in]: Specifies the GOP pattern as follows: \p frameIntervalP = 0: I, 1: 
IPP, 2: IBP, 3: IBBP  If goplength is set to NVENC_INFINITE_GOPLENGTH \p 
frameIntervalP should be set to 1. */
     uint32_t                        monoChromeEncoding;                        
  /**< [in]: Set this to 1 to enable monochrome encoding for this session. */
@@ -1555,6 +1619,18 @@
 /** macro for constructing the version field of ::_NV_ENC_CONFIG */
 #define NV_ENC_CONFIG_VER (NVENCAPI_STRUCT_VERSION(7) | ( 1<<31 ))
 
+/**
+ *  Tuning information of NVENC encoding (TuningInfo is not applicable to H264 
and HEVC MEOnly mode).
+ */
+typedef enum NV_ENC_TUNING_INFO
+{
+    NV_ENC_TUNING_INFO_UNDEFINED         = 0,                                  
   /**< Undefined tuningInfo. Invalid value for encoding. */
+    NV_ENC_TUNING_INFO_HIGH_QUALITY      = 1,                                  
   /**< Tune presets for latency tolerant encoding.*/
+    NV_ENC_TUNING_INFO_LOW_LATENCY       = 2,                                  
   /**< Tune presets for low latency streaming.*/
+    NV_ENC_TUNING_INFO_ULTRA_LOW_LATENCY = 3,                                  
   /**< Tune presets for ultra low latency streaming.*/
+    NV_ENC_TUNING_INFO_LOSSLESS          = 4,                                  
   /**< Tune presets for lossless encoding.*/
+    NV_ENC_TUNING_INFO_COUNT                                                   
   /**< Count number of tuningInfos. Invalid value. */
+}NV_ENC_TUNING_INFO;
 
 /**
  * \struct _NV_ENC_INITIALIZE_PARAMS
@@ -1574,11 +1650,15 @@
     uint32_t                                   enableEncodeAsync;              
 /**< [in]: Set this to 1 to enable asynchronous mode and is expected to use 
events to get picture completion notification. */
     uint32_t                                   enablePTD;                      
 /**< [in]: Set this to 1 to enable the Picture Type Decision is be taken by 
the NvEncodeAPI interface. */
     uint32_t                                   reportSliceOffsets        :1;   
 /**< [in]: Set this to 1 to enable reporting slice offsets in 
::_NV_ENC_LOCK_BITSTREAM. NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync must be 
set to 0 to use this feature. Client must set this to 0 if 
NV_ENC_CONFIG_H264::sliceMode is 1 on Kepler GPUs */
-    uint32_t                                   enableSubFrameWrite       :1;   
 /**< [in]: Set this to 1 to write out available bitstream to memory at 
subframe intervals */
+    uint32_t                                   enableSubFrameWrite       :1;   
 /**< [in]: Set this to 1 to write out available bitstream to memory at 
subframe intervals.
+                                                                               
            If enableSubFrameWrite = 1, then the hardware encoder returns data 
as soon as a slice has completed encoding.
+                                                                               
            This results in better encoding latency, but the downside is that 
the application has to keep polling via a call to nvEncLockBitstream API 
continuously to see if any encoded slice data is available.
+                                                                               
            Use this mode if you feel that the marginal reduction in latency 
from sub-frame encoding is worth the increase in complexity due to CPU-based 
polling. */
     uint32_t                                   enableExternalMEHints     :1;   
 /**< [in]: Set to 1 to enable external ME hints for the current frame. For 
NV_ENC_INITIALIZE_PARAMS::enablePTD=1 with B frames, programming L1 hints is 
optional for B frames since Client doesn't know internal GOP structure.
                                                                                
            NV_ENC_PIC_PARAMS::meHintRefPicDist should preferably be set with 
enablePTD=1. */
     uint32_t                                   enableMEOnlyMode          :1;   
 /**< [in]: Set to 1 to enable ME Only Mode .*/
-    uint32_t                                   enableWeightedPrediction  :1;   
 /**< [in]: Set this to 1 to enable weighted prediction. Not supported if 
encode session is configured for B-Frames( 'frameIntervalP' in NV_ENC_CONFIG is 
greater than 1).*/
+    uint32_t                                   enableWeightedPrediction  :1;   
 /**< [in]: Set this to 1 to enable weighted prediction. Not supported if 
encode session is configured for B-Frames (i.e. NV_ENC_CONFIG::frameIntervalP > 
1 or preset >=P3 when tuningInfo = ::NV_ENC_TUNING_INFO_HIGH_QUALITY or
+                                                                               
            tuningInfo = ::NV_ENC_TUNING_INFO_LOSSLESS. This is because preset 
>=p3 internally enables B frames when tuningInfo = 
::NV_ENC_TUNING_INFO_HIGH_QUALITY or ::NV_ENC_TUNING_INFO_LOSSLESS). */
     uint32_t                                   enableOutputInVidmem      :1;   
 /**< [in]: Set this to 1 to enable output of NVENC in video memory buffer 
created by application. This feature is not supported for HEVC ME only mode. */
     uint32_t                                   reservedBitFields         :26;  
 /**< [in]: Reserved bitfields and must be set to 0 */
     uint32_t                                   privDataSize;                   
 /**< [in]: Reserved private data buffer size and must be set to 0 */
@@ -1593,7 +1673,8 @@
     NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE maxMEHintCountsPerBlock[2];    
  /**< [in]: If Client wants to pass external motion vectors in 
NV_ENC_PIC_PARAMS::meExternalHints buffer it must specify the maximum number of 
hint candidates per block per direction for the encode session.
                                                                                
            The NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[0] is for L0 
predictors and NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[1] is for L1 
predictors.
                                                                                
            This client must also set 
NV_ENC_INITIALIZE_PARAMS::enableExternalMEHints to 1. */
-    uint32_t                                   reserved [289];                 
 /**< [in]: Reserved and must be set to 0 */
+    NV_ENC_TUNING_INFO                         tuningInfo;                     
 /**< [in]: Tuning Info of NVENC encoding(TuningInfo is not applicable to H264 
and HEVC meonly mode). */
+    uint32_t                                   reserved [288];                 
 /**< [in]: Reserved and must be set to 0 */
     void*                                      reserved2[64];                  
 /**< [in]: Reserved and must be set to NULL */
 } NV_ENC_INITIALIZE_PARAMS;
 
@@ -1725,9 +1806,9 @@
                                                                     sliceMode 
= 2, sliceModeData specifies # of MB rows in each slice (except last slice)
                                                                     sliceMode 
= 3, sliceModeData specifies number of slices in the picture. Driver will 
divide picture into slices optimally */
     uint32_t ltrMarkFrameIdx;                            /**< [in]: Specifies 
the long term referenceframe index to use for marking this frame as LTR.*/
-    uint32_t ltrUseFrameBitmap;                          /**< [in]: Specifies 
the the associated bitmap of LTR frame indices to use when encoding this frame. 
*/
+    uint32_t ltrUseFrameBitmap;                          /**< [in]: Specifies 
the associated bitmap of LTR frame indices to use when encoding this frame. */
     uint32_t ltrUsageMode;                               /**< [in]: Not 
supported. Reserved for future use and must be set to 0. */
-    uint32_t forceIntraSliceCount;                       /**< [in]: Specfies 
the number of slices to be forced to Intra in the current picture.
+    uint32_t forceIntraSliceCount;                       /**< [in]: Specifies 
the number of slices to be forced to Intra in the current picture.
                                                                     This 
option along with forceIntraSliceIdx[] array needs to be used with sliceMode = 
3 only */
     uint32_t *forceIntraSliceIdx;                        /**< [in]: Slice 
indices to be forced to intra in the current picture. Each slice index should 
be <= num_slices_in_picture -1. Index starts from 0 for first slice.
                                                                     The number 
of entries in this array should be equal to forceIntraSliceCount */
@@ -1796,12 +1877,14 @@
 typedef struct _NV_ENC_PIC_PARAMS
 {
     uint32_t                                    version;                       
 /**< [in]: Struct version. Must be set to ::NV_ENC_PIC_PARAMS_VER. */
-    uint32_t                                    inputWidth;                    
 /**< [in]: Specifies the input buffer width */
-    uint32_t                                    inputHeight;                   
 /**< [in]: Specifies the input buffer height */
+    uint32_t                                    inputWidth;                    
 /**< [in]: Specifies the input frame width */
+    uint32_t                                    inputHeight;                   
 /**< [in]: Specifies the input frame height */
     uint32_t                                    inputPitch;                    
 /**< [in]: Specifies the input buffer pitch. If pitch value is not known, set 
this to inputWidth. */
-    uint32_t                                    encodePicFlags;                
 /**< [in]: Specifies bit-wise OR`ed encode pic flags. See ::NV_ENC_PIC_FLAGS 
enum. */
+    uint32_t                                    encodePicFlags;                
 /**< [in]: Specifies bit-wise OR of encode picture flags. See 
::NV_ENC_PIC_FLAGS enum. */
     uint32_t                                    frameIdx;                      
 /**< [in]: Specifies the frame index associated with the input frame 
[optional]. */
-    uint64_t                                    inputTimeStamp;                
 /**< [in]: Specifies presentation timestamp associated with the input picture. 
*/
+    uint64_t                                    inputTimeStamp;                
 /**< [in]: Specifies opaque data which is associated with the encoded frame, 
but not actually encoded in the output bitstream.
+                                                                               
            This opaque data can be used later to uniquely refer to the 
corresponding encoded frame. For example, it can be used
+                                                                               
            for identifying the frame to be invalidated in the reference 
picture buffer, if lost at the client. */
     uint64_t                                    inputDuration;                 
 /**< [in]: Specifies duration of the input picture */
     NV_ENC_INPUT_PTR                            inputBuffer;                   
 /**< [in]: Specifies the input buffer pointer. Client must use a pointer 
obtained from ::NvEncCreateInputBuffer() or ::NvEncMapInputResource() APIs.*/
     NV_ENC_OUTPUT_PTR                           outputBitstream;               
 /**< [in]: Specifies the output buffer pointer.
@@ -1812,24 +1895,24 @@
                                                                                
            NV_ENC_ENCODE_OUT_PARAMS struct and twice the input frame size for 
lower resolution eg. CIF and 1.5 times the input frame size for higher 
resolutions. If encoded bitstream size is
                                                                                
            greater than the allocated buffer size for encoded bitstream, then 
the output buffer will have encoded bitstream data equal to buffer size. All 
CUDA operations on this buffer must use
                                                                                
            the default stream. */
-    void*                                       completionEvent;               
 /**< [in]: Specifies an event to be signalled on completion of encoding of 
this Frame [only if operating in Asynchronous mode]. Each output buffer should 
be associated with a distinct event pointer. */
+    void*                                       completionEvent;               
 /**< [in]: Specifies an event to be signaled on completion of encoding of this 
Frame [only if operating in Asynchronous mode]. Each output buffer should be 
associated with a distinct event pointer. */
     NV_ENC_BUFFER_FORMAT                        bufferFmt;                     
 /**< [in]: Specifies the input buffer format. */
     NV_ENC_PIC_STRUCT                           pictureStruct;                 
 /**< [in]: Specifies structure of the input picture. */
     NV_ENC_PIC_TYPE                             pictureType;                   
 /**< [in]: Specifies input picture type. Client required to be set explicitly 
by the client if the client has not set NV_ENC_INITALIZE_PARAMS::enablePTD to 1 
while calling NvInitializeEncoder. */
     NV_ENC_CODEC_PIC_PARAMS                     codecPicParams;                
 /**< [in]: Specifies the codec specific per-picture encoding parameters. */
     NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE meHintCountsPerBlock[2];       
 /**< [in]: Specifies the number of hint candidates per block per direction for 
the current frame. meHintCountsPerBlock[0] is for L0 predictors and 
meHintCountsPerBlock[1] is for L1 predictors.
-                                                                               
            The candidate count in NV_ENC_PIC_PARAMS::meHintCountsPerBlock[lx] 
must never exceed NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[lx] 
provided during encoder intialization. */
+                                                                               
            The candidate count in NV_ENC_PIC_PARAMS::meHintCountsPerBlock[lx] 
must never exceed NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[lx] 
provided during encoder initialization. */
     NVENC_EXTERNAL_ME_HINT                     *meExternalHints;               
 /**< [in]: Specifies the pointer to ME external hints for the current frame. 
The size of ME hint buffer should be equal to number of macroblocks * the total 
number of candidates per macroblock.
                                                                                
            The total number of candidates per MB per direction = 
1*meHintCountsPerBlock[Lx].numCandsPerBlk16x16 + 
2*meHintCountsPerBlock[Lx].numCandsPerBlk16x8 + 
2*meHintCountsPerBlock[Lx].numCandsPerBlk8x8
                                                                                
            + 4*meHintCountsPerBlock[Lx].numCandsPerBlk8x8. For frames using 
bidirectional ME , the total number of candidates for single macroblock is sum 
of total number of candidates per MB for each direction (L0 and L1) */
     uint32_t                                    reserved1[6];                  
  /**< [in]: Reserved and must be set to 0 */
     void*                                       reserved2[2];                  
  /**< [in]: Reserved and must be set to NULL */
-    int8_t                                     *qpDeltaMap;                    
  /**< [in]: Specifies the pointer to signed byte array containing value per MB 
in raster scan order for the current picture, which will be interpreted 
depending on NV_ENC_RC_PARAMS::qpMapMode.
-                                                                               
             If NV_ENC_RC_PARAMS::qpMapMode is NV_ENC_QP_MAP_DELTA, qpDeltaMap 
specifies QP modifier per MB. This QP modifier will be applied on top of the QP 
chosen by rate control.
-                                                                               
             If NV_ENC_RC_PARAMS::qpMapMode is NV_ENC_QP_MAP_EMPHASIS, 
qpDeltaMap specifies Emphasis Level Map per MB. This level value along with QP 
chosen by rate control is used to
+    int8_t                                     *qpDeltaMap;                    
  /**< [in]: Specifies the pointer to signed byte array containing value per MB 
for H264 and per CTB for HEVC in raster scan order for the current picture, 
which will be interpreted depending on NV_ENC_RC_PARAMS::qpMapMode.
+                                                                               
             If NV_ENC_RC_PARAMS::qpMapMode is NV_ENC_QP_MAP_DELTA, qpDeltaMap 
specifies QP modifier per MB for H264 and per CTB for HEVC. This QP modifier 
will be applied on top of the QP chosen by rate control.
+                                                                               
             If NV_ENC_RC_PARAMS::qpMapMode is NV_ENC_QP_MAP_EMPHASIS, 
qpDeltaMap specifies Emphasis Level Map per MB for H264. This level value along 
with QP chosen by rate control is used to
                                                                                
             compute the QP modifier, which in turn is applied on top of QP 
chosen by rate control.
                                                                                
             If NV_ENC_RC_PARAMS::qpMapMode is NV_ENC_QP_MAP_DISABLED, value in 
qpDeltaMap will be ignored.*/
-    uint32_t                                    qpDeltaMapSize;                
  /**< [in]: Specifies the size in bytes of qpDeltaMap surface allocated by 
client and pointed to by NV_ENC_PIC_PARAMS::qpDeltaMap. Surface (array) should 
be picWidthInMbs * picHeightInMbs */
+    uint32_t                                    qpDeltaMapSize;                
  /**< [in]: Specifies the size in bytes of qpDeltaMap surface allocated by 
client and pointed to by NV_ENC_PIC_PARAMS::qpDeltaMap. Surface (array) should 
be picWidthInMbs * picHeightInMbs for H264 and picWidthInCtbs * picHeightInCtbs 
for HEVC */
     uint32_t                                    reservedBitFields;             
  /**< [in]: Reserved bitfields and must be set to 0 */
     uint16_t                                    meHintRefPicDist[2];           
  /**< [in]: Specifies temporal distance for reference picture 
(NVENC_EXTERNAL_ME_HINT::refidx = 0) used during external ME with 
NV_ENC_INITALIZE_PARAMS::enablePTD = 1 . meHintRefPicDist[0] is for L0 hints 
and meHintRefPicDist[1] is for L1 hints.
                                                                                
             If not set, will internally infer distance of 1. Ignored for 
NV_ENC_INITALIZE_PARAMS::enablePTD = 0 */
@@ -1849,8 +1932,8 @@
 typedef struct _NV_ENC_MEONLY_PARAMS
 {
     uint32_t                version;                            /**< [in]: 
Struct version. Must be set to NV_ENC_MEONLY_PARAMS_VER.*/
-    uint32_t                inputWidth;                         /**< [in]: 
Specifies the input buffer width */
-    uint32_t                inputHeight;                        /**< [in]: 
Specifies the input buffer height */
+    uint32_t                inputWidth;                         /**< [in]: 
Specifies the input frame width */
+    uint32_t                inputHeight;                        /**< [in]: 
Specifies the input frame height */
     NV_ENC_INPUT_PTR        inputBuffer;                        /**< [in]: 
Specifies the input buffer pointer. Client must use a pointer obtained from 
NvEncCreateInputBuffer() or NvEncMapInputResource() APIs. */
     NV_ENC_INPUT_PTR        referenceFrame;                     /**< [in]: 
Specifies the reference frame pointer */
     NV_ENC_OUTPUT_PTR       mvBuffer;                           /**< [in]: 
Specifies the output buffer pointer.
@@ -1860,14 +1943,14 @@
                                                                            be 
equal to total number of macroblocks multiplied by size of NV_ENC_H264_MV_DATA 
struct. Client should use a pointer obtained from ::NvEncMapInputResource() 
API, when mapping this
                                                                            
output buffer and assign it to NV_ENC_MEONLY_PARAMS::mvBuffer. All CUDA 
operations on this buffer must use the default stream. */
     NV_ENC_BUFFER_FORMAT    bufferFmt;                          /**< [in]: 
Specifies the input buffer format. */
-    void*                   completionEvent;                    /**< [in]: 
Specifies an event to be signalled on completion of motion estimation
+    void*                   completionEvent;                    /**< [in]: 
Specifies an event to be signaled on completion of motion estimation
                                                                            of 
this Frame [only if operating in Asynchronous mode].
                                                                            
Each output buffer should be associated with a distinct event pointer. */
-    uint32_t                viewID;                             /**< [in]: 
Specifies left,right viewID if NV_ENC_CONFIG_H264_MEONLY::bStereoEnable is set.
+    uint32_t                viewID;                             /**< [in]: 
Specifies left or right viewID if NV_ENC_CONFIG_H264_MEONLY::bStereoEnable is 
set.
                                                                             
viewID can be 0,1 if bStereoEnable is set, 0 otherwise. */
     NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE
                             meHintCountsPerBlock[2];            /**< [in]: 
Specifies the number of hint candidates per block for the current frame. 
meHintCountsPerBlock[0] is for L0 predictors.
-                                                                            
The candidate count in NV_ENC_PIC_PARAMS::meHintCountsPerBlock[lx] must never 
exceed NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[lx] provided during 
encoder intialization. */
+                                                                            
The candidate count in NV_ENC_PIC_PARAMS::meHintCountsPerBlock[lx] must never 
exceed NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[lx] provided during 
encoder initialization. */
     NVENC_EXTERNAL_ME_HINT  *meExternalHints;                   /**< [in]: 
Specifies the pointer to ME external hints for the current frame. The size of 
ME hint buffer should be equal to number of macroblocks * the total number of 
candidates per macroblock.
                                                                             
The total number of candidates per MB per direction = 
1*meHintCountsPerBlock[Lx].numCandsPerBlk16x16 + 
2*meHintCountsPerBlock[Lx].numCandsPerBlk16x8 + 
2*meHintCountsPerBlock[Lx].numCandsPerBlk8x8
                                                                             + 
4*meHintCountsPerBlock[Lx].numCandsPerBlk8x8. For frames using bidirectional ME 
, the total number of candidates for single macroblock is sum of total number 
of candidates per MB for each direction (L0 and L1) */
@@ -1891,7 +1974,7 @@
     uint32_t                getRCStats        :1;        /**< [in]: If this 
flag is set then lockBitstream call will add additional intra-inter MB count 
and average MVX, MVY */
     uint32_t                reservedBitFields :29;       /**< [in]: Reserved 
bit fields and must be set to 0 */
     void*                   outputBitstream;             /**< [in]: Pointer to 
the bitstream buffer being locked. */
-    uint32_t*               sliceOffsets;                /**< [in,out]: Array 
which receives the slice offsets. This is not supported if 
NV_ENC_CONFIG_H264::sliceMode is 1 on Kepler GPUs. Array size must be equal to 
size of frame in MBs. */
+    uint32_t*               sliceOffsets;                /**< [in, out]: Array 
which receives the slice offsets. This is not supported if 
NV_ENC_CONFIG_H264::sliceMode is 1 on Kepler GPUs. Array size must be equal to 
size of frame in MBs. */
     uint32_t                frameIdx;                    /**< [out]: Frame no. 
for which the bitstream is being retrieved. */
     uint32_t                hwEncodeStatus;              /**< [out]: The 
NvEncodeAPI interface status for the locked picture. */
     uint32_t                numSlices;                   /**< [out]: Number of 
slices in the encoded picture. Will be reported only if 
NV_ENC_INITIALIZE_PARAMS::reportSliceOffsets set to 1. */
@@ -1982,9 +2065,9 @@
                                                                            
::NV_ENC_INPUT_RESOURCE_TYPE_DIRECTX,
                                                                            
::NV_ENC_INPUT_RESOURCE_TYPE_CUDADEVICEPTR,
                                                                            
::NV_ENC_INPUT_RESOURCE_TYPE_OPENGL_TEX */
-    uint32_t                    width;                          /**< [in]: 
Input buffer Width. */
-    uint32_t                    height;                         /**< [in]: 
Input buffer Height. */
-    uint32_t                    pitch;                          /**< [in]: 
Input buffer Pitch.
+    uint32_t                    width;                          /**< [in]: 
Input frame width. */
+    uint32_t                    height;                         /**< [in]: 
Input frame height. */
+    uint32_t                    pitch;                          /**< [in]: 
Input buffer pitch.
                                                                            For 
::NV_ENC_INPUT_RESOURCE_TYPE_DIRECTX resources, set this to 0.
                                                                            For 
::NV_ENC_INPUT_RESOURCE_TYPE_CUDADEVICEPTR resources, set this to
                                                                              
the pitch as obtained from cuMemAllocPitch(), or to the width in
@@ -2022,7 +2105,15 @@
     uint32_t            lastValidByteOffset;             /**< [out]: Offset of 
last valid bytes of completed bitstream */
     uint32_t            sliceOffsets[16];                /**< [out]: Offsets 
of each slice */
     uint32_t            picIdx;                          /**< [out]: Picture 
number */
-    uint32_t            reserved1[233];                  /**< [in]:  Reserved 
and must be set to 0 */
+    uint32_t            frameAvgQP;                      /**< [out]: Average 
QP of the frame. */
+    uint32_t            ltrFrame          :1;            /**< [out]: Flag 
indicating this frame is marked as LTR frame */
+    uint32_t            reservedBitFields :31;           /**< [in]:  Reserved 
bit fields and must be set to 0 */
+    uint32_t            ltrFrameIdx;                     /**< [out]: Frame 
index associated with this LTR frame. */
+    uint32_t            intraMBCount;                    /**< [out]: For H264, 
Number of Intra MBs in the encoded frame. For HEVC, Number of Intra CTBs in the 
encoded frame. */
+    uint32_t            interMBCount;                    /**< [out]: For H264, 
Number of Inter MBs in the encoded frame, includes skip MBs. For HEVC, Number 
of Inter CTBs in the encoded frame. */
+    int32_t             averageMVX;                      /**< [out]: Average 
Motion Vector in X direction for the encoded frame. */
+    int32_t             averageMVY;                      /**< [out]: Average 
Motion Vector in y direction for the encoded frame. */
+    uint32_t            reserved1[226];                  /**< [in]:  Reserved 
and must be set to 0 */
     void*               reserved2[64];                   /**< [in]:  Reserved 
and must be set to NULL */
 } NV_ENC_STAT;
 
@@ -2037,11 +2128,12 @@
 typedef struct _NV_ENC_SEQUENCE_PARAM_PAYLOAD
 {
     uint32_t            version;                         /**< [in]:  Struct 
version. Must be set to ::NV_ENC_INITIALIZE_PARAMS_VER. */
-    uint32_t            inBufferSize;                    /**< [in]:  Specifies 
the size of the spsppsBuffer provied by the client */
+    uint32_t            inBufferSize;                    /**< [in]:  Specifies 
the size of the spsppsBuffer provided by the client */
     uint32_t            spsId;                           /**< [in]:  Specifies 
the SPS id to be used in sequence header. Default value is 0.  */
     uint32_t            ppsId;                           /**< [in]:  Specifies 
the PPS id to be used in picture header. Default value is 0.  */
-    void*               spsppsBuffer;                    /**< [in]:  Specifies 
bitstream header pointer of size NV_ENC_SEQUENCE_PARAM_PAYLOAD::inBufferSize. 
It is the client's responsibility to manage this memory. */
-    uint32_t*           outSPSPPSPayloadSize;            /**< [out]: Size of 
the sequence and picture header in  bytes written by the NvEncodeAPI interface 
to the SPSPPSBuffer. */
+    void*               spsppsBuffer;                    /**< [in]:  Specifies 
bitstream header pointer of size NV_ENC_SEQUENCE_PARAM_PAYLOAD::inBufferSize.
+                                                                     It is the 
client's responsibility to manage this memory. */
+    uint32_t*           outSPSPPSPayloadSize;            /**< [out]: Size of 
the sequence and picture header in bytes. */
     uint32_t            reserved [250];                  /**< [in]:  Reserved 
and must be set to 0 */
     void*               reserved2[64];                   /**< [in]:  Reserved 
and must be set to NULL */
 } NV_ENC_SEQUENCE_PARAM_PAYLOAD;
@@ -2105,7 +2197,7 @@
 /**
  * \brief Retrieves the number of supported encode GUIDs.
  *
- * The function returns the number of codec guids supported by the NvEncodeAPI
+ * The function returns the number of codec GUIDs supported by the NvEncodeAPI
  * interface.
  *
  * \param [in] encoder
@@ -2131,12 +2223,12 @@
 /**
  * \brief Retrieves an array of supported encoder codec GUIDs.
  *
- * The function returns an array of codec guids supported by the NvEncodeAPI 
interface.
+ * The function returns an array of codec GUIDs supported by the NvEncodeAPI 
interface.
  * The client must allocate an array where the NvEncodeAPI interface can
- * fill the supported guids and pass the pointer in \p *GUIDs parameter.
+ * fill the supported GUIDs and pass the pointer in \p *GUIDs parameter.
  * The size of the array can be determined by using 
::NvEncGetEncodeGUIDCount() API.
- * The Nvidia Encoding interface returns the number of codec guids it has 
actually
- * filled in the guid array in the \p GUIDCount parameter.
+ * The Nvidia Encoding interface returns the number of codec GUIDs it has 
actually
+ * filled in the GUID array in the \p GUIDCount parameter.
  *
  * \param [in] encoder
  *   Pointer to the NvEncodeAPI interface.
@@ -2167,15 +2259,15 @@
  * \brief Retrieves the number of supported profile GUIDs.
  *
  * The function returns the number of profile GUIDs supported for a given 
codec.
- * The client must first enumerate the codec guids supported by the NvEncodeAPI
- * interface. After determining the codec guid, it can query the NvEncodeAPI
- * interface to determine the number of profile guids supported for a 
particular
- * codec guid.
+ * The client must first enumerate the codec GUIDs supported by the NvEncodeAPI
+ * interface. After determining the codec GUID, it can query the NvEncodeAPI
+ * interface to determine the number of profile GUIDs supported for a 
particular
+ * codec GUID.
  *
  * \param [in] encoder
  *   Pointer to the NvEncodeAPI interface.
  * \param [in] encodeGUID
- *   The codec guid for which the profile guids are being enumerated.
+ *   The codec GUID for which the profile GUIDs are being enumerated.
  * \param [out] encodeProfileGUIDCount
  *   Number of encode profiles supported for the given encodeGUID.
  *
@@ -2197,9 +2289,9 @@
 /**
  * \brief Retrieves an array of supported encode profile GUIDs.
  *
- * The function returns an array of supported profile guids for a particular
- * codec guid. The client must allocate an array where the NvEncodeAPI 
interface
- * can populate the profile guids. The client can determine the array size 
using
+ * The function returns an array of supported profile GUIDs for a particular
+ * codec GUID. The client must allocate an array where the NvEncodeAPI 
interface
+ * can populate the profile GUIDs. The client can determine the array size 
using
  * ::NvEncGetEncodeProfileGUIDCount() API. The client must also validiate that 
the
  * NvEncodeAPI interface supports the GUID the client wants to pass as \p 
encodeGUID
  * parameter.
@@ -2207,7 +2299,7 @@
  * \param [in] encoder
  *   Pointer to the NvEncodeAPI interface.
  * \param [in] encodeGUID
- *   The encode guid whose profile guids are being enumerated.
+ *   The encode GUID whose profile GUIDs are being enumerated.
  * \param [in] guidArraySize
  *   Number of GUIDs to be retrieved. Should be set to the number retrieved 
using
  *   ::NvEncGetEncodeProfileGUIDCount.
@@ -2329,7 +2421,7 @@
  * \brief Retrieves the number of supported preset GUIDs.
  *
  * The function returns the number of preset GUIDs available for a given codec.
- * The client must validate the codec guid using ::NvEncGetEncodeGUIDs() API
+ * The client must validate the codec GUID using ::NvEncGetEncodeGUIDs() API
  * before calling this function.
  *
  * \param [in] encoder
@@ -2358,11 +2450,11 @@
 /**
  * \brief Receives an array of supported encoder preset GUIDs.
  *
- * The function returns an array of encode preset guids available for a given 
codec.
- * The client can directly use one of the preset guids based upon the use case
- * or target device. The preset guid chosen can be directly used in
+ * The function returns an array of encode preset GUIDs available for a given 
codec.
+ * The client can directly use one of the preset GUIDs based upon the use case
+ * or target device. The preset GUID chosen can be directly used in
  * NV_ENC_INITIALIZE_PARAMS::presetGUID parameter to ::NvEncEncodePicture() 
API.
- * Alternately client can  also use the preset guid to retrieve the encoding 
config
+ * Alternately client can  also use the preset GUID to retrieve the encoding 
config
  * parameters being used by NvEncodeAPI interface for that given preset, using
  * ::NvEncGetEncodePresetConfig() API. It can then modify preset config 
parameters
  * as per its use case and send it to NvEncodeAPI interface as part of
@@ -2376,7 +2468,7 @@
  *   Encode GUID, corresponding to which the list of supported presets is to be
  *   retrieved.
  * \param [in] guidArraySize
- *   Size of array of preset guids passed in \p preset GUIDs
+ *   Size of array of preset GUIDs passed in \p preset GUIDs
  * \param [out] presetGUIDs
  *   Array of supported Encode preset GUIDs from the NvEncodeAPI interface
  *   to client.
@@ -2402,13 +2494,13 @@
 /**
  * \brief Returns a preset config structure supported for given preset GUID.
  *
- * The function returns a preset config structure for a given preset guid. 
Before
- * using this function the client must enumerate the preset guids available for
+ * The function returns a preset config structure for a given preset GUID. 
Before
+ * using this function the client must enumerate the preset GUIDs available for
  * a given codec. The preset config structure can be modified by the client 
depending
  * upon its use case and can be then used to initialize the encoder using
  * ::NvEncInitializeEncoder() API. The client can use this function only if it
  * wants to modify the NvEncodeAPI preset configuration, otherwise it can
- * directly use the preset guid.
+ * directly use the preset GUID.
  *
  * \param [in] encoder
  *   Pointer to the NvEncodeAPI interface.
@@ -2436,6 +2528,48 @@
  */
 NVENCSTATUS NVENCAPI NvEncGetEncodePresetConfig               (void* encoder, 
GUID encodeGUID, GUID  presetGUID, NV_ENC_PRESET_CONFIG* presetConfig);
 
+// NvEncGetEncodePresetConfigEx
+/**
+ * \brief Returns a preset config structure supported for given preset GUID.
+ *
+ * The function returns a preset config structure for a given preset GUID and 
tuning info.
+ * NvEncGetEncodePresetConfigEx() API is not applicable to H264 and HEVC 
meonly mode.
+ * Before using this function the client must enumerate the preset GUIDs 
available for
+ * a given codec. The preset config structure can be modified by the client 
depending
+ * upon its use case and can be then used to initialize the encoder using
+ * ::NvEncInitializeEncoder() API. The client can use this function only if it
+ * wants to modify the NvEncodeAPI preset configuration, otherwise it can
+ * directly use the preset GUID.
+ *
+ * \param [in] encoder
+ *   Pointer to the NvEncodeAPI interface.
+ * \param [in] encodeGUID
+ *   Encode GUID, corresponding to which the list of supported presets is to be
+ *   retrieved.
+ * \param [in] presetGUID
+ *   Preset GUID, corresponding to which the Encoding configurations is to be
+ *   retrieved.
+ * \param [in] tuningInfo
+ *   tuning info, corresponding to which the Encoding configurations is to be
+ *   retrieved.
+ * \param [out] presetConfig
+ *   The requested Preset Encoder Attribute set. Refer ::_NV_ENC_CONFIG for
+ *    more details.
+ *
+ * \return
+ * ::NV_ENC_SUCCESS \n
+ * ::NV_ENC_ERR_INVALID_PTR \n
+ * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
+ * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
+ * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
+ * ::NV_ENC_ERR_OUT_OF_MEMORY \n
+ * ::NV_ENC_ERR_INVALID_PARAM \n
+ * ::NV_ENC_ERR_INVALID_VERSION \n
+ * ::NV_ENC_ERR_GENERIC \n
+ *
+ */
+NVENCSTATUS NVENCAPI NvEncGetEncodePresetConfigEx               (void* 
encoder, GUID encodeGUID, GUID  presetGUID, NV_ENC_TUNING_INFO tuningInfo, 
NV_ENC_PRESET_CONFIG* presetConfig);
+
 // NvEncInitializeEncoder
 /**
  * \brief Initialize the encoder.
@@ -2447,15 +2581,15 @@
  * - NV_ENC_INITIALIZE_PARAMS::encodeWidth
  * - NV_ENC_INITIALIZE_PARAMS::encodeHeight
  *
- * The client can pass a preset guid directly to the NvEncodeAPI interface 
using
+ * The client can pass a preset GUID directly to the NvEncodeAPI interface 
using
  * NV_ENC_INITIALIZE_PARAMS::presetGUID field. If the client doesn't pass
  * NV_ENC_INITIALIZE_PARAMS::encodeConfig structure, the codec specific 
parameters
- * will be selected based on the preset guid. The preset guid must have been
+ * will be selected based on the preset GUID. The preset GUID must have been
  * validated by the client using ::NvEncGetEncodePresetGUIDs() API.
  * If the client passes a custom ::_NV_ENC_CONFIG structure through
  * NV_ENC_INITIALIZE_PARAMS::encodeConfig , it will override the codec 
specific parameters
- * based on the preset guid. It is recommended that even if the client passes 
a custom config,
- * it should also send a preset guid. In this case, the preset guid passed by 
the client
+ * based on the preset GUID. It is recommended that even if the client passes 
a custom config,
+ * it should also send a preset GUID. In this case, the preset GUID passed by 
the client
  * will not override any of the custom config parameters programmed by the 
client,
  * it is only used as a hint by the NvEncodeAPI interface to determine certain 
encoder parameters
  * which are not exposed to the client.
@@ -2471,9 +2605,9 @@
  * The client operating in asynchronous mode must allocate completion event 
object
  * for each output buffer and pass the completion event object in the
  * ::NvEncEncodePicture() API. The client can create another thread and wait on
- * the event object to be signalled by NvEncodeAPI interface on completion of 
the
+ * the event object to be signaled by NvEncodeAPI interface on completion of 
the
  * encoding process for the output frame. This should unblock the main thread 
from
- * submitting work to the encoder. When the event is signalled the client can 
call
+ * submitting work to the encoder. When the event is signaled the client can 
call
  * NvEncodeAPI interfaces to copy the bitstream data using 
::NvEncLockBitstream()
  * API. This is the preferred mode of operation.
  *
@@ -2628,7 +2762,7 @@
  * initialized using ::NvEncInitializeEncoder() API. The minimum number of 
output
  * buffers allocated by the client must be at least 4 more than the number of B
  * B frames being used for encoding. The client can only access the output
- * bitsteam data by locking the \p bitstreamBuffer using the 
::NvEncLockBitstream()
+ * bitstream data by locking the \p bitstreamBuffer using the 
::NvEncLockBitstream()
  * function.
  *
  * \param [in] encoder
@@ -2696,7 +2830,7 @@
  * - NV_ENC_PIC_PARAMS_H264::refPicFlag(H264 only)
  *
  *\par MVC Encoding:
- * For MVC encoding the client must call encode picture api for each view 
separately
+ * For MVC encoding the client must call encode picture API for each view 
separately
  * and must pass valid view id in NV_ENC_PIC_PARAMS_MVC::viewID field. 
Currently
  * NvEncodeAPI only support stereo MVC so client must send viewID as 0 for base
  * view and view ID as 1 for dependent view.
@@ -2714,6 +2848,10 @@
  * submitted for encoding. The NvEncodeAPI interface is responsible for any
  * re-ordering required for B frames and will always ensure that encoded 
bitstream
  * data is written in the same order in which output buffer is submitted.
+ * The NvEncodeAPI interface may return ::NV_ENC_ERR_NEED_MORE_INPUT error 
code for
+ * some ::NvEncEncodePicture() API calls but the client must not treat it as a 
fatal error.
+ * The NvEncodeAPI interface might not be able to submit an input picture 
buffer for encoding
+ * immediately due to re-ordering for B frames.
  *\code
   The below example shows how  asynchronous encoding in case of 1 B frames
   ------------------------------------------------------------------------
@@ -2743,14 +2881,21 @@
   (I3, O3, E3)    ---P3 Frame
 
   c) NvEncodeAPI interface will make a copy of the input buffers to its 
internal
-   buffersfor re-ordering. These copies are done as part of nvEncEncodePicture
+   buffers for re-ordering. These copies are done as part of nvEncEncodePicture
    function call from the client and NvEncodeAPI interface is responsible for
    synchronization of copy operation with the actual encoding operation.
    I1 --> NvI1
    I2 --> NvI2
    I3 --> NvI3
 
-  d) After returning from ::NvEncEncodePicture() call , the client must queue 
the output
+   d) The NvEncodeAPI encodes I1 as P frame and submits I1 to encoder HW and 
returns ::NV_ENC_SUCCESS.
+   The NvEncodeAPI tries to encode I2 as B frame and fails with 
::NV_ENC_ERR_NEED_MORE_INPUT error code.
+   The error is not fatal and it notifies client that I2 is not submitted to 
encoder immediately.
+   The NvEncodeAPI encodes I3 as P frame and submits I3 for encoding which 
will be used as  backward
+   reference frame for I2. The NvEncodeAPI then submits I2 for encoding and 
returns ::NV_ENC_SUCESS.
+   Both the submission are part of the same ::NvEncEncodePicture() function 
call.
+
+  e) After returning from ::NvEncEncodePicture() call , the client must queue 
the output
    bitstream  processing work to the secondary thread. The output bitstream 
processing
    for asynchronous mode consist of first waiting on completion event(E1, E2..)
    and then locking the output bitstream buffer(O1, O2..) for reading the 
encoded
@@ -2761,32 +2906,32 @@
    Note they are in the same order in which client calls 
::NvEncEncodePicture() API
    in \p step a).
 
-  e) NvEncodeAPI interface  will do the re-ordering such that Encoder HW will 
receive
+  f) NvEncodeAPI interface  will do the re-ordering such that Encoder HW will 
receive
   the following encode commands:
   (NvI1, O1, E1)   ---P1 Frame
   (NvI3, O2, E2)   ---P3 Frame
   (NvI2, O3, E3)   ---B2 frame
 
-  f) After the encoding operations are completed, the events will be signalled
+  g) After the encoding operations are completed, the events will be signaled
   by NvEncodeAPI interface in the following order :
-  (O1, E1) ---P1 Frame ,output bitstream copied to O1 and event E1 signalled.
-  (O2, E2) ---P3 Frame ,output bitstream copied to O2 and event E2 signalled.
-  (O3, E3) ---B2 Frame ,output bitstream copied to O3 and event E3 signalled.
+  (O1, E1) ---P1 Frame ,output bitstream copied to O1 and event E1 signaled.
+  (O2, E2) ---P3 Frame ,output bitstream copied to O2 and event E2 signaled.
+  (O3, E3) ---B2 Frame ,output bitstream copied to O3 and event E3 signaled.
 
-  g) The client must lock the bitstream data using ::NvEncLockBitstream() API 
in
+  h) The client must lock the bitstream data using ::NvEncLockBitstream() API 
in
    the order O1,O2,O3  to read the encoded data, after waiting for the events
-   to be signalled in the same order i.e E1, E2 and E3.The output processing is
+   to be signaled in the same order i.e E1, E2 and E3.The output processing is
    done in the secondary thread in the following order:
    Waits on E1, copies encoded bitstream from O1
    Waits on E2, copies encoded bitstream from O2
    Waits on E3, copies encoded bitstream from O3
 
-  -Note the client will receive the events signalling and output buffer in the
+  -Note the client will receive the events signaling and output buffer in the
    same order in which they have submitted for encoding.
   -Note the LockBitstream will have picture type field which will notify the
    output picture type to the clients.
   -Note the input, output buffer and the output completion event are free to be
-   reused once NvEncodeAPI interfaced has signalled the event and the client 
has
+   reused once NvEncodeAPI interfaced has signaled the event and the client has
    copied the data from the output buffer.
 
  * \endcode
@@ -3062,6 +3207,44 @@
  */
 NVENCSTATUS NVENCAPI NvEncGetSequenceParams                     (void* 
encoder, NV_ENC_SEQUENCE_PARAM_PAYLOAD* sequenceParamPayload);
 
+// NvEncGetSequenceParamEx
+/**
+ * \brief Get sequence and picture header.
+ *
+ * This function can be used to retrieve the sequence and picture header out 
of band, even when
+ * encoder has not been initialized using ::NvEncInitializeEncoder() function.
+ * The client must allocate the memory where the NvEncodeAPI interface can 
copy the bitstream
+ * header and pass the pointer to the memory in 
NV_ENC_SEQUENCE_PARAM_PAYLOAD::spsppsBuffer.
+ * The size of buffer is passed in the field  
NV_ENC_SEQUENCE_PARAM_PAYLOAD::inBufferSize.
+ * If encoder has not been initialized using ::NvEncInitializeEncoder() 
function, client must
+ * send NV_ENC_INITIALIZE_PARAMS as input. The NV_ENC_INITIALIZE_PARAMS passed 
must be same as the
+ * one which will be used for initializing encoder using 
::NvEncInitializeEncoder() function later.
+ * If encoder is already initialized using ::NvEncInitializeEncoder() 
function, the provided
+ * NV_ENC_INITIALIZE_PARAMS structure is ignored. The NvEncodeAPI interface 
will copy the bitstream
+ * header payload and returns the actual size of the bitstream header in the 
field
+ * NV_ENC_SEQUENCE_PARAM_PAYLOAD::outSPSPPSPayloadSize. The client must call  
::NvEncGetSequenceParamsEx()
+ * function from the same thread which is being used to call 
::NvEncEncodePicture() function.
+ *
+ * \param [in] encoder
+ *   Pointer to the NvEncodeAPI interface.
+ * \param [in] encInitParams
+ *   Pointer to the _NV_ENC_INITIALIZE_PARAMS structure.
+ * \param [in,out] sequenceParamPayload
+ *   Pointer to the ::_NV_ENC_SEQUENCE_PARAM_PAYLOAD structure.
+ *
+ * \return
+ * ::NV_ENC_SUCCESS \n
+ * ::NV_ENC_ERR_INVALID_PTR \n
+ * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n
+ * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n
+ * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n
+ * ::NV_ENC_ERR_OUT_OF_MEMORY \n
+ * ::NV_ENC_ERR_INVALID_VERSION \n
+ * ::NV_ENC_ERR_INVALID_PARAM \n
+ * ::NV_ENC_ERR_GENERIC \n
+ *
+ */
+NVENCSTATUS NVENCAPI NvEncGetSequenceParamEx                     (void* 
encoder, NV_ENC_INITIALIZE_PARAMS* encInitParams, 
NV_ENC_SEQUENCE_PARAM_PAYLOAD* sequenceParamPayload);
 
 // NvEncRegisterAsyncEvent
 /**
@@ -3072,7 +3255,7 @@
  * work in asynchronous mode. In this mode the client needs to send a 
completion
  * event with every output buffer. The NvEncodeAPI interface will signal the
  * completion of the encoding process using this event. Only after the event is
- * signalled the client can get the encoded data using ::NvEncLockBitstream() 
function.
+ * signaled the client can get the encoded data using ::NvEncLockBitstream() 
function.
  *
  * \param [in] encoder
  *   Pointer to the NvEncodeAPI interface.
@@ -3170,7 +3353,7 @@
  * UnMaps an input buffer which was previously mapped using 
::NvEncMapInputResource()
  * API. The mapping created using ::NvEncMapInputResource() should be 
invalidated
  * using this API before the external resource is destroyed by the client. The 
client
- * must unmap the buffer after ::NvEncLockBitstream() API returns 
succuessfully for encode
+ * must unmap the buffer after ::NvEncLockBitstream() API returns successfully 
for encode
  * work submitted using the mapped input buffer.
  *
  *
@@ -3361,7 +3544,7 @@
  * Change in GOP structure.
  * Change in sync-Async mode.
  * Change in MaxWidth & MaxHeight.
- * Change in PTDmode.
+ * Change in PTD mode.
  *
  * Resolution change is possible only if maxEncodeWidth & maxEncodeHeight of 
NV_ENC_INITIALIZE_PARAMS
  * is set while creating encoder session.
@@ -3493,7 +3676,7 @@
 NVENCSTATUS NVENCAPI NvEncodeAPIGetMaxSupportedVersion          (uint32_t* 
version);
 
 
-// NvEncodeAPIGetLastErrorString
+// NvEncGetLastErrorString
 /**
  * \brief Get the description of the last error reported by the API.
  *
@@ -3524,6 +3707,7 @@
 typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETCOUNT)      (void* 
encoder, GUID encodeGUID, uint32_t* encodePresetGUIDCount);
 typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETGUIDS)      (void* 
encoder, GUID encodeGUID, GUID* presetGUIDs, uint32_t guidArraySize, uint32_t* 
encodePresetGUIDCount);
 typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETCONFIG)     (void* 
encoder, GUID encodeGUID, GUID  presetGUID, NV_ENC_PRESET_CONFIG* presetConfig);
+typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETCONFIGEX)   (void* 
encoder, GUID encodeGUID, GUID  presetGUID, NV_ENC_TUNING_INFO tuningInfo, 
NV_ENC_PRESET_CONFIG* presetConfig);
 typedef NVENCSTATUS (NVENCAPI* PNVENCINITIALIZEENCODER)         (void* 
encoder, NV_ENC_INITIALIZE_PARAMS* createEncodeParams);
 typedef NVENCSTATUS (NVENCAPI* PNVENCCREATEINPUTBUFFER)         (void* 
encoder, NV_ENC_CREATE_INPUT_BUFFER* createInputBufferParams);
 typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYINPUTBUFFER)        (void* 
encoder, NV_ENC_INPUT_PTR inputBuffer);
@@ -3552,6 +3736,7 @@
 typedef NVENCSTATUS (NVENCAPI* PNVENCRUNMOTIONESTIMATIONONLY)   (void* 
encoder, NV_ENC_MEONLY_PARAMS* meOnlyParams);
 typedef const char * (NVENCAPI* PNVENCGETLASTERROR)             (void* 
encoder);
 typedef NVENCSTATUS (NVENCAPI* PNVENCSETIOCUDASTREAMS)          (void* 
encoder, NV_ENC_CUSTREAM_PTR inputStream, NV_ENC_CUSTREAM_PTR outputStream);
+typedef NVENCSTATUS (NVENCAPI* PNVENCGETSEQUENCEPARAMEX)        (void* 
encoder, NV_ENC_INITIALIZE_PARAMS* encInitParams, 
NV_ENC_SEQUENCE_PARAM_PAYLOAD* sequenceParamPayload);
 
 
 /// \endcond
@@ -3606,7 +3791,9 @@
     PNVENCRUNMOTIONESTIMATIONONLY   nvEncRunMotionEstimationOnly;      /**< 
[out]: Client should access ::NvEncRunMotionEstimationOnly API through this 
pointer.    */
     PNVENCGETLASTERROR              nvEncGetLastErrorString;           /**< 
[out]: Client should access ::nvEncGetLastErrorString API through this pointer. 
        */
     PNVENCSETIOCUDASTREAMS          nvEncSetIOCudaStreams;             /**< 
[out]: Client should access ::nvEncSetIOCudaStreams API through this pointer.   
        */
-    void*                           reserved2[279];                    /**< 
[in]:  Reserved and must be set to NULL                                         
        */
+    PNVENCGETENCODEPRESETCONFIGEX   nvEncGetEncodePresetConfigEx;      /**< 
[out]: Client should access ::NvEncGetEncodePresetConfigEx() API through this 
pointer.  */
+    PNVENCGETSEQUENCEPARAMEX        nvEncGetSequenceParamEx;           /**< 
[out]: Client should access ::NvEncGetSequenceParamEx() API through this 
pointer.       */
+    void*                           reserved2[277];                    /**< 
[in]:  Reserved and must be set to NULL                                         
        */
 } NV_ENCODE_API_FUNCTION_LIST;
 
 /** Macro for constructing the version field of ::_NV_ENCODEAPI_FUNCTION_LIST. 
*/


Reply via email to