objectDetector_Yolo_traffic/includes/nvbufsurftransform.h
2022-09-09 09:02:57 +07:00

283 lines
9.6 KiB
C

/*
* Copyright (c) 2019, NVIDIA CORPORATION. All rights reserved.
*
* NVIDIA Corporation and its licensors retain all intellectual property
* and proprietary rights in and to this software, related documentation
* and any modifications thereto. Any use, reproduction, disclosure or
* distribution of this software and related documentation without an express
* license agreement from NVIDIA Corporation is strictly prohibited.
*
*/
/**
* @file nvbufsurftransform.h
* <b>NvBufSurfTransform Interface </b>
*
* This file specifies the NvBufSurfTransform image transformation APIs.
*
* The NvBufSurfTransform API provides methods to set and get session parameters
* and to transform and composite APIs.
*/
#ifndef NVBUFSURFTRANSFORM_H_
#define NVBUFSURFTRANSFORM_H_
#include <cuda.h>
#include <cuda_runtime.h>
#include "nvbufsurface.h"
#ifdef __cplusplus
extern "C" {
#endif
/** @defgroup ds_bbb NvBufSurfTransform Types and Functions
* Defines types and functions of the \ref NvBufSurfTransform
* application programming interface.
* @ingroup ds_nvbuf_api
* @{ */
/**
* Specifies compute devices used by \ref NvBufSurfTransform.
*/
typedef enum
{
/** Specifies VIC as a compute device for Jetson or dGPU for an x86_64
system. */
NvBufSurfTransformCompute_Default,
/** Specifies that the GPU is the compute device. */
NvBufSurfTransformCompute_GPU,
/** Specifies that the VIC as a compute device. Supported only for Jetson. */
NvBufSurfTransformCompute_VIC
} NvBufSurfTransform_Compute;
/**
* Specifies video flip methods. Supported only for Jetson.
*/
typedef enum
{
/** Specifies no video flip. */
NvBufSurfTransform_None,
/** Specifies rotating 90 degrees clockwise. */
NvBufSurfTransform_Rotate90,
/** Specifies rotating 180 degree clockwise. */
NvBufSurfTransform_Rotate180,
/** Specifies rotating 270 degree clockwise. */
NvBufSurfTransform_Rotate270,
/** Specifies video flip with respect to the X-axis. */
NvBufSurfTransform_FlipX,
/** Specifies video flip with respect to the Y-axis. */
NvBufSurfTransform_FlipY,
/** Specifies video flip transpose. */
NvBufSurfTransform_Transpose,
/** Specifies video flip inverse transpose. */
NvBufSurfTransform_InvTranspose,
} NvBufSurfTransform_Flip;
/**
* Specifies video interpolation methods.
*/
typedef enum
{
/** Specifies Nearest Interpolation Method interpolation. */
NvBufSurfTransformInter_Nearest = 0,
/** Specifies Bilinear Interpolation Method interpolation. */
NvBufSurfTransformInter_Bilinear,
/** Specifies GPU-Cubic, VIC-5 Tap interpolation. */
NvBufSurfTransformInter_Algo1,
/** Specifies GPU-Super, VIC-10 Tap interpolation. */
NvBufSurfTransformInter_Algo2,
/** Specifies GPU-Lanzos, VIC-Smart interpolation. */
NvBufSurfTransformInter_Algo3,
/** Specifies GPU-Ignored, VIC-Nicest interpolation. */
NvBufSurfTransformInter_Algo4,
/** Specifies GPU-Nearest, VIC-Nearest interpolation. */
NvBufSurfTransformInter_Default
} NvBufSurfTransform_Inter;
/**
* Specifies error codes returned by \ref NvBufSurfTransform functions.
*/
typedef enum
{
/** Specifies an error in source or destination ROI. */
NvBufSurfTransformError_ROI_Error = -4,
/** Specifies invalid input parameters. */
NvBufSurfTransformError_Invalid_Params = -3,
/** Specifies a runtime execution error. */
NvBufSurfTransformError_Execution_Error = -2,
/** Specifies an unsupported feature or format. */
NvBufSurfTransformError_Unsupported = -1,
/** Specifies a successful operation. */
NvBufSurfTransformError_Success = 0
} NvBufSurfTransform_Error;
/**
* Specifies transform types.
*/
typedef enum {
/** Specifies a transform to crop the source rectangle. */
NVBUFSURF_TRANSFORM_CROP_SRC = 1,
/** Specifies a transform to crop the destination rectangle. */
NVBUFSURF_TRANSFORM_CROP_DST = 1 << 1,
/** Specifies a transform to set the filter type. */
NVBUFSURF_TRANSFORM_FILTER = 1 << 2,
/** Specifies a transform to set the flip method. */
NVBUFSURF_TRANSFORM_FLIP = 1 << 3,
} NvBufSurfTransform_Transform_Flag;
/**
* Specifies types of composition operations.
*/
typedef enum {
/** Specifies a flag to describe the requested compositing operation. */
NVBUFSURF_TRANSFORM_COMPOSITE = 1,
} NvBufSurfTransform_Composite_Flag;
/**
* Holds the coordinates of a rectangle.
*/
typedef struct
{
/** Holds the rectangle top. */
uint32_t top;
/** Holds the rectangle left side. */
uint32_t left;
/** Holds the rectangle width. */
uint32_t width;
/** Holds the rectangle height. */
uint32_t height;
}NvBufSurfTransformRect;
/**
* Holds configuration parameters for a transform/composite session.
*/
typedef struct _NvBufSurfTransformConfigParams
{
/** Holds the mode of operation: VIC (Jetson) or GPU (iGPU + dGPU)
If VIC is configured, \a gpu_id is ignored. */
NvBufSurfTransform_Compute compute_mode;
/** Holds the GPU ID to be used for processing. */
int32_t gpu_id;
/** User configure stream to be used. If NULL, the default stream is used.
Ignored if VIC is used. */
cudaStream_t cuda_stream;
} NvBufSurfTransformConfigParams;
/**
* Holds transform parameters for a transform call.
*/
typedef struct _NvBufSurfaceTransformParams
{
/** Holds a flag that indicates which transform parameters are valid. */
uint32_t transform_flag;
/** Holds the flip method. */
NvBufSurfTransform_Flip transform_flip;
/** Holds a transform filter. */
NvBufSurfTransform_Inter transform_filter;
/** Holds a pointer to a list of source rectangle coordinates for
a crop operation. */
NvBufSurfTransformRect *src_rect;
/** Holds a pointer to list of destination rectangle coordinates for
a crop operation. */
NvBufSurfTransformRect *dst_rect;
}NvBufSurfTransformParams;
/**
* Holds composite parameters for a composite call.
*/
typedef struct _NvBufSurfTransformCompositeParams
{
/** Holds a flag that indicates which composition parameters are valid. */
uint32_t composite_flag;
/** Holds the number of input buffers to be composited. */
uint32_t input_buf_count;
/** Holds source rectangle coordinates of input buffers for compositing. */
NvBufSurfTransformRect *src_comp_rect;
/** Holds destination rectangle coordinates of input buffers for
compositing. */
NvBufSurfTransformRect *dst_comp_rect;
}NvBufSurfTransformCompositeParams;
/**
* \brief Sets user-defined session parameters.
*
* If user-defined session parameters are set, they override the
* NvBufSurfTransform() function's default session.
*
* @param[in] config_params A pointer to a structure that is populated
* with the session parameters to be used.
*
* @return An \ref NvBufSurfTransform_Error value indicating
* success or failure.
*/
NvBufSurfTransform_Error NvBufSurfTransformSetSessionParams
(NvBufSurfTransformConfigParams *config_params);
/**
* \brief Gets the session parameters used by NvBufSurfTransform().
*
* @param[out] config_params A pointer to a caller-allocated structure to be
* populated with the session parameters used.
*
* @return An \ref NvBufSurfTransform_Error value indicating
* success or failure.
*/
NvBufSurfTransform_Error NvBufSurfTransformGetSessionParams
(NvBufSurfTransformConfigParams *config_params);
/**
* \brief Performs a transformation on batched input images.
*
* If user-defined session parameters are to be used, call
* NvBufSurfTransformSetSessionParams() before calling this function.
*
* @param[in] src A pointer to input batched buffers to be transformed.
* @param[out] dst A pointer to a caller-allocated location where
* transformed output is to be stored.
* @par When destination cropping is performed, memory outside
* the crop location is not touched, and may contain stale
* information. The caller must perform a memset before
* calling this function if stale information must be
* eliminated.
* @param[in] transform_params
* A pointer to an \ref NvBufSurfTransformParams structure
* which specifies the type of transform to be performed. They
* may include any combination of scaling, format conversion,
* and cropping for both source and destination.
* Flipping and rotation are supported on VIC.
* @return An \ref NvBufSurfTransform_Error value indicating
* success or failure.
*/
NvBufSurfTransform_Error NvBufSurfTransform (NvBufSurface *src, NvBufSurface *dst,
NvBufSurfTransformParams *transform_params);
/**
* \brief Composites batched input images.
*
* The compositer scales and stitches
* batched buffers indicated by \a src into a single destination buffer, \a dst.
*
* If user-defined session parameters are to be used, call
* NvBufSurfTransformSetSessionParams() before calling this function.
*
* @param[in] src A pointer to input batched buffers to be transformed.
* @param[out] dst A pointer a caller-allocated location (a single buffer)
* where composited output is to be stored.
* @param[in] composite_params
* A pointer to an \ref NvBufSurfTransformCompositeParams
* structure which specifies the compositing operation to be
* performed, e.g., the source and destination rectangles
* in \a src and \a dst.
* @return An \ref NvBufSurfTransform_Error value indicating success or failure.
*/
NvBufSurfTransform_Error NvBufSurfTransformComposite (NvBufSurface *src,
NvBufSurface *dst, NvBufSurfTransformCompositeParams *composite_params);
/** @} */
#ifdef __cplusplus
}
#endif
#endif