| VIDEO(9) | Kernel Developer's Manual | VIDEO(9) | 
device_t
video_attach_mi(const struct video_hw_if *hw_if, device_t hw_dev);
void
video_submit_payload(device_t vl_dev, const struct video_payload *payload);
The high level video driver attaches to the low level driver when the latter calls video_attach_mi. The video_hw_if struct is as shown below. dev is the device struct for the hardware device. Return value is the video layer device.
struct video_hw_if { 
	int	(*open)(void *, int); /* open hardware */ 
	void	(*close)(void *);     /* close hardware */ 
 
	const char *	(*get_devname)(void *); 
 
	int	(*enum_format)(void *, uint32_t, struct video_format *); 
	int	(*get_format)(void *, struct video_format *); 
	int	(*set_format)(void *, struct video_format *); 
	int	(*try_format)(void *, struct video_format *); 
 
	int	(*start_transfer)(void *); 
	int	(*stop_transfer)(void *); 
 
	int	(*control_iter_init)(void *, struct video_control_iter *); 
	int	(*control_iter_next)(void *, struct video_control_iter *); 
	int	(*get_control_desc_group)(void *, 
					  struct video_control_desc_group *); 
	int	(*get_control_group)(void *, struct video_control_group *); 
	int	(*set_control_group)(void *, const struct video_control_group *); 
};
The upper layer of the video driver allocates buffers for video samples. The hardware driver submits data to the video layer with video_submit_payload. vl_dev is the video layer device returned by video_attach_mi.
struct video_payload { 
	const uint8_t	*data; 
	size_t		size; 
	int		frameno; 
	bool		end_of_frame; 
};
| July 24, 2008 | NetBSD 6.1 |