#include "megbrain_build_config.h"
#if MGB_CUDA
#ifndef _NV_OPTICALFLOW_COMMON_H_
#define _NV_OPTICALFLOW_COMMON_H_
#if defined(_MSC_VER_) && (_MSC_VER_ < 1600)
#ifndef _STDINT
typedef __int32 int32_t;
typedef unsigned __int32 uint32_t;
typedef __int64 int64_t;
typedef unsigned __int64 uint64_t;
typedef signed char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
#endif
#else
#include <stdint.h>
#endif
#ifdef _WIN32
#define NVOFAPI __stdcall
#else
#define NVOFAPI
#endif
#define NV_OF_API_MAJOR_VERSION 2
#define NV_OF_API_MINOR_VERSION 0
#define NV_OF_API_VERSION \
(uint16_t)((NV_OF_API_MAJOR_VERSION << 4) | NV_OF_API_MINOR_VERSION)
#define MIN_ERROR_STRING_SIZE 80
#if defined(__cplusplus)
extern "C" {
#endif
typedef struct NvOFHandle_st* NvOFHandle;
typedef struct NvOFGPUBufferHandle_st* NvOFGPUBufferHandle;
typedef struct NVOFPrivDataHandle_st* NvOFPrivDataHandle;
typedef enum _NV_OF_STATUS {
NV_OF_SUCCESS,
NV_OF_ERR_OF_NOT_AVAILABLE,
NV_OF_ERR_UNSUPPORTED_DEVICE,
NV_OF_ERR_DEVICE_DOES_NOT_EXIST,
NV_OF_ERR_INVALID_PTR,
NV_OF_ERR_INVALID_PARAM,
NV_OF_ERR_INVALID_CALL,
NV_OF_ERR_INVALID_VERSION,
NV_OF_ERR_OUT_OF_MEMORY,
NV_OF_ERR_NOT_INITIALIZED,
NV_OF_ERR_UNSUPPORTED_FEATURE,
NV_OF_ERR_GENERIC,
} NV_OF_STATUS;
typedef enum _NV_OF_BOOL {
NV_OF_FALSE = 0,
NV_OF_TRUE = !NV_OF_FALSE
} NV_OF_BOOL;
typedef enum _NV_OF_CAPS {
NV_OF_CAPS_SUPPORTED_OUTPUT_GRID_SIZES,
NV_OF_CAPS_SUPPORTED_HINT_GRID_SIZES,
NV_OF_CAPS_SUPPORT_HINT_WITH_OF_MODE,
NV_OF_CAPS_SUPPORT_HINT_WITH_ST_MODE,
NV_OF_CAPS_WIDTH_MIN,
NV_OF_CAPS_HEIGHT_MIN,
NV_OF_CAPS_WIDTH_MAX,
NV_OF_CAPS_HEIGHT_MAX,
NV_OF_CAPS_SUPPORT_ROI,
NV_OF_CAPS_SUPPORT_ROI_MAX_NUM,
NV_OF_CAPS_SUPPORT_MAX
} NV_OF_CAPS;
typedef enum _NV_OF_PERF_LEVEL {
NV_OF_PERF_LEVEL_UNDEFINED,
NV_OF_PERF_LEVEL_SLOW =
5,
NV_OF_PERF_LEVEL_MEDIUM =
10,
NV_OF_PERF_LEVEL_FAST =
20,
NV_OF_PERF_LEVEL_MAX
} NV_OF_PERF_LEVEL;
typedef enum _NV_OF_OUTPUT_VECTOR_GRID_SIZE {
NV_OF_OUTPUT_VECTOR_GRID_SIZE_UNDEFINED,
NV_OF_OUTPUT_VECTOR_GRID_SIZE_1 = 1,
NV_OF_OUTPUT_VECTOR_GRID_SIZE_2 = 2,
NV_OF_OUTPUT_VECTOR_GRID_SIZE_4 = 4,
NV_OF_OUTPUT_VECTOR_GRID_SIZE_MAX
} NV_OF_OUTPUT_VECTOR_GRID_SIZE;
typedef enum _NV_OF_HINT_VECTOR_GRID_SIZE {
NV_OF_HINT_VECTOR_GRID_SIZE_UNDEFINED,
NV_OF_HINT_VECTOR_GRID_SIZE_1 = 1,
NV_OF_HINT_VECTOR_GRID_SIZE_2 = 2,
NV_OF_HINT_VECTOR_GRID_SIZE_4 = 4,
NV_OF_HINT_VECTOR_GRID_SIZE_8 = 8,
NV_OF_HINT_VECTOR_GRID_SIZE_MAX
} NV_OF_HINT_VECTOR_GRID_SIZE;
typedef enum _NV_OF_MODE {
NV_OF_MODE_UNDEFINED,
NV_OF_MODE_OPTICALFLOW,
NV_OF_MODE_STEREODISPARITY,
NV_OF_MODE_MAX
} NV_OF_MODE;
typedef enum _NV_OF_BUFFER_USAGE {
NV_OF_BUFFER_USAGE_UNDEFINED,
NV_OF_BUFFER_USAGE_INPUT,
NV_OF_BUFFER_USAGE_OUTPUT,
NV_OF_BUFFER_USAGE_HINT,
NV_OF_BUFFER_USAGE_COST,
NV_OF_BUFFER_USAGE_MAX
} NV_OF_BUFFER_USAGE;
typedef enum _NV_OF_BUFFER_FORMAT {
NV_OF_BUFFER_FORMAT_UNDEFINED,
NV_OF_BUFFER_FORMAT_GRAYSCALE8,
NV_OF_BUFFER_FORMAT_NV12,
NV_OF_BUFFER_FORMAT_ABGR8,
NV_OF_BUFFER_FORMAT_SHORT,
NV_OF_BUFFER_FORMAT_SHORT2,
NV_OF_BUFFER_FORMAT_UINT,
NV_OF_BUFFER_FORMAT_UINT8,
NV_OF_BUFFER_FORMAT_MAX
} NV_OF_BUFFER_FORMAT;
typedef enum _NV_OF_STEREO_DISPARITY_RANGE {
NV_OF_STEREO_DISPARITY_RANGE_UNDEFINED,
NV_OF_STEREO_DISPARITY_RANGE_128 = 128,
NV_OF_STEREO_DISPARITY_RANGE_256 = 256,
NV_OF_STEREO_DISPARITY_RANGE_MAX,
} NV_OF_STEREO_DISPARITY_RANGE;
typedef struct _NV_OF_FLOW_VECTOR {
int16_t flowx;
int16_t flowy;
} NV_OF_FLOW_VECTOR;
typedef struct _NV_OF_STEREO_DISPARITY {
uint16_t disparity;
} NV_OF_STEREO_DISPARITY;
typedef struct _NV_OF_INIT_PARAMS {
uint32_t width;
uint32_t height;
NV_OF_OUTPUT_VECTOR_GRID_SIZE
outGridSize;
NV_OF_HINT_VECTOR_GRID_SIZE
hintGridSize;
NV_OF_MODE mode;
NV_OF_PERF_LEVEL perfLevel;
NV_OF_BOOL enableExternalHints;
NV_OF_BOOL enableOutputCost;
NvOFPrivDataHandle hPrivData;
NV_OF_STEREO_DISPARITY_RANGE
disparityRange;
NV_OF_BOOL enableRoi;
} NV_OF_INIT_PARAMS;
typedef struct _NV_OF_BUFFER_DESCRIPTOR {
uint32_t width;
uint32_t height;
NV_OF_BUFFER_USAGE bufferUsage;
NV_OF_BUFFER_FORMAT bufferFormat;
} NV_OF_BUFFER_DESCRIPTOR;
struct NV_OF_ROI_RECT {
uint32_t start_x;
uint32_t start_y;
uint32_t width;
uint32_t height;
};
typedef struct _NV_OF_EXECUTE_INPUT_PARAMS {
NvOFGPUBufferHandle
inputFrame;
NvOFGPUBufferHandle
referenceFrame;
NvOFGPUBufferHandle
externalHints;
NV_OF_BOOL
disableTemporalHints;
uint32_t padding;
NvOFPrivDataHandle hPrivData;
uint32_t padding2;
uint32_t numRois;
NV_OF_ROI_RECT*
roiData;
} NV_OF_EXECUTE_INPUT_PARAMS;
typedef struct _NV_OF_EXECUTE_OUTPUT_PARAMS {
NvOFGPUBufferHandle
outputBuffer;
NvOFGPUBufferHandle outputCostBuffer;
NvOFPrivDataHandle hPrivData;
} NV_OF_EXECUTE_OUTPUT_PARAMS;
typedef NV_OF_STATUS(NVOFAPI* PFNNVOFINIT)(
NvOFHandle hOf, const NV_OF_INIT_PARAMS* initParams);
typedef NV_OF_STATUS(NVOFAPI* PFNNVOFEXECUTE)(
NvOFHandle hOf, const NV_OF_EXECUTE_INPUT_PARAMS* executeInParams,
NV_OF_EXECUTE_OUTPUT_PARAMS* executeOutParams);
typedef NV_OF_STATUS(NVOFAPI* PFNNVOFDESTROY)(NvOFHandle hOf);
typedef NV_OF_STATUS(NVOFAPI* PFNNVOFGETLASTERROR)(
NvOFHandle hOf, char lastError[], uint32_t* size);
typedef NV_OF_STATUS(NVOFAPI* PFNNVOFGETCAPS)(
NvOFHandle hOf, NV_OF_CAPS capsParam, uint32_t* capsVal, uint32_t* size);
NV_OF_STATUS NVOFAPI NvOFGetMaxSupportedApiVersion(uint32_t* version);
#if defined(__cplusplus)
}
#endif
#endif
#endif