 |
libxcoder
5.3.1
|
Go to the documentation of this file.
34 #elif __linux__ || __APPLE__
36 #include <linux/types.h>
38 #include <sys/syscall.h>
39 #include <linux/aio_abi.h>
44 #include <semaphore.h>
64 #if defined(__GNUC__) || defined(__clang__)
65 # define NI_UNUSED __attribute__((unused))
70 #if !defined(NI_WARN_AS_ERROR) && !defined(__clang__) && defined(__GNUC__)
71 #define NI_DEPRECATED __attribute__((deprecated))
72 #define NI_DEPRECATED_MACRO \
73 _Pragma("GCC warning \"A Netint macro on this line is deprecated\"")
74 #define NI_DEPRECATE_MACRO(X)
75 #elif !defined(NI_WARN_AS_ERROR) && !defined(__clang__) && defined(_MSC_VER)
76 #define NI_DEPRECATED __declspec(deprecated)
77 #define NI_DEPRECATED_MACRO
78 #define NI_DEPRECATE_MACRO(X) __pragma(deprecated(X))
81 #define NI_DEPRECATED_MACRO
82 #define NI_DEPRECATE_MACRO(X)
98 #define NI_XCODER_REVISION "5316sEr3" // saranya.sivasankaran
99 #define NI_XCODER_REVISION_API_MAJOR_VER_IDX 3
100 #define NI_XCODER_REVISION_API_MINOR_VER_IDX 4
111 #define MACRO_TO_STR(s) #s
112 #define MACROS_TO_VER_STR(a, b) MACRO_TO_STR(a.b)
113 #define LIBXCODER_API_VERSION_MAJOR 2 // steven.zhou
114 #define LIBXCODER_API_VERSION_MINOR 77 // saranya.sivasankaran
115 #define LIBXCODER_API_VERSION MACROS_TO_VER_STR(LIBXCODER_API_VERSION_MAJOR, \
116 LIBXCODER_API_VERSION_MINOR)
118 #define NI_LITTLE_ENDIAN_PLATFORM 0
119 #define NI_BIG_ENDIAN_PLATFORM 1
121 #define NI_MAX_P2P_SGL_ENTRY 128
125 #ifndef PLATFORM_ENDIANESS
126 #define PLATFORM_ENDIANESS NI_LITTLE_ENDIAN_PLATFORM
129 #define NETINT_PCI_VENDOR_ID 0x1D82
136 typedef struct _ni_pthread_t
139 void *(*start_routine)(
void *arg);
143 typedef CRITICAL_SECTION ni_pthread_mutex_t;
144 typedef CONDITION_VARIABLE ni_pthread_cond_t;
145 typedef void ni_pthread_attr_t;
146 typedef void ni_pthread_condattr_t;
147 typedef void ni_pthread_mutexattr_t;
148 typedef void ni_sigset_t;
149 typedef HANDLE ni_device_handle_t;
150 typedef HANDLE ni_event_handle_t;
151 typedef HANDLE ni_lock_handle_t;
152 typedef unsigned ni_aio_context_t;
153 typedef unsigned ni_iocb_t;
154 typedef unsigned ni_io_event_t;
155 #define NI_INVALID_DEVICE_HANDLE (INVALID_HANDLE_VALUE)
156 #define NI_INVALID_EVENT_HANDLE (NULL)
157 #define NI_INVALID_LOCK_HANDLE (NULL)
160 #define LIB_API __declspec(dllexport)
162 #define LIB_API __declspec(dllimport)
168 #define NI_MAX_FRAME_CHUNK_SZ 0x80000 //0x10000
169 #define NI_MAX_PACKET_SZ 0x20000 //0x10000
170 #define NI_MAX_ENC_PACKET_SZ 3133440
173 typedef pthread_t ni_pthread_t;
174 typedef pthread_mutex_t ni_pthread_mutex_t;
175 typedef pthread_cond_t ni_pthread_cond_t;
176 typedef pthread_attr_t ni_pthread_attr_t;
177 typedef pthread_condattr_t ni_pthread_condattr_t;
178 typedef pthread_mutexattr_t ni_pthread_mutexattr_t;
179 typedef sigset_t ni_sigset_t;
180 typedef int32_t ni_device_handle_t;
181 typedef int32_t ni_event_handle_t;
182 typedef int32_t ni_lock_handle_t;
183 typedef unsigned long ni_aio_context_t;
184 typedef struct iocb ni_iocb_t;
185 typedef struct io_event ni_io_event_t;
186 #define NI_INVALID_DEVICE_HANDLE (-1)
187 #define NI_INVALID_EVENT_HANDLE (-1)
188 #define NI_INVALID_LOCK_HANDLE (-1)
191 #define SYS_PARAMS_PREFIX_PATH "/sys/block/"
192 #define SYS_PREFIX_SZ strlen(SYS_PARAMS_PREFIX_PATH)
193 #define KERNEL_NVME_MAX_SEG_PATH "/queue/max_segments"
194 #define KERNEL_NVME_MAX_SEG_SZ_PATH "/queue/max_segment_size"
195 #define KERNEL_NVME_MIN_IO_SZ_PATH "/queue/minimum_io_size"
196 #define KERNEL_NVME_MAX_HW_SEC_KB_PATH "/queue/max_hw_sectors_kb"
197 #define MIN_NVME_DEV_NAME_LEN 7 //has to be at least nvmeXnY
198 #define KERNEL_NVME_FILE_NAME_MAX_SZ \
199 (SYS_PREFIX_SZ + strlen(KERNEL_NVME_MAX_SEG_SZ_PATH) + \
200 MIN_NVME_DEV_NAME_LEN + 10)
201 #define DEFAULT_IO_TRANSFER_SIZE 520192
202 #define MAX_IO_TRANSFER_SIZE 3133440
205 typedef pthread_t ni_pthread_t;
206 typedef pthread_mutex_t ni_pthread_mutex_t;
207 typedef pthread_cond_t ni_pthread_cond_t;
208 typedef pthread_attr_t ni_pthread_attr_t;
209 typedef pthread_condattr_t ni_pthread_condattr_t;
210 typedef pthread_mutexattr_t ni_pthread_mutexattr_t;
211 typedef sigset_t ni_sigset_t;
212 typedef int32_t ni_device_handle_t;
213 typedef int32_t ni_event_handle_t;
214 typedef int32_t ni_lock_handle_t;
215 typedef unsigned ni_aio_context_t;
216 typedef unsigned ni_iocb_t;
217 typedef unsigned ni_io_event_t;
218 #define NI_INVALID_DEVICE_HANDLE (-1)
219 #define NI_INVALID_EVENT_HANDLE (-1)
220 #define NI_INVALID_LOCK_HANDLE (-1)
222 #define MAX_IO_TRANSFER_SIZE 3133440
227 #define NI_ERRNO (GetLastError())
229 #define NI_ERRNO (errno)
232 #define NI_INVALID_HWID (-1)
233 #define NI_INVALID_IO_SIZE (0)
235 #define NI_MAX_DEVICE_CNT 128
236 #define NI_MAX_DEVICE_NAME_LEN 32
238 #define NI_NVME_PREFIX "nvme"
239 #define NI_MAX_PACKET_SZ 0x20000
240 #define NI_POLL_INTERVAL (2 * 1000)
244 #define NI_MAX_NUM_DATA_POINTERS 4
246 #define NI_MAX_NUM_SW_FRAME_DATA_POINTERS 3
248 #define NI_MAX_CONTEXTS_PER_HW_INSTANCE 128
249 #define NI_MAX_4K_FPS_QUADRA 240
251 #define NI_MAX_DEVICES_PER_HW_INSTANCE 4
255 #define NI_MAX_NUM_OF_DECODER_OUTPUTS 3
259 #define NI_MAX_PPU_PARAM_EXPR_CHAR 20
261 #define NI_MAX_TX_SZ 0xA00000
263 #define NI_MEM_PAGE_ALIGNMENT 0x1000
265 #define NI_MAX_DR_HWDESC_FRAME_INDEX 5363
266 #define NI_MAX_DR_HWDESC_FRAME_INDEX_2 4993
268 #define NI_MIN_HWDESC_P2P_BUF_ID 5364
269 #define NI_MAX_HWDESC_P2P_BUF_ID 5525
271 #define NI_MAX_SR_HWDESC_FRAME_INDEX 2457
272 #define NI_MAX_SR_HWDESC_FRAME_INDEX_2 2287
273 #define NI_MAX_SR_HWDESC_FRAME_INDEX_3_REMOVE_P2P 2439
274 #define NI_MAX_SR_HWDESC_FRAME_INDEX_4_4G 1248
277 #define NI_MIN_SR_HWDESC_P2P_BUF_ID 2458
278 #define NI_MAX_SR_HWDESC_P2P_BUF_ID 2619
279 #define NI_MAX_SR_HWDESC_P2P_BUF_ID_4G 2458
282 #define NI_GET_MIN_HWDESC_P2P_BUF_ID(x) ((x==1 || x==3 || x==6)?NI_MIN_SR_HWDESC_P2P_BUF_ID:NI_MIN_HWDESC_P2P_BUF_ID)
283 #define NI_GET_MAX_HWDESC_P2P_BUF_ID(x) ((x==1 || x==3 || x==6)?((x==6)?NI_MAX_SR_HWDESC_P2P_BUF_ID_4G:NI_MAX_SR_HWDESC_P2P_BUF_ID):NI_MAX_HWDESC_P2P_BUF_ID)
287 #define NI_MAX_HWDESC_FRAME_INDEX NI_DEPRECATED_MACRO NI_MAX_DR_HWDESC_FRAME_INDEX
290 #define NI_GET_MAX_HWDESC_FRAME_INDEX(x) \
291 (x == 1 ? NI_MAX_SR_HWDESC_FRAME_INDEX: \
292 (x == 2 ? NI_MAX_DR_HWDESC_FRAME_INDEX: \
293 (x == 3 ? NI_MAX_SR_HWDESC_FRAME_INDEX_2: \
294 (x == 4 ? NI_MAX_DR_HWDESC_FRAME_INDEX_2: \
295 (x == 5 ? NI_MAX_SR_HWDESC_FRAME_INDEX_3_REMOVE_P2P: \
296 NI_MAX_SR_HWDESC_FRAME_INDEX_4_4G)))))
298 #define NI_MAX_UPLOAD_INSTANCE_FRAMEPOOL 100
301 #define NI_MAX_DEC_REJECT 1024
303 #define NI_FIFO_SZ 1024
306 #define NI_MAX_PTS_GAP 32
309 #define NI_MAX_I_P_DIST 8
312 #define NI_INVALID_SEI_TYPE (-1)
315 #define NI_MAX_CUSTOM_SEI_CNT 20
318 #define NI_FW_META_DATA_SZ 104 //metadataDecFrame on dec FW (including hwdesc x3)
320 #define NI_APP_ENC_FRAME_META_DATA_SIZE 72
322 #define NI_APP_ENC_FRAME_META_DATA_SIZE_UNDER_MAJOR_6_MINOR_Q 56
323 #define NI_APP_ENC_FRAME_META_DATA_SIZE_UNDER_MAJOR_6_MINOR_rc 64
325 #define MAX_AV1_ENCODER_GOP_NUM 8
327 #define NI_MAX_FILTER_POOL_SIZE 4
331 #define LRETURN goto end
335 #define LRETURN goto end
339 #define ni_assert(expression) assert(expression)
348 static inline int is_supported_xcoder(
int x)
371 #define CPU_LOG_BUFFER_SIZE (1 * 1024 * 1024)
372 #define TOTAL_CPU_LOG_BUFFER_SIZE \
373 (CPU_LOG_BUFFER_SIZE * 5) // g_np/tp/fp/ep/dp_cpu_log_buffer
374 #define CPU_LOG_CYCLES_PER_CHECK (10000)
422 #define IS_XCODER_DEVICE_TYPE(t) \
423 ((ni_device_type_t)t > NI_DEVICE_TYPE_MIN && \
424 (ni_device_type_t)t < NI_DEVICE_TYPE_XCODER_MAX)
425 #define GET_XCODER_DEVICE_TYPE(t) \
426 ((ni_device_type_t)t == NI_DEVICE_TYPE_UPLOAD ? \
427 NI_DEVICE_TYPE_ENCODER : \
429 #define GET_XCODER_DEVICE_TYPE_STR(t) \
430 (IS_XCODER_DEVICE_TYPE(GET_XCODER_DEVICE_TYPE(t)) ? \
431 g_device_type_str[GET_XCODER_DEVICE_TYPE(t)] : \
432 "Invalid device type")
434 NI_UNUSED static const char *g_device_type_str[] = {
"decoder",
"encoder",
"scaler",
"AI",
"uploader"};
435 NI_UNUSED static const char g_device_type_chr[] = {
'd',
'e',
's',
'a'};
@ NI_RETCODE_PARAM_ERROR_CONF_WIN_BOT
@ NI_RETCODE_ERROR_VPU_RECOVERY
@ NI_AI_STATUS_MODEL_NOT_FOUND
Release identification data generated at release time.
@ NI_AI_STATUS_ALREADY_INITIALIZED
uint32_t ui32FramesErrorRatio
@ NI_RETCODE_NVME_SC_VPU_GENERAL_ERROR
@ NI_AI_STATUS_OUTPUT_BUFFER_EMPTY
enum _ni_nvme_opcode ni_nvme_opcode_t
@ NI_RETCODE_NVME_SC_RESOURCE_IS_EMPTY
@ NI_RETCODE_PARAM_ERROR_RCENABLE
@ NI_RETCODE_NVME_SC_RESOURCE_UNAVAILABLE
@ NI_AI_STATUS_NOT_INITIALIZED
@ NI_RETCODE_ERROR_GET_DEVICE_POOL
@ NI_SCALER_OPCODE_WATERMARK
@ NI_AI_STATUS_INPUT_BUFFER_FULL
struct _ni_p2p_sgl_t ni_p2p_sgl_t
@ NI_RETCODE_PARAM_ERROR_PIC_WIDTH
@ NI_RETCODE_PARAM_ERROR_AREA_TOO_BIG
@ NI_RETCODE_PARAM_ERROR_CUSIZE_MODE_32X32_EN
@ NI_RETCODE_PARAM_ERROR_DY_MERGE_8X8_EN
@ NI_RETCODE_ERROR_STREAM_ERROR
uint32_t ui32FramesCorrupted
@ NI_SCALER_OPCODE_IPOVLY
uint32_t ui32WrBufAvailSize
@ NI_RETCODE_PARAM_ERROR_CONF_WIN_TOP
@ NI_AI_STATUS_INVALID_INSTANCE
@ NI_SCALER_OPCODE_DELOGO
uint32_t ui32FramesCompleted
@ NI_RETCODE_PARAM_ERROR_CONF_WIN_L
@ NI_RETCODE_INVALID_PARAM
uint32_t ui32FramesBuffered
@ NI_RETCODE_PARAM_ERROR_MX_NUM_MERGE
@ NI_RETCODE_PARAM_ERROR_CU_LVL_RC_EN
uint64_t ui64DMAAddr[NI_MAX_P2P_SGL_ENTRY]
@ NI_RETCODE_PARAM_ERROR_HEIGHT_TOO_BIG
@ NI_RETCODE_PARAM_ERROR_MX_QP
@ NI_RETCODE_ERROR_MEM_ALOC
@ NI_RETCODE_PARAM_ERROR_DY_MERGE_32X32_EN
@ NI_RETCODE_PARAM_INVALID_VALUE
@ NI_RETCODE_PARAM_ERROR_VBV_BUFFER_SIZE
uint32_t ui32LastTransactionCompletionStatus
uint32_t ui32LastErrorStatus
enum _ni_xcoder_prod_line ni_xcoder_prod_line_t
@ NI_SCALER_OPCODE_OVERLAY
@ NI_RETCODE_ERROR_UNSUPPORTED_FW_VERSION
@ NI_RETCODE_ERROR_UNLOCK_DEVICE
@ NI_RETCODE_PARAM_ERROR_DECODING_REFRESH_TYPE
@ NI_AI_STATUS_RESOURCE_NOT_AVAILABLE
@ NI_RETCODE_PARAM_ERROR_CUSIZE_MODE_16X16_EN
@ NI_RETCODE_ERROR_NVME_CMD_FAILED
@ NI_RETCODE_PARAM_ERROR_FILLER
@ NI_RETCODE_ERROR_INVALID_ALLOCATION_METHOD
@ NI_AI_STATUS_CREATE_NETWORK_FAILED
@ NI_RETCODE_NVME_SC_VPU_RECOVERY
uint32_t ui32FramesOutput
@ NI_AI_STATUS_INVALID_ADDRESS
uint8_t ui8AdditionalFramesDelay
@ NI_RETCODE_PARAM_ERROR_CUSIZE_MODE_8X8_EN
@ NI_RETCODE_PARAM_ERROR_BRATE_LT_TRATE
@ NI_RETCODE_ERROR_PERMISSION_DENIED
@ NI_RETCODE_PARAM_ERROR_MX_DELTA_QP
@ NI_RETCODE_PARAM_WARNING_DEPRECATED
@ NI_RETCODE_PARAM_ERROR_HVS_QP_EN
@ NI_SCALER_OPCODE_DRAWBOX
uint32_t ui32RdBufAvailSize
@ NI_AI_STATUS_IO_NOT_ALLOWED
@ NI_RETCODE_NVME_SC_INTERLACED_NOT_SUPPORTED
@ NI_RETCODE_PARAM_ERROR_TOO_BIG
@ NI_RETCODE_PARAM_ERROR_MAXNUMMERGE
uint32_t ui32LastErrorTransactionId
@ NI_RETCODE_PARAM_ERROR_CONF_WIN_R
@ NI_RETCODE_PARAM_ERROR_WIDTH_TOO_BIG
@ NI_RETCODE_PARAM_ERROR_HVS_QP_SCL
@ NI_RETCODE_PARAM_ERROR_LOOK_AHEAD_DEPTH
@ NI_RETCODE_NVME_SC_STREAM_ERROR
@ NI_AI_STATUS_ERROR_START_NETWORK
@ NI_RETCODE_PARAM_ERROR_USR_RMD_ENC_PARAM
@ NI_RETCODE_NVME_SC_INVALID_PARAMETER
@ NI_RETCODE_ERROR_INVALID_SESSION
struct _ni_session_statistic_t ni_session_statistic_t
@ NI_RETCODE_PARAM_ERROR_WIDTH_TOO_SMALL
enum _ni_ai_status ni_ai_status_t
@ NI_AI_STATUS_INVALID_PARAMS
#define NI_MAX_P2P_SGL_ENTRY
enum _ni_scaler_opcode ni_scaler_opcode_t
uint32_t ui32LastTransactionId
@ NI_RETCODE_NVME_SC_VPU_RSRC_INSUFFICIENT
@ NI_AI_STATUS_BAD_OPTION
@ NI_RETCODE_ERROR_UNSUPPORTED_FEATURE
@ NI_RETCODE_PARAM_ERROR_PIC_HEIGHT
@ NI_RETCODE_PARAM_ERROR_BRATE
@ NI_RETCODE_NVME_SC_RESOURCE_NOT_FOUND
uint32_t ui32FramesDropped
@ NI_AI_STATUS_GENERIC_ERROR
@ NI_RETCODE_PARAM_ERROR_CUSTOM_GOP
@ NI_RETCODE_PARAM_INVALID_NAME
#define NI_DEPRECATE_MACRO(X)
uint32_t ui32Session_timestamp_high
uint32_t ui32DMALen[NI_MAX_P2P_SGL_ENTRY]
uint32_t ui32Session_timestamp_low
@ NI_DEVICE_TYPE_XCODER_MAX
@ NI_RETCODE_ERROR_EXCEED_MAX_NUM_SESSIONS
@ NI_RETCODE_PARAM_ERROR_GOP_PRESET
@ NI_RETCODE_PARAM_ERROR_HEIGHT_TOO_SMALL
@ NI_RETCODE_PARAM_ERROR_FRATE
@ NI_RETCODE_PARAM_ERROR_CU_SIZE_MODE
@ NI_RETCODE_PARAM_ERROR_TOO_SMALL
@ NI_RETCODE_PARAM_ERROR_DY_MERGE_16X16_EN
@ NI_RETCODE_ERROR_INVALID_HANDLE
@ NI_RETCODE_PARAM_ERROR_INTRA_QP
@ NI_AI_STATUS_NETWORK_NOT_READY
@ NI_RETCODE_NVME_SC_WRITE_BUFFER_FULL
@ NI_RETCODE_PARAM_ERROR_ZERO
@ NI_AI_STATUS_ERROR_SET_INOUT
@ NI_AI_STATUS_CONTEXT_NOT_AVAILABLE
@ NI_SCALER_OPCODE_ROTATE
@ NI_RETCODE_PARAM_ERROR_OOR
@ NI_RETCODE_NVME_SC_REQUEST_NOT_COMPLETED
@ NI_RETCODE_NVME_SC_REQUEST_IN_PROGRESS
@ NI_RETCODE_PARAM_ERROR_PICSKIP
@ NI_RETCODE_PARAM_ERROR_TRATE
@ NI_RETCODE_ERROR_RESOURCE_UNAVAILABLE
@ NI_RETCODE_PARAM_ERROR_MN_QP
@ NI_AI_STATUS_OUT_OF_MEMORY
@ NI_RETCODE_ERROR_LOCK_DOWN_DEVICE
#define NI_MAX_HWDESC_FRAME_INDEX
@ NI_RETCODE_ERROR_OPEN_DEVICE
@ NI_RETCODE_PARAM_ERROR_INTRA_PERIOD