xref: /freebsd/sys/dev/video/video.h (revision 9c9428825f4c55e3cb37412c661bb9d385db4c68)
1*9c942882SAbdelkader Boudih /*
2*9c942882SAbdelkader Boudih  * Copyright (c) 2026 Abdelkader Boudih <freebsd@seuros.com>
3*9c942882SAbdelkader Boudih  *
4*9c942882SAbdelkader Boudih  * SPDX-License-Identifier: BSD-2-Clause
5*9c942882SAbdelkader Boudih  */
6*9c942882SAbdelkader Boudih 
7*9c942882SAbdelkader Boudih #ifndef _DEV_VIDEO_VIDEO_H_
8*9c942882SAbdelkader Boudih #define _DEV_VIDEO_VIDEO_H_
9*9c942882SAbdelkader Boudih 
10*9c942882SAbdelkader Boudih #include <sys/types.h>
11*9c942882SAbdelkader Boudih #include <sys/bus.h>
12*9c942882SAbdelkader Boudih 
13*9c942882SAbdelkader Boudih struct video_device;
14*9c942882SAbdelkader Boudih struct video_buf;
15*9c942882SAbdelkader Boudih 
16*9c942882SAbdelkader Boudih struct video_format {
17*9c942882SAbdelkader Boudih 	uint32_t	pixelformat;	/* V4L2 fourcc */
18*9c942882SAbdelkader Boudih 	uint32_t	width;
19*9c942882SAbdelkader Boudih 	uint32_t	height;
20*9c942882SAbdelkader Boudih 	uint32_t	bytesperline;
21*9c942882SAbdelkader Boudih 	uint32_t	sizeimage;
22*9c942882SAbdelkader Boudih 	uint32_t	field;
23*9c942882SAbdelkader Boudih 	uint32_t	colorspace;
24*9c942882SAbdelkader Boudih 	uint32_t	xfer_func;
25*9c942882SAbdelkader Boudih 	uint32_t	ycbcr_enc;
26*9c942882SAbdelkader Boudih 	uint32_t	flags;		/* V4L2_FMT_FLAG_* */
27*9c942882SAbdelkader Boudih 	char		description[32];
28*9c942882SAbdelkader Boudih };
29*9c942882SAbdelkader Boudih 
30*9c942882SAbdelkader Boudih struct video_fract {
31*9c942882SAbdelkader Boudih 	uint32_t	numerator;
32*9c942882SAbdelkader Boudih 	uint32_t	denominator;
33*9c942882SAbdelkader Boudih };
34*9c942882SAbdelkader Boudih 
35*9c942882SAbdelkader Boudih struct video_caps {
36*9c942882SAbdelkader Boudih 	char		driver[16];
37*9c942882SAbdelkader Boudih 	char		card[32];
38*9c942882SAbdelkader Boudih 	char		bus_info[32];
39*9c942882SAbdelkader Boudih 	uint32_t	version;
40*9c942882SAbdelkader Boudih 	uint32_t	capabilities;
41*9c942882SAbdelkader Boudih };
42*9c942882SAbdelkader Boudih 
43*9c942882SAbdelkader Boudih #define	VIDEO_CAP_CAPTURE	0x00000001	/* V4L2_CAP_VIDEO_CAPTURE */
44*9c942882SAbdelkader Boudih #define	VIDEO_CAP_READWRITE	0x01000000	/* V4L2_CAP_READWRITE */
45*9c942882SAbdelkader Boudih #define	VIDEO_CAP_STREAMING	0x04000000	/* V4L2_CAP_STREAMING */
46*9c942882SAbdelkader Boudih 
47*9c942882SAbdelkader Boudih struct video_input {
48*9c942882SAbdelkader Boudih 	uint32_t	index;
49*9c942882SAbdelkader Boudih 	char		name[32];
50*9c942882SAbdelkader Boudih 	uint32_t	type;
51*9c942882SAbdelkader Boudih };
52*9c942882SAbdelkader Boudih 
53*9c942882SAbdelkader Boudih #define	VIDEO_INPUT_TYPE_CAMERA	2
54*9c942882SAbdelkader Boudih 
55*9c942882SAbdelkader Boudih struct video_control_desc {
56*9c942882SAbdelkader Boudih 	uint32_t	id;
57*9c942882SAbdelkader Boudih 	uint32_t	type;
58*9c942882SAbdelkader Boudih 	char		name[32];
59*9c942882SAbdelkader Boudih 	int32_t		minimum;
60*9c942882SAbdelkader Boudih 	int32_t		maximum;
61*9c942882SAbdelkader Boudih 	int32_t		step;
62*9c942882SAbdelkader Boudih 	int32_t		default_value;
63*9c942882SAbdelkader Boudih 	uint32_t	flags;
64*9c942882SAbdelkader Boudih };
65*9c942882SAbdelkader Boudih 
66*9c942882SAbdelkader Boudih struct video_control {
67*9c942882SAbdelkader Boudih 	uint32_t	id;
68*9c942882SAbdelkader Boudih 	int32_t		value;
69*9c942882SAbdelkader Boudih };
70*9c942882SAbdelkader Boudih 
71*9c942882SAbdelkader Boudih struct video_frmsizeenum {
72*9c942882SAbdelkader Boudih 	uint32_t	index;
73*9c942882SAbdelkader Boudih 	uint32_t	pixelformat;
74*9c942882SAbdelkader Boudih 	uint32_t	type;
75*9c942882SAbdelkader Boudih 	union {
76*9c942882SAbdelkader Boudih 		struct {
77*9c942882SAbdelkader Boudih 			uint32_t	width;
78*9c942882SAbdelkader Boudih 			uint32_t	height;
79*9c942882SAbdelkader Boudih 		} discrete;
80*9c942882SAbdelkader Boudih 		struct {
81*9c942882SAbdelkader Boudih 			uint32_t	min_width;
82*9c942882SAbdelkader Boudih 			uint32_t	max_width;
83*9c942882SAbdelkader Boudih 			uint32_t	step_width;
84*9c942882SAbdelkader Boudih 			uint32_t	min_height;
85*9c942882SAbdelkader Boudih 			uint32_t	max_height;
86*9c942882SAbdelkader Boudih 			uint32_t	step_height;
87*9c942882SAbdelkader Boudih 		} stepwise;
88*9c942882SAbdelkader Boudih 	};
89*9c942882SAbdelkader Boudih };
90*9c942882SAbdelkader Boudih 
91*9c942882SAbdelkader Boudih struct video_frmivalenum {
92*9c942882SAbdelkader Boudih 	uint32_t		index;
93*9c942882SAbdelkader Boudih 	uint32_t		pixelformat;
94*9c942882SAbdelkader Boudih 	uint32_t		width;
95*9c942882SAbdelkader Boudih 	uint32_t		height;
96*9c942882SAbdelkader Boudih 	uint32_t		type;
97*9c942882SAbdelkader Boudih 	union {
98*9c942882SAbdelkader Boudih 		struct video_fract	discrete;
99*9c942882SAbdelkader Boudih 		struct {
100*9c942882SAbdelkader Boudih 			struct video_fract	min;
101*9c942882SAbdelkader Boudih 			struct video_fract	max;
102*9c942882SAbdelkader Boudih 			struct video_fract	step;
103*9c942882SAbdelkader Boudih 		} stepwise;
104*9c942882SAbdelkader Boudih 	};
105*9c942882SAbdelkader Boudih };
106*9c942882SAbdelkader Boudih 
107*9c942882SAbdelkader Boudih int	video_register(device_t dev, struct video_device **vdp);
108*9c942882SAbdelkader Boudih void	video_unregister(struct video_device *vd);
109*9c942882SAbdelkader Boudih 
110*9c942882SAbdelkader Boudih struct video_buf	*video_buf_acquire(struct video_device *vd);
111*9c942882SAbdelkader Boudih int			 video_buf_write(struct video_buf *vb,
112*9c942882SAbdelkader Boudih 			    size_t offset, const void *src, size_t len);
113*9c942882SAbdelkader Boudih void			 video_buf_done(struct video_buf *vb,
114*9c942882SAbdelkader Boudih 			    size_t bytesused, uint32_t sequence);
115*9c942882SAbdelkader Boudih void			 video_buf_error(struct video_buf *vb);
116*9c942882SAbdelkader Boudih 
117*9c942882SAbdelkader Boudih #endif /* _DEV_VIDEO_VIDEO_H_ */
118