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