| VIDEO(9) | Kernel Developer's Manual | VIDEO(9) | 
video —
#include <dev/video_if.h>
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;
};
NULL if not needed.
int
    open(void *hdl, int flags)void
    close(void *hdl)const
    char * get_devname(void *hdl)int
    enum_format(void *hdl, uint32_t index, struct video_format
    *format);int
    get_format(void *hdl, struct video_format *format)int
    set_format(void *hdl, struct video_format *format)int
    try_format(void *hdl, struct video_format *format)int
    start_transfer(void *hdl)video_submit_payload().int
    stop_transfer(void *hdl)int
    control_iter_init(void *hdl, struct video_control_iter *)int
    control_iter_next(void *hdl, struct video_control_iter *)int
    get_control_group(void *hdl, struct video_control_group *)int
    set_control_group(void *hdl, struct video_control_group *)| July 24, 2008 | NetBSD 10.0 |