nvcodec: Update SDK header to 12.0.16

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/6754>
This commit is contained in:
Seungha Yang 2024-04-24 01:47:51 +09:00 committed by GStreamer Marge Bot
parent ff6d6e1b3c
commit 60637b96c8
6 changed files with 943 additions and 412 deletions

View file

@ -1,7 +1,7 @@
/*
* This copyright notice applies to this header file only:
*
* Copyright (c) 2010-2021 NVIDIA Corporation
* Copyright (c) 2010-2022 NVIDIA Corporation
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@ -1106,7 +1106,6 @@ extern CUresult CUDAAPI cuvidMapVideoFrame(CUvideodecoder hDecoder, int nPicIdx,
extern CUresult CUDAAPI cuvidUnmapVideoFrame(CUvideodecoder hDecoder, unsigned int DevPtr);
#endif
#if defined(_WIN64) || defined(__LP64__) || defined(__x86_64) || defined(AMD64) || defined(_M_AMD64)
/****************************************************************************************************************************/
//! \fn CUresult CUDAAPI cuvidMapVideoFrame64(CUvideodecoder hDecoder, int nPicIdx, unsigned long long *pDevPtr,
//! unsigned int * pPitch, CUVIDPROCPARAMS *pVPP);
@ -1126,7 +1125,6 @@ extern CUresult CUDAAPI cuvidUnmapVideoFrame64(CUvideodecoder hDecoder, unsigned
#define cuvidMapVideoFrame cuvidMapVideoFrame64
#define cuvidUnmapVideoFrame cuvidUnmapVideoFrame64
#endif
#endif

View file

@ -1036,156 +1036,247 @@ gst_nvenc_plugin_init (GstPlugin * plugin, guint device_index,
"h265", GST_RANK_PRIMARY * 2, device_index, cuda_ctx);
}
/* To verify things when updating SDK */
#define USE_STATIC_SDK_VER 0
guint32
gst_nvenc_get_api_version (void)
{
#if USE_STATIC_SDK_VER
return NVENCAPI_VERSION;
#else
/* NVENCAPI_VERSION == (NVENCAPI_MAJOR_VERSION | (NVENCAPI_MINOR_VERSION << 24)) */
return gst_nvenc_api_version;
#endif
}
guint32
gst_nvenc_get_caps_param_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_CAPS_PARAM_VER;
#else
/* NV_ENC_CAPS_PARAM_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_encode_out_params_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_ENCODE_OUT_PARAMS_VER;
#else
/* NV_ENC_ENCODE_OUT_PARAMS_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_create_input_buffer_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_CREATE_INPUT_BUFFER_VER;
#else
/* NV_ENC_CREATE_INPUT_BUFFER_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_create_bitstream_buffer_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_CREATE_BITSTREAM_BUFFER_VER;
#else
/* NV_ENC_CREATE_BITSTREAM_BUFFER_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_create_mv_buffer_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_CREATE_MV_BUFFER_VER;
#else
/* NV_ENC_CREATE_MV_BUFFER_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_rc_params_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_RC_PARAMS_VER;
#else
/* NV_ENC_RC_PARAMS_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_config_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_CONFIG_VER;
#else
/* Version updated since SDK 12.0 */
if ((gst_nvenc_api_version & 12) == 12)
return GST_NVENCAPI_STRUCT_VERSION (8, gst_nvenc_api_version) | (1 << 31);
/* NV_ENC_CONFIG_VER ==
* (NVENCAPI_STRUCT_VERSION(7) | ( 1<<31 )) */
return GST_NVENCAPI_STRUCT_VERSION (7, gst_nvenc_api_version) | (1 << 31);
#endif
}
guint32
gst_nvenc_get_initialize_params_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_INITIALIZE_PARAMS_VER;
#else
/* NV_ENC_INITIALIZE_PARAMS_VER ==
* (NVENCAPI_STRUCT_VERSION(5) | ( 1<<31 )) */
return GST_NVENCAPI_STRUCT_VERSION (5, gst_nvenc_api_version) | (1 << 31);
#endif
}
guint32
gst_nvenc_get_reconfigure_params_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_RECONFIGURE_PARAMS_VER;
#else
/* NV_ENC_RECONFIGURE_PARAMS_VER ==
* (NVENCAPI_STRUCT_VERSION(1) | ( 1<<31 )) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version) | (1 << 31);
#endif
}
guint32
gst_nvenc_get_preset_config_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_PRESET_CONFIG_VER;
#else
/* NV_ENC_PRESET_CONFIG_VER ==
* (NVENCAPI_STRUCT_VERSION(4) | ( 1<<31 )) */
return GST_NVENCAPI_STRUCT_VERSION (4, gst_nvenc_api_version) | (1 << 31);
#endif
}
guint32
gst_nvenc_get_pic_params_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_PIC_PARAMS_VER;
#else
/* NV_ENC_PIC_PARAMS_VER ==
* (NVENCAPI_STRUCT_VERSION(4) | ( 1<<31 )) */
return GST_NVENCAPI_STRUCT_VERSION (4, gst_nvenc_api_version) | (1 << 31);
#endif
}
guint32
gst_nvenc_get_meonly_params_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_MEONLY_PARAMS_VER;
#else
/* NV_ENC_MEONLY_PARAMS_VER == NVENCAPI_STRUCT_VERSION(3) */
return GST_NVENCAPI_STRUCT_VERSION (3, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_lock_bitstream_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_LOCK_BITSTREAM_VER;
#else
/* NV_ENC_LOCK_BITSTREAM_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_lock_input_buffer_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_LOCK_INPUT_BUFFER_VER;
#else
/* NV_ENC_LOCK_INPUT_BUFFER_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_map_input_resource_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_MAP_INPUT_RESOURCE_VER;
#else
/* NV_ENC_MAP_INPUT_RESOURCE_VER == NVENCAPI_STRUCT_VERSION(4) */
return GST_NVENCAPI_STRUCT_VERSION (4, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_register_resource_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_REGISTER_RESOURCE_VER;
#else
/* NV_ENC_REGISTER_RESOURCE_VER == NVENCAPI_STRUCT_VERSION(3) */
return GST_NVENCAPI_STRUCT_VERSION (3, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_stat_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_STAT_VER;
#else
/* NV_ENC_STAT_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_sequence_param_payload_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER;
#else
/* NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_event_params_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_EVENT_PARAMS_VER;
#else
/* NV_ENC_EVENT_PARAMS_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
guint32
gst_nvenc_get_open_encode_session_ex_params_version (void)
{
#if USE_STATIC_SDK_VER
return NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER;
#else
/* NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER == NVENCAPI_STRUCT_VERSION(1) */
return GST_NVENCAPI_STRUCT_VERSION (1, gst_nvenc_api_version);
#endif
}
gboolean

View file

@ -1553,7 +1553,7 @@ gst_nv_h264_encoder_set_format (GstNvEncoder * encoder,
vui->videoSignalTypePresentFlag = 1;
/* Unspecified */
vui->videoFormat = 5;
vui->videoFormat = NV_ENC_VUI_VIDEO_FORMAT_UNSPECIFIED;
if (cinfo.range == GST_VIDEO_COLOR_RANGE_0_255) {
vui->videoFullRangeFlag = 1;
} else {
@ -1561,9 +1561,11 @@ gst_nv_h264_encoder_set_format (GstNvEncoder * encoder,
}
vui->colourDescriptionPresentFlag = 1;
vui->colourMatrix = gst_video_color_matrix_to_iso (cinfo.matrix);
vui->colourPrimaries = gst_video_color_primaries_to_iso (cinfo.primaries);
vui->transferCharacteristics =
vui->colourMatrix = (NV_ENC_VUI_MATRIX_COEFFS)
gst_video_color_matrix_to_iso (cinfo.matrix);
vui->colourPrimaries = (NV_ENC_VUI_COLOR_PRIMARIES)
gst_video_color_primaries_to_iso (cinfo.primaries);
vui->transferCharacteristics = (NV_ENC_VUI_TRANSFER_CHARACTERISTIC)
gst_video_transfer_function_to_iso (cinfo.transfer);
g_mutex_unlock (&self->prop_lock);

View file

@ -1509,7 +1509,7 @@ gst_nv_h265_encoder_set_format (GstNvEncoder * encoder,
vui->videoSignalTypePresentFlag = 1;
/* Unspecified */
vui->videoFormat = 5;
vui->videoFormat = NV_ENC_VUI_VIDEO_FORMAT_UNSPECIFIED;
if (cinfo.range == GST_VIDEO_COLOR_RANGE_0_255) {
vui->videoFullRangeFlag = 1;
} else {
@ -1521,16 +1521,18 @@ gst_nv_h265_encoder_set_format (GstNvEncoder * encoder,
case GST_VIDEO_FORMAT_GBR:
case GST_VIDEO_FORMAT_GBR_16LE:
/* color matrix must be "Identity" */
vui->colourMatrix =
vui->colourMatrix = (NV_ENC_VUI_MATRIX_COEFFS)
gst_video_color_matrix_to_iso (GST_VIDEO_COLOR_MATRIX_RGB);
break;
default:
vui->colourMatrix = gst_video_color_matrix_to_iso (cinfo.matrix);
vui->colourMatrix = (NV_ENC_VUI_MATRIX_COEFFS)
gst_video_color_matrix_to_iso (cinfo.matrix);
break;
}
vui->colourPrimaries = gst_video_color_primaries_to_iso (cinfo.primaries);
vui->transferCharacteristics =
vui->colourPrimaries = (NV_ENC_VUI_COLOR_PRIMARIES)
gst_video_color_primaries_to_iso (cinfo.primaries);
vui->transferCharacteristics = (NV_ENC_VUI_TRANSFER_CHARACTERISTIC)
gst_video_transfer_function_to_iso (cinfo.transfer);
g_mutex_unlock (&self->prop_lock);

File diff suppressed because it is too large Load diff

View file

@ -1,7 +1,7 @@
/*
* This copyright notice applies to this header file only:
*
* Copyright (c) 2010-2021 NVIDIA Corporation
* Copyright (c) 2010-2022 NVIDIA Corporation
*
* Permission is hereby granted, free of charge, to any person
* obtaining a copy of this software and associated documentation
@ -28,7 +28,7 @@
/********************************************************************************************************************/
//! \file nvcuvid.h
//! NVDECODE API provides video decoding interface to NVIDIA GPU devices.
//! \date 2015-2020
//! \date 2015-2022
//! This file contains the interface constants, structure definitions and function prototypes.
/********************************************************************************************************************/
@ -41,6 +41,7 @@
extern "C" {
#endif /* __cplusplus */
#define MAX_CLOCK_TS 3
/***********************************************/
//!
@ -78,6 +79,54 @@ typedef enum {
cudaAudioCodec_AAC, /**< AAC Audio */
} cudaAudioCodec;
/************************************************************************/
//! \ingroup STRUCTS
//! \struct HEVCTIMECODESET
//! Used to store Time code extracted from Time code SEI in HEVC codec
/************************************************************************/
typedef struct _HEVCTIMECODESET
{
unsigned int time_offset_value;
unsigned short n_frames;
unsigned char clock_timestamp_flag;
unsigned char units_field_based_flag;
unsigned char counting_type;
unsigned char full_timestamp_flag;
unsigned char discontinuity_flag;
unsigned char cnt_dropped_flag;
unsigned char seconds_value;
unsigned char minutes_value;
unsigned char hours_value;
unsigned char seconds_flag;
unsigned char minutes_flag;
unsigned char hours_flag;
unsigned char time_offset_length;
unsigned char reserved;
} HEVCTIMECODESET;
/************************************************************************/
//! \ingroup STRUCTS
//! \struct HEVCSEITIMECODE
//! Used to extract Time code SEI in HEVC codec
/************************************************************************/
typedef struct _HEVCSEITIMECODE
{
HEVCTIMECODESET time_code_set[MAX_CLOCK_TS];
unsigned char num_clock_ts;
} HEVCSEITIMECODE;
/**********************************************************************************/
//! \ingroup STRUCTS
//! \struct CUSEIMESSAGE;
//! Used in CUVIDSEIMESSAGEINFO structure
/**********************************************************************************/
typedef struct _CUSEIMESSAGE
{
unsigned char sei_message_type; /**< OUT: SEI Message Type */
unsigned char reserved[3];
unsigned int sei_message_size; /**< OUT: SEI Message Size */
} CUSEIMESSAGE;
/************************************************************************************************/
//! \ingroup STRUCTS
//! \struct CUVIDEOFORMAT
@ -168,6 +217,19 @@ typedef struct
};
} CUVIDOPERATINGPOINTINFO;
/**********************************************************************************/
//! \ingroup STRUCTS
//! \struct CUVIDSEIMESSAGEINFO
//! Used in cuvidParseVideoData API with PFNVIDSEIMSGCALLBACK pfnGetSEIMsg
/**********************************************************************************/
typedef struct _CUVIDSEIMESSAGEINFO
{
void *pSEIData; /**< OUT: SEI Message Data */
CUSEIMESSAGE *pSEIMessage; /**< OUT: SEI Message Info */
unsigned int sei_message_count; /**< OUT: SEI Message Count */
unsigned int picIdx; /**< OUT: SEI Message Pic Index */
} CUVIDSEIMESSAGEINFO;
/****************************************************************/
//! \ingroup STRUCTS
//! \struct CUVIDAV1SEQHDR
@ -366,11 +428,13 @@ typedef struct _CUVIDPARSERDISPINFO
//! PFNVIDDECODECALLBACK : 0: fail, >=1: succeeded
//! PFNVIDDISPLAYCALLBACK : 0: fail, >=1: succeeded
//! PFNVIDOPPOINTCALLBACK : <0: fail, >=0: succeeded (bit 0-9: OperatingPoint, bit 10-10: outputAllLayers, bit 11-30: reserved)
//! PFNVIDSEIMSGCALLBACK : 0: fail, >=1: succeeded
/***********************************************************************************************************************/
typedef int (CUDAAPI *PFNVIDSEQUENCECALLBACK)(void *, CUVIDEOFORMAT *);
typedef int (CUDAAPI *PFNVIDDECODECALLBACK)(void *, CUVIDPICPARAMS *);
typedef int (CUDAAPI *PFNVIDDISPLAYCALLBACK)(void *, CUVIDPARSERDISPINFO *);
typedef int (CUDAAPI *PFNVIDOPPOINTCALLBACK)(void *, CUVIDOPERATINGPOINTINFO*);
typedef int (CUDAAPI *PFNVIDSEIMSGCALLBACK) (void *, CUVIDSEIMESSAGEINFO *);
/**************************************/
//! \ingroup STRUCTS
@ -395,7 +459,8 @@ typedef struct _CUVIDPARSERPARAMS
PFNVIDDISPLAYCALLBACK pfnDisplayPicture; /**< IN: Called whenever a picture is ready to be displayed (display order) */
PFNVIDOPPOINTCALLBACK pfnGetOperatingPoint; /**< IN: Called from AV1 sequence header to get operating point of a AV1
scalable bitstream */
void *pvReserved2[6]; /**< Reserved for future use - set to NULL */
PFNVIDSEIMSGCALLBACK pfnGetSEIMsg; /**< IN: Called when all SEI messages are parsed for particular frame */
void *pvReserved2[5]; /**< Reserved for future use - set to NULL */
CUVIDEOFORMATEX *pExtVideoInfo; /**< IN: [Optional] sequence header data from system layer */
} CUVIDPARSERPARAMS;