Files
AC707N/SDK/apps/common/device/usb/host/video_ioctl.h
T
2025-12-03 11:12:34 +08:00

429 lines
11 KiB
C

#ifndef VIDEO_IOCTL_H
#define VIDEO_IOCTL_H
#include "typedef.h"
#include "generic/list.h"
#include "generic/ioctl.h"
#include "generic/lbuf.h"
#include "system/task.h"
// #include "video/camera.h"
// #include "video/usb_cam_dev.h"
struct video_capability {
char name[16];
u32 capabilities;
};
/* Values for 'capabilities' field */
#define VIDEO_CAP_VIDEO_CAPTURE 0x00000001 /* Is a video capture device */
#define VIDEO_CAP_VIDEO_OUTPUT 0x00000002 /* Is a video output device */
#define VIDEO_CAP_VIDEO_OVERLAY 0x00000004 /* Can do video overlay */
#define VIDEO_CAP_CAMERA_FPS "camera_fps"
#define VIDEO_CAP_TUNER 0x00010000 /* has a tuner */
#define VIDEO_CAP_AUDIO 0x00020000 /* has audio support */
#define VIDEO_CAP_RADIO 0x00040000 /* is a radio device */
#define VIDEO_CAP_MODULATOR 0x00080000 /* has a modulator */
#define VIDEO_CAP_READWRITE 0x01000000 /* read/write systemcalls */
#define VIDEO_CAP_ASYNCIO 0x02000000 /* async I/O */
#define VIDEO_CAP_STREAMING 0x04000000 /* streaming I/O ioctls */
/*#define VIDEO_FPS(a) ((a)*100)*/
#define VIDEO_REC_SET_FPS 4
#define VIDEO_REC_SET_FILL_FRAME 5
#define VIDEO_REC_SET_CAMERA_FPS 6
#define VIDEO_REC_SET_CYC_TIME 8
#define VIDEO_REC_SET_DELAY_LIMIT 9
#define VIDEO_REC_RESET_BITS_RATE 10
#define VIDEO_REC_SET_TIME_STAMP 11
#define VIDEO_PIX_FMT_RAW 0x00000001
#define VIDEO_PIX_FMT_JPEG 0x00000002
#define VIDEO_PIX_FMT_H264 0x00000004
#define VIDEO_PIX_FMT_YUV420 0x00000100
#define VIDEO_PIX_FMT_YUYV 0x00000200
#define VIDEO_PIX_FMT_YV12 0x00000400
#define VIDEO_PIX_FMT_NV12 0x00000800
#define VIDEO_PIX_FMT_YUV422 0x00001000
#define VIDEO_PIX_FMT_YUV444 0x00001100
#define VIDEO_PIX_FMT_YUV 0x0000ff00
#define VIDIOC_QUERYCAP _IOR('V', 0, sizeof(struct video_capability))
#define VIDIOC_GET_FMT _IOR('V', 1, sizeof(struct video_format))
#define VIDIOC_SET_FMT _IOW('V', 1, sizeof(struct video_format))
#define VIDIOC_OVERLAY _IOW('V', 2, sizeof(int))
#define VIDIOC_STREAM_ON _IOW('V', 3, sizeof(enum video_buf_type))
#define VIDIOC_STREAM_OFF _IOW('V', 4, sizeof(enum video_buf_type))
#define VIDIOC_REQBUFS _IOW('V', 5, sizeof(struct video_reqbufs))
#define VIDIOC_QUERYBUF _IOR('V', 6, sizeof(struct videobuf_buffer))
#define VIDIOC_QBUF _IOR('V', 7, sizeof(struct videobuf_buffer))
#define VIDIOC_DQBUF _IOW('V', 8, sizeof(struct videobuf_buffer))
/*#define VIDIOC_GET_AUDIO _IOR('V', 9, sizeof(struct video_audio))
#define VIDIOC_SET_AUDIO _IOW('V', 9, sizeof(struct video_audio))*/
#define VIDIOC_IMAGE_CAPTURE _IOR('V', 10, sizeof(struct video_image_capture))
#define VIDIOC_DEL_IMAGE _IOW('V', 11, sizeof(struct video_image_capture))
#define VIDIOC_PLAY _IOW('V', 12, sizeof(int))
#define VIDIOC_GET_S_ATTR _IOR('V', 13, sizeof(struct video_enc_attr))
#define VIDIOC_SET_S_ATTR _IOW('V', 13, sizeof(struct video_enc_attr))
#define VIDIOC_GET_D_ATTR _IOR('V', 14, sizeof(struct video_enc_attr))
#define VIDIOC_SET_D_ATTR _IOW('V', 14, sizeof(struct video_enc_attr))
#define VIDIOC_GET_FPS _IOR('V', 15, sizeof(struct video_dev_fps))
#define VIDIOC_SET_FPS _IOW('V', 15, sizeof(struct video_dev_fps))
#define VIDIOC_GET_OSD _IOR('V', 16, sizeof(struct video_osd))
#define VIDIOC_SET_OSD _IOW('V', 16, sizeof(struct video_osd))
#define VIDIOC_OSD_ENABLE _IOW('V', 17, sizeof(bool))
#define VIDIOC_OSD_DISABLE _IOW('V', 18, sizeof(bool))
#define VIDIOC_GET_FRAME_CNT _IOW('V', 19, sizeof(int))
#define VIDIOC_TRY_STOP_FRAME_INTERVAL _IOW('V', 20, sizeof(int))
#define VIDIOC_SET_STOP_FRAME_INTERVAL _IOW('V', 21, sizeof(int))
#define VIDIOC_GET_OSD_ATTR _IOR('V', 22, sizeof(struct video_osd_attr))
#define VIDIOC_SET_OSD_ATTR _IOW('V', 23, sizeof(struct video_osd_attr))
#define VIDIOC_START_IFREME _IOW('V', 24, sizeof(int))
#define VIDIOC_APPEND_USER_DATA _IOW('V', 25, sizeof(struct h264_user_data))
#define VIDIOC_V4_PAUSE_RUN _IOW('V', 26, sizeof(int))
#define VIDIOC_SET_AVC _IOW('V', 27, sizeof(struct app_enc_info))
#define VIDIOC_SET_OVERLAY _IOW('V', 26, sizeof(int))
#define VIDIOC_GET_OVERLAY _IOR('V', 26, sizeof(int))
#define VIDIOC_CLEAR_OVERLAY _IOW('V', 27, sizeof(int))
#define VIDIOC_BUF_MOVE _IOW('V', 28, sizeof(int))
#define VIDIOC_SET_ENC_CROP _IOW('V', 29, sizeof(struct video_source_crop))
#define VIDIOC_SET_DIS_CROP _IOW('V', 30, sizeof(struct video_source_crop))
#define VIDIOC_GET_MIRROR _IOR('V', 31, sizeof(struct video_mirror))
#define VIDIOC_SET_MIRROR _IOW('V', 31, sizeof(struct video_mirror))
#define VIDIOC_GET_JAGGY _IOR('V', 32, sizeof(struct video_jaggy))
#define VIDIOC_SET_JAGGY _IOW('V', 32, sizeof(struct video_jaggy))
#define VIDIOC_REQDBUF _IOW('V', 33, sizeof(struct video_reqbufs))
#define VIDIOC_RDBUF _IOR('V', 34, sizeof(struct videobuf_buffer))
#define VIDIOC_IDBUF _IOW('V', 35, sizeof(struct videobuf_buffer))
#define VIDIOC_YUV_CAPTURE _IOR('V', 36, sizeof(struct video_image_capture))
#define VIDIOC_CLOSE_CAMERA _IOW('V', 37, sizeof(int))
#define VIDIOC_SET_CAMERA_INFO _IOW('V', 38, sizeof(struct camera_device_info))
#define VIDIOC_PAUSE _IOW('V', 39, sizeof(int))
#define VIDIOC_RESUME _IOW('V', 40, sizeof(int))
#define VIDIOC_GET_SOURCE_CH _IOW('V', 41, sizeof(int))
#define VIDIOC_SAVE_FILE _IOW('V', 42, sizeof(int))
#define VIDIOC_SET_CYC_TIME _IOW('V', 43, sizeof(int))
enum video_buf_type {
VIDEO_BUF_TYPE_VIDEO_CAPTURE,
VIDEO_BUF_TYPE_IMAGE_CAPTURE,
VIDEO_BUF_TYPE_VIDEO_OVERLAY,
VIDEO_BUF_TYPE_VIDEO_PLAY,
VIDEO_BUF_TYPE_YUV_CAPTURE,
VIDEO_BUF_TYPE_UVC_CAPTURE,
VIDEO_BUF_TYPE_ISP_TRAIN,
VIDEO_BUF_TYPE_QUICK_IMAGE,
VIDEO_BUF_TYPE_STICKER_IMAGE,
VIDEO_PIPE_PRE_CREATE,
};
enum video_three_way_type {
VIDEO_THREE_WAY_NONE,
VIDEO_THREE_WAY_JPEG,
VIDEO_THREE_WAY_H264,
VIDEO_THREE_WAY_DOU_RAW,
};
struct video_mirror {
u32 enc_dis;
u32 mirror;
};
struct video_jaggy {
u32 enc_dis;
u32 jaggy;
};
struct video_window {
u16 left;
u16 top;
u16 width;
u16 height;
u16 border_left;
u16 border_top;
u16 border_right;
u16 border_bottom;
u16 mirror;
u8 win_type;
u8 combine;
};
struct video_format {
enum video_buf_type type;
u8 camera_type;
u8 online;//0:是手动编码,1是联动
u8 enable_dri;
u8 three_way_type;
u8 disp_id;
u8 disp_yuv_type;
u8 disp_fb_buf_num;
u8 uvc_id;
u8 fps;
u8 osd_en;
u16 enc_rotate;
u16 dis_rotate;
u8 stop_wait;
u8 three_in_one_open;
u16 src_width;
u16 src_height;
int blk_width;
int blk_height;
u32 pixelformat;
u32 gap_fps;
struct video_window win;
void *private_data;
u8 double_raw;
void *sticker;
};
struct jpg_thumbnail {
u8 enable;
u8 quality;
u16 width;
u16 height;
u8 *buf;
int len;
};
struct image_sticker {
u8 enable;
u8 format;//YUV420/YUV422
u16 x;
u16 y;
u16 width;
u16 height;
u8 *addr;
u32 size;
};
struct video_image_capture {
u16 width;
u16 height;
u8 *baddr;
u32 size;
int format;
u32 mirror;
struct jpg_thumbnail *thumbnail;
struct image_sticker *sticker;
u8 linear_scale; // 使用软件线性插值标志
};
struct video_reqbufs {
void *buf;
int size;
struct buffer_dev {
void *fd;
u32 head_size;
u32 align_size;
u32 addr;
u32 size;
int (*read)(void *fd, void *buf, u32 addr, int len);
int (*write)(void *fd, void *buf, u32 addr, int len);
} dev;
};
struct videobuf_buffer {
u32 len;
u32 magic;
u32 msec;
u8 data[0];
};
struct videobuf_state {
u32 available_len;
u32 max_continue_len;
};
// struct videobuf_queue {
// u8 ref;
// u8 streaming;
// u16 align;
// const char *name;
// OS_SEM sem;
// void *buf;
// struct lbuff_head *lbuf;
// void *private_data;
// };
struct video_buffer {
u8 index;
u8 noblock;
u16 timeout;
u32 time_msec;
u32 len;
u32 baddr;
void *priv;
u32 test_num;
};
//enum videobuf_state {
//VIDEOBUF_NEEDS_INIT = 0,
//VIDEOBUF_PREPARED = 1,
//VIDEOBUF_QUEUED = 2,
//VIDEOBUF_ACTIVE = 3,
//VIDEOBUF_DONE = 4,
//VIDEOBUF_ERROR = 5,
//VIDEOBUF_IDLE = 6,
//};
//struct videobuf_queue;
//#define VIDEO_MAX_FRAME 16
//struct videobuf_buffer {
//struct list_head stream;
//OS_SEM done;
//u32 baddr;
//u8 state;
//u8 index;
//void *priv_data;
//};
//struct videobuf_queue {
//struct list_head stream;
//struct videobuf_buffer *bufs[VIDEO_MAX_FRAME];
//struct videobuf_buffer *curr;
//struct videobuf_queue_ops *ops;
//OS_SEM sem;
//int msize;
//void *pirv_data;
//u8 streaming;
//};
/*struct video_audio {
u32 capabilities;
};*/
//struct videobuf_queue_ops {
//int (*buf_setup)(struct videobuf_queue *q, int *count);
//int (*buf_prepare)(struct videobuf_queue *q, struct videobuf_buffer *);
//};
/*struct video_ioctl_ops {
int (*vidioc_querycap)(void *fh, struct video_capability *cap);
int (*vidioc_get_fmt_vid_cap)(void *fh, struct video_format *f);
int (*vidioc_get_fmt_vid_out)(void *fh, struct video_format *f);
int (*vidioc_get_fmt_vid_overlay)(void *fh, struct video_format *f);
int (*vidioc_set_fmt_vid_cap)(void *fh, struct video_format *f);
int (*vidioc_set_fmt_vid_out)(void *fh, struct video_format *f);
int (*vidioc_set_fmt_vid_overlay)(void *fh, struct video_format *f);
int (*vidioc_try_fmt_vid_cap)(void *fh, struct video_format *f);
int (*vidioc_try_fmt_vid_out)(void *fh, struct video_format *f);
int (*vidioc_try_fmt_vid_overlay)(void *fh, struct video_format *f);
int (*vidioc_reqbufs)(void *fh, struct video_reqbufs *b);
int (*vidioc_querybuf)(void *fh, struct video_buffer *b);
int (*vidioc_qbuf)(void *fh, struct video_buffer *b);
int (*vidioc_dqbuf)(void *fh, struct video_buffer *b);
int (*vidioc_overlay)(void *fh, unsigned int i);
int (*vidioc_streamon)(void *fh, int i);
int (*vidioc_streamoff)(void *fh, int i);
int (*vidioc_get_audio)(void *fh, struct video_audio *a);
int (*vidioc_set_audio)(void *fh, struct video_audio *a);
};*/
/*struct video_device {
const char *name;
const struct video_ioctl_ops *ioctl;
const struct video_file_operations *fops;
void *priv;
};*/
/*struct video_file_operations {
int (*open)(struct video_device *device);
int (*write)(struct video_device *device, void *buf, u32 len);
int (*close)(struct video_device *device);
};*/
/*struct video_dec_format {
int pixelformat;
};*/
#endif