doubao_chat/include_lib/driver/device/video/video_ioctl.h

394 lines
9.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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"
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_OUT_FMT_YUV 0x00000008
#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_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_SET_CYC_SAVE_FILE _IOW('V', 28, sizeof(int))
#define VIDIOC_SET_CYCTIME _IOW('V', 29, sizeof(int))
#define VIDIOC_GET_YUV_CALLBACK _IOR('V', 29, sizeof(int))
#define VIDIOC_SET_ANOTHER_YUV_CALLBACK _IOW('V', 30, sizeof(int))
#define VIDIOC_SET_HDWARE_STATE _IOW('V', 31, 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,
};
enum video_three_way_type {
VIDEO_THREE_WAY_NONE,
VIDEO_THREE_WAY_JPEG,
VIDEO_THREE_WAY_H264,
};
struct video_window {
u16 left;
u16 top;
u16 width;
u16 height;
u16 border_left;
u16 border_top;
u16 border_right;
u16 border_bottom;
};
struct video_format {
enum video_buf_type type;
u8 camera_type;
u8 three_way_type;
u8 disp_yuv_type;
u8 uvc_id;
u8 fps;
u8 major;
u16 src_width;
u16 src_height;
u32 pixelformat;
struct video_window win;
void *private_data;
u8 *static_buf;//静态buf
u32 sbuf_size;//静态buf size
u8 quality;
int (*get_yuv)(void *hdl, void *frame);
int (*block_done_cb)(void *info);
};
struct jpg_thumbnail {
u8 enable;
u8 quality;
u16 width;
u16 height;
u8 *buf;
int len;
};
struct image_sticker {
u8 enable;
u8 format;//YUV420/YUV422
u8 threshold;//y分量阈值,小于该阈值为贴纸透明
u16 width;
u16 height;
u8 *addr;
u32 size;
};
struct video_image_capture {
u16 width;
u16 height;
u8 *baddr;
u32 size;
struct jpg_thumbnail *thumbnail;
struct image_sticker *sticker;
};
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;
void *priv;
u8 data[0];
};
struct videobuf_state {
u32 available_len;
u32 max_continue_len;
};
struct videobuf_device {
void *fd;
struct lbuff_head *lbuf;
OS_SEM sem_flush;
OS_SEM sem_lock;
char task_name[32];
int (*read)(void *fd, void *buf, u32 addr, int len);
int (*write)(void *fd, void *buf, u32 addr, int len);
};
struct videobuf_queue {
u8 ref;
u8 align;
u8 streaming;
OS_SEM sem;
void *buf;
u32 size;
const char *name;
struct lbuff_head *lbuf;
struct videobuf_device *dev;
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