You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
145 lines
5.0 KiB
145 lines
5.0 KiB
|
7 months ago
|
#ifndef __V4L2_INTERFACE_H__
|
||
|
|
#define __V4L2_INTERFACE_H__
|
||
|
|
|
||
|
|
#include <stdbool.h>
|
||
|
|
#include <linux/videodev2.h>
|
||
|
|
|
||
|
|
#ifdef __cplusplus
|
||
|
|
extern "C" {
|
||
|
|
#endif
|
||
|
|
|
||
|
|
#define CLEAR(x) memset(&(x), 0, sizeof(x))
|
||
|
|
#define USER_BUF_VDMA (50)
|
||
|
|
#define DEFAULT_BUFFER_NUM (3) // number of capture buffers
|
||
|
|
|
||
|
|
/*
|
||
|
|
* The Video Path index is as follows.
|
||
|
|
* OFRC: V0[0 ~ 9]
|
||
|
|
* V1[50 ~ 59]
|
||
|
|
* CNN: V0[10 ~ 19]
|
||
|
|
* V1[60 ~ 69]
|
||
|
|
* CODA: V0[20 ~ 29]
|
||
|
|
* V1[70 ~ 79]
|
||
|
|
* CSI: V0[30 ~ 39]
|
||
|
|
* V1[80 ~ 89]
|
||
|
|
* Reserved: V0[40 ~ 49]
|
||
|
|
* V1[90 ~ 99]
|
||
|
|
*/
|
||
|
|
#define VISION1_DEVICE_START_OFFSET 50
|
||
|
|
#define OFRC_DEVICE_NUM(x) ((x) == 0 ? 0 : VISION1_DEVICE_START_OFFSET)
|
||
|
|
#define CNN_DEVICE_NUM(x) ((x) == 0 ? 10 : 10 + VISION1_DEVICE_START_OFFSET)
|
||
|
|
#define CODA_DEVICE_NUM(x) ((x) == 0 ? 20 : 20 + VISION1_DEVICE_START_OFFSET)
|
||
|
|
#define CSI_DEVICE_NUM(x) ((x) == 0 ? 30 : 30 + VISION1_DEVICE_START_OFFSET)
|
||
|
|
#define RESERVED_DEVICE_NUM(x) ((x) == 0 ? 40 : 40 + VISION1_DEVICE_START_OFFSET)
|
||
|
|
|
||
|
|
#define GET_DATA_IDX(x) \
|
||
|
|
(((x) >= OFRC_DEVICE_NUM(VISION0) && (x) < CNN_DEVICE_NUM(VISION0)) || ((x) >= OFRC_DEVICE_NUM(VISION1) && (x) < CNN_DEVICE_NUM(VISION1)) ? OFRC_MODE : \
|
||
|
|
((x) >= CNN_DEVICE_NUM(VISION0) && (x) < CODA_DEVICE_NUM(VISION0)) || ((x) >= CNN_DEVICE_NUM(VISION1) && (x) < CODA_DEVICE_NUM(VISION1)) ? CNN_MODE : \
|
||
|
|
((x) >= CODA_DEVICE_NUM(VISION0) && (x) < CSI_DEVICE_NUM(VISION0)) || ((x) >= CODA_DEVICE_NUM(VISION1) && (x) < CSI_DEVICE_NUM(VISION1)) ? CODA_MODE : \
|
||
|
|
((x) >= CSI_DEVICE_NUM(VISION0) && (x) < RESERVED_DEVICE_NUM(VISION0)) || ((x) >= CSI_DEVICE_NUM(VISION1) && (x) < RESERVED_DEVICE_NUM(VISION1)) ? CSI_MODE : -1)
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
VISION0 = 0,
|
||
|
|
VISION1,
|
||
|
|
} E_VISION_NUM;
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Not Support : MODE_DS_TO_CROP
|
||
|
|
*/
|
||
|
|
typedef enum {
|
||
|
|
MODE_BYPASS = 0,
|
||
|
|
MODE_CROP,
|
||
|
|
MODE_DS,
|
||
|
|
MODE_CROP_TO_DS
|
||
|
|
} E_IMG_PROCESS;
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
OFRC_MODE = 0,
|
||
|
|
CNN_MODE,
|
||
|
|
CODA_MODE,
|
||
|
|
CSI_MODE /* BAYER or YUV */
|
||
|
|
} E_RAW_DATA_IDX;
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
PLANAR = 0,
|
||
|
|
INTERLEAVE,
|
||
|
|
} E_CNN_DMA_MODE;
|
||
|
|
|
||
|
|
typedef enum {
|
||
|
|
ISP_LDC_CTRL = 0,
|
||
|
|
ISP_AE_CTRL,
|
||
|
|
ISP_AWB_CTRL,
|
||
|
|
ISP_TUNE_CTRL
|
||
|
|
} E_ISP_CTRL;
|
||
|
|
|
||
|
|
struct video_buffer {
|
||
|
|
void *start;
|
||
|
|
size_t length;
|
||
|
|
};
|
||
|
|
|
||
|
|
struct vbuffer {
|
||
|
|
void *start;
|
||
|
|
size_t length;
|
||
|
|
int filled; // 1: filled with camera data, 0:camera data has been glTexDirectMapped
|
||
|
|
int invalid; // 1: already swapped, 0:not swappedto texture
|
||
|
|
};
|
||
|
|
|
||
|
|
struct vd_buffer{
|
||
|
|
int video_fd;
|
||
|
|
vbuffer *buffers;
|
||
|
|
int fill_buffer_inx; // 1: filled with camera data, 0: not filled
|
||
|
|
int video_device_num;
|
||
|
|
};
|
||
|
|
|
||
|
|
typedef struct {
|
||
|
|
struct vd_buffer video_buf;
|
||
|
|
int data_idx; // ofrc, cnn, coda, yuv
|
||
|
|
char dma_mode; // planar. interleave
|
||
|
|
unsigned int img_process; // crop, ds, cropds
|
||
|
|
unsigned int pixformat;
|
||
|
|
unsigned int crop_x_start;
|
||
|
|
unsigned int crop_y_start;
|
||
|
|
unsigned int crop_width;
|
||
|
|
unsigned int crop_height;
|
||
|
|
unsigned int ds_width;
|
||
|
|
unsigned int ds_height;
|
||
|
|
unsigned int sensor_width;
|
||
|
|
unsigned int sensor_height;
|
||
|
|
} st_nc_v4l2_config;
|
||
|
|
|
||
|
|
int nc_v4l2_set_vdma_cnn_crop_ds(int fd, char dma_mode, unsigned int img_process,
|
||
|
|
unsigned int pos_x, unsigned int pos_y,
|
||
|
|
unsigned int crop_width, unsigned int crop_height,
|
||
|
|
unsigned int ds_width, unsigned int ds_height);
|
||
|
|
|
||
|
|
int nc_v4l2_set_vdma_coda_crop_ds(int fd, unsigned int img_process,
|
||
|
|
unsigned int pos_x, unsigned int pos_y,
|
||
|
|
unsigned int crop_width, unsigned int crop_height,
|
||
|
|
unsigned int ds_width, unsigned int ds_height);
|
||
|
|
int nc_v4l2_open(int idx, bool isblock);
|
||
|
|
int nc_v4l2_close(int fd);
|
||
|
|
int nc_v4l2_set_input(int fd, unsigned int index, int type);
|
||
|
|
int nc_v4l2_get_capability(int fd, struct v4l2_capability *cap);
|
||
|
|
void nc_v4l2_print_capability(const struct v4l2_capability *cap);
|
||
|
|
int nc_v4l2_set_fps(int fd, unsigned int fps);
|
||
|
|
int nc_v4l2_set_format(int fd, unsigned int width, unsigned int height, unsigned int pixelformat);
|
||
|
|
int nc_v4l2_get_ctrl(int fd, int id, int *value);
|
||
|
|
int nc_v4l2_set_ctrl(int fd, unsigned int id, int *value);
|
||
|
|
int nc_v4l2_alloc_mapped(int fd, unsigned int count, struct vbuffer *buffers);
|
||
|
|
int nc_v4l2_free_mapped(int fd, size_t count, struct vbuffer *buffers);
|
||
|
|
int nc_v4l2_query_buffer(int fd, size_t index, struct v4l2_buffer *buf);
|
||
|
|
int nc_v4l2_queue_buffer(int fd, size_t index);
|
||
|
|
int nc_v4l2_dequeue_buffer(int fd, struct v4l2_buffer *buf);
|
||
|
|
int nc_v4l2_start_capture(int fd);
|
||
|
|
int nc_v4l2_stop_capture(int fd);
|
||
|
|
void nc_vdma_memory_dump_image(int ch, const void *p);
|
||
|
|
int nc_v4l2_get_format(int fd, int *width, int *height);
|
||
|
|
int nc_v4l2_get_frame_size(int fd, unsigned int pixelformat);
|
||
|
|
int nc_v4l2_init_device_and_stream_on(st_nc_v4l2_config *s_nc_config, int video_buffer_num);
|
||
|
|
void nc_v4l2_show_user_config(st_nc_v4l2_config *s_nc_config, int video_max);
|
||
|
|
int nc_v4l2_isp_ctrl(int fd, unsigned char func_num, unsigned char cfg_value);
|
||
|
|
#ifdef __cplusplus
|
||
|
|
}
|
||
|
|
#endif
|
||
|
|
#endif //__V4L2_INTERFACE_H__
|