15#ifndef ZEPHYR_INCLUDE_VIDEO_H_
16#define ZEPHYR_INCLUDE_VIDEO_H_
482 if (dev ==
NULL || frmival ==
NULL) {
515 if (dev ==
NULL || frmival ==
NULL) {
617 return api->
dequeue(dev, buf, timeout);
646 return api->
flush(dev, cancel);
1124#define VIDEO_FOURCC(a, b, c, d) \
1125 ((uint32_t)(a) | ((uint32_t)(b) << 8) | ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24))
1136#define VIDEO_FOURCC_FROM_STR(str) VIDEO_FOURCC((str)[0], (str)[1], (str)[2], (str)[3])
1147#define VIDEO_FOURCC_TO_STR(fourcc) \
1149 (char)((fourcc) & 0xFF), \
1150 (char)(((fourcc) >> 8) & 0xFF), \
1151 (char)(((fourcc) >> 16) & 0xFF), \
1152 (char)(((fourcc) >> 24) & 0xFF), \
1177#define VIDEO_PIX_FMT_SBGGR8 VIDEO_FOURCC('B', 'A', '8', '1')
1186#define VIDEO_PIX_FMT_SGBRG8 VIDEO_FOURCC('G', 'B', 'R', 'G')
1195#define VIDEO_PIX_FMT_SGRBG8 VIDEO_FOURCC('G', 'R', 'B', 'G')
1204#define VIDEO_PIX_FMT_SRGGB8 VIDEO_FOURCC('R', 'G', 'G', 'B')
1213#define VIDEO_PIX_FMT_SBGGR10P VIDEO_FOURCC('p', 'B', 'A', 'A')
1222#define VIDEO_PIX_FMT_SGBRG10P VIDEO_FOURCC('p', 'G', 'A', 'A')
1231#define VIDEO_PIX_FMT_SGRBG10P VIDEO_FOURCC('p', 'g', 'A', 'A')
1240#define VIDEO_PIX_FMT_SRGGB10P VIDEO_FOURCC('p', 'R', 'A', 'A')
1249#define VIDEO_PIX_FMT_SBGGR12P VIDEO_FOURCC('p', 'B', 'C', 'C')
1258#define VIDEO_PIX_FMT_SGBRG12P VIDEO_FOURCC('p', 'G', 'C', 'C')
1267#define VIDEO_PIX_FMT_SGRBG12P VIDEO_FOURCC('p', 'g', 'C', 'C')
1276#define VIDEO_PIX_FMT_SRGGB12P VIDEO_FOURCC('p', 'R', 'C', 'C')
1285#define VIDEO_PIX_FMT_SBGGR14P VIDEO_FOURCC('p', 'B', 'E', 'E')
1294#define VIDEO_PIX_FMT_SGBRG14P VIDEO_FOURCC('p', 'G', 'E', 'E')
1303#define VIDEO_PIX_FMT_SGRBG14P VIDEO_FOURCC('p', 'g', 'E', 'E')
1312#define VIDEO_PIX_FMT_SRGGB14P VIDEO_FOURCC('p', 'R', 'E', 'E')
1320#define VIDEO_PIX_FMT_SBGGR10 VIDEO_FOURCC('B', 'G', '1', '0')
1328#define VIDEO_PIX_FMT_SGBRG10 VIDEO_FOURCC('G', 'B', '1', '0')
1336#define VIDEO_PIX_FMT_SGRBG10 VIDEO_FOURCC('B', 'A', '1', '0')
1344#define VIDEO_PIX_FMT_SRGGB10 VIDEO_FOURCC('R', 'G', '1', '0')
1352#define VIDEO_PIX_FMT_SBGGR12 VIDEO_FOURCC('B', 'G', '1', '2')
1360#define VIDEO_PIX_FMT_SGBRG12 VIDEO_FOURCC('G', 'B', '1', '2')
1368#define VIDEO_PIX_FMT_SGRBG12 VIDEO_FOURCC('B', 'A', '1', '2')
1376#define VIDEO_PIX_FMT_SRGGB12 VIDEO_FOURCC('R', 'G', '1', '2')
1384#define VIDEO_PIX_FMT_SBGGR14 VIDEO_FOURCC('B', 'G', '1', '4')
1392#define VIDEO_PIX_FMT_SGBRG14 VIDEO_FOURCC('G', 'B', '1', '4')
1400#define VIDEO_PIX_FMT_SGRBG14 VIDEO_FOURCC('G', 'R', '1', '4')
1408#define VIDEO_PIX_FMT_SRGGB14 VIDEO_FOURCC('R', 'G', '1', '4')
1416#define VIDEO_PIX_FMT_SBGGR16 VIDEO_FOURCC('B', 'Y', 'R', '2')
1424#define VIDEO_PIX_FMT_SGBRG16 VIDEO_FOURCC('G', 'B', '1', '6')
1432#define VIDEO_PIX_FMT_SGRBG16 VIDEO_FOURCC('G', 'R', '1', '6')
1440#define VIDEO_PIX_FMT_SRGGB16 VIDEO_FOURCC('R', 'G', '1', '6')
1467#define VIDEO_PIX_FMT_GREY VIDEO_FOURCC('G', 'R', 'E', 'Y')
1476#define VIDEO_PIX_FMT_Y4 VIDEO_FOURCC('Y', '0', '4', ' ')
1484#define VIDEO_PIX_FMT_Y10P VIDEO_FOURCC('Y', '1', '0', 'P')
1493#define VIDEO_PIX_FMT_Y12P VIDEO_FOURCC('Y', '1', '2', 'P')
1502#define VIDEO_PIX_FMT_Y14P VIDEO_FOURCC('Y', '1', '4', 'P')
1512#define VIDEO_PIX_FMT_Y10 VIDEO_FOURCC('Y', '1', '0', ' ')
1522#define VIDEO_PIX_FMT_Y12 VIDEO_FOURCC('Y', '1', '2', ' ')
1532#define VIDEO_PIX_FMT_Y14 VIDEO_FOURCC('Y', '1', '4', ' ')
1542#define VIDEO_PIX_FMT_Y16 VIDEO_FOURCC('Y', '1', '6', ' ')
1563#define VIDEO_PIX_FMT_RGB565X VIDEO_FOURCC('R', 'G', 'B', 'R')
1574#define VIDEO_PIX_FMT_RGB565 VIDEO_FOURCC('R', 'G', 'B', 'P')
1583#define VIDEO_PIX_FMT_BGR24 VIDEO_FOURCC('B', 'G', 'R', '3')
1592#define VIDEO_PIX_FMT_RGB24 VIDEO_FOURCC('R', 'G', 'B', '3')
1600#define VIDEO_PIX_FMT_ARGB32 VIDEO_FOURCC('B', 'A', '2', '4')
1608#define VIDEO_PIX_FMT_ABGR32 VIDEO_FOURCC('A', 'R', '2', '4')
1616#define VIDEO_PIX_FMT_RGBA32 VIDEO_FOURCC('A', 'B', '2', '4')
1624#define VIDEO_PIX_FMT_BGRA32 VIDEO_FOURCC('R', 'A', '2', '4')
1633#define VIDEO_PIX_FMT_XRGB32 VIDEO_FOURCC('B', 'X', '2', '4')
1653#define VIDEO_PIX_FMT_YUYV VIDEO_FOURCC('Y', 'U', 'Y', 'V')
1660#define VIDEO_PIX_FMT_YVYU VIDEO_FOURCC('Y', 'V', 'Y', 'U')
1667#define VIDEO_PIX_FMT_VYUY VIDEO_FOURCC('V', 'Y', 'U', 'Y')
1674#define VIDEO_PIX_FMT_UYVY VIDEO_FOURCC('U', 'Y', 'V', 'Y')
1683#define VIDEO_PIX_FMT_XYUV32 VIDEO_FOURCC('X', 'Y', 'U', 'V')
1692#define VIDEO_PIX_FMT_YUV24 VIDEO_FOURCC('Y', 'U', 'V', '3')
1719#define VIDEO_PIX_FMT_NV12 VIDEO_FOURCC('N', 'V', '1', '2')
1743#define VIDEO_PIX_FMT_NV21 VIDEO_FOURCC('N', 'V', '2', '1')
1769#define VIDEO_PIX_FMT_NV16 VIDEO_FOURCC('N', 'V', '1', '6')
1796#define VIDEO_PIX_FMT_NV61 VIDEO_FOURCC('N', 'V', '6', '1')
1822#define VIDEO_PIX_FMT_NV24 VIDEO_FOURCC('N', 'V', '2', '4')
1848#define VIDEO_PIX_FMT_NV42 VIDEO_FOURCC('N', 'V', '4', '2')
1877#define VIDEO_PIX_FMT_YUV420 VIDEO_FOURCC('Y', 'U', '1', '2')
1906#define VIDEO_PIX_FMT_YVU420 VIDEO_FOURCC('Y', 'V', '1', '2')
1920#define VIDEO_PIX_FMT_JPEG VIDEO_FOURCC('J', 'P', 'E', 'G')
1925#define VIDEO_PIX_FMT_H264 VIDEO_FOURCC('H', '2', '6', '4')
1930#define VIDEO_PIX_FMT_H264_NO_SC VIDEO_FOURCC('A', 'V', 'C', '1')
1935#define VIDEO_PIX_FMT_PNG VIDEO_FOURCC('P', 'N', 'G', ' ')
2044#define VIDEO_MIPI_CSI2_DT_NULL 0x10
2046#define VIDEO_MIPI_CSI2_DT_BLANKING 0x11
2048#define VIDEO_MIPI_CSI2_DT_EMBEDDED_8 0x12
2050#define VIDEO_MIPI_CSI2_DT_YUV420_8 0x18
2052#define VIDEO_MIPI_CSI2_DT_YUV420_10 0x19
2054#define VIDEO_MIPI_CSI2_DT_YUV420_CSPS_8 0x1c
2056#define VIDEO_MIPI_CSI2_DT_YUV420_CSPS_10 0x1d
2058#define VIDEO_MIPI_CSI2_DT_YUV422_8 0x1e
2060#define VIDEO_MIPI_CSI2_DT_YUV422_10 0x1f
2062#define VIDEO_MIPI_CSI2_DT_RGB444 0x20
2064#define VIDEO_MIPI_CSI2_DT_RGB555 0x21
2066#define VIDEO_MIPI_CSI2_DT_RGB565 0x22
2068#define VIDEO_MIPI_CSI2_DT_RGB666 0x23
2070#define VIDEO_MIPI_CSI2_DT_RGB888 0x24
2072#define VIDEO_MIPI_CSI2_DT_RAW6 0x28
2074#define VIDEO_MIPI_CSI2_DT_RAW7 0x29
2076#define VIDEO_MIPI_CSI2_DT_RAW8 0x2a
2078#define VIDEO_MIPI_CSI2_DT_RAW10 0x2b
2080#define VIDEO_MIPI_CSI2_DT_RAW12 0x2c
2082#define VIDEO_MIPI_CSI2_DT_RAW14 0x2d
2095#define VIDEO_MIPI_CSI2_DT_USER(n) (0x30 + (n))
#define NSEC_PER_SEC
number of nanoseconds per second
Definition clock.h:113
#define EINVAL
Invalid argument.
Definition errno.h:60
#define ENOSYS
Function not implemented.
Definition errno.h:82
int(* video_api_enum_frmival_t)(const struct device *dev, struct video_frmival_enum *fie)
List all supported frame intervals of a given format.
Definition video.h:297
int(* video_api_get_caps_t)(const struct device *dev, struct video_caps *caps)
Get capabilities of a video endpoint.
Definition video.h:355
int(* video_api_transform_cap_t)(const struct device *const dev, const struct video_format_cap *const cap, struct video_format_cap *const res_cap, enum video_buf_type type, uint16_t ind)
Function pointer type for transforming a video_format_cap from one end to the other end of a m2m vide...
Definition video.h:364
video_signal_result
Video signal result.
Definition video.h:221
static int video_transform_cap(const struct device *const dev, const struct video_format_cap *const cap, struct video_format_cap *const res_cap, enum video_buf_type type, uint16_t ind)
Transform a video format capability from one end to the other end of a m2m video device.
Definition video.h:773
struct video_buffer * video_buffer_aligned_alloc(size_t size, size_t align, k_timeout_t timeout)
Allocate aligned video buffer.
int video_set_ctrl(const struct device *dev, struct video_control *control)
Set the value of a control.
static int video_set_selection(const struct device *dev, struct video_selection *sel)
Set video selection (crop/compose).
Definition video.h:905
void video_print_ctrl(const struct video_ctrl_query *const cq)
Print all the information of a control.
int64_t video_get_csi_link_freq(const struct device *dev, uint8_t bpp, uint8_t lane_nb)
Return the link-frequency advertised by a device.
int(* video_api_dequeue_t)(const struct device *dev, struct video_buffer **buf, k_timeout_t timeout)
Dequeue a buffer from the driver’s outgoing queue.
Definition video.h:313
static int video_dequeue(const struct device *dev, struct video_buffer **buf, k_timeout_t timeout)
Dequeue a video buffer.
Definition video.h:603
int video_transfer_buffer(const struct device *src, const struct device *sink, enum video_buf_type src_type, enum video_buf_type sink_type, k_timeout_t timeout)
Transfer a buffer between 2 video device.
int(* video_api_ctrl_t)(const struct device *dev, uint32_t cid)
Set/Get a video control value.
Definition video.h:347
video_frmival_type
Supported frame interval type of a video device.
Definition video.h:164
static uint64_t video_frmival_nsec(const struct video_frmival *frmival)
Compute the difference between two frame intervals.
Definition video.h:1002
int video_get_ctrl(const struct device *dev, struct video_control *control)
Get the current value of a control.
int video_estimate_fmt_size(struct video_format *fmt)
Estimate the size and pitch in bytes of a video_format.
static int video_enum_frmival(const struct device *dev, struct video_frmival_enum *fie)
List video frame intervals.
Definition video.h:544
static int video_stream_start(const struct device *dev, enum video_buf_type type)
Start the video device function.
Definition video.h:665
int video_query_ctrl(struct video_ctrl_query *cq)
Query information about a control.
static int video_get_caps(const struct device *dev, struct video_caps *caps)
Get the capabilities of a video endpoint.
Definition video.h:722
static int video_get_selection(const struct device *dev, struct video_selection *sel)
Get video selection (crop/compose).
Definition video.h:938
int(* video_api_format_t)(const struct device *dev, struct video_format *fmt)
Function pointer type for video_set/get_format()
Definition video.h:281
int(* video_api_flush_t)(const struct device *dev, bool cancel)
Flush endpoint buffers, buffer are moved from incoming queue to outgoing queue.
Definition video.h:323
int video_set_compose_format(const struct device *dev, struct video_format *fmt)
Set compose rectangle (if applicable) prior to setting format.
static int video_flush(const struct device *dev, bool cancel)
Flush endpoint buffers.
Definition video.h:633
static int video_stream_stop(const struct device *dev, enum video_buf_type type)
Stop the video device function.
Definition video.h:694
int(* video_api_selection_t)(const struct device *dev, struct video_selection *sel)
Get/Set video selection (crop / compose)
Definition video.h:383
static int video_set_format(const struct device *dev, struct video_format *fmt)
Set video format.
Definition video.h:420
static int video_set_signal(const struct device *dev, struct k_poll_signal *sig)
Register/Unregister k_poll signal for a video endpoint.
Definition video.h:870
static int video_set_frmival(const struct device *dev, struct video_frmival *frmival)
Set video frame interval.
Definition video.h:478
static int video_enqueue(const struct device *dev, struct video_buffer *buf)
Enqueue a video buffer.
Definition video.h:573
int(* video_api_set_stream_t)(const struct device *dev, bool enable, enum video_buf_type type)
Start or stop streaming on the video device.
Definition video.h:337
void video_closest_frmival_stepwise(const struct video_frmival_stepwise *stepwise, const struct video_frmival *desired, struct video_frmival *match)
Find the closest match to a frame interval value within a stepwise frame interval.
void video_buffer_release(struct video_buffer *buf)
Release a video buffer.
video_buf_type
video_buf_type enum
Definition video.h:47
static int video_get_format(const struct device *dev, struct video_format *fmt)
Get video format.
Definition video.h:446
int(* video_api_set_signal_t)(const struct device *dev, struct k_poll_signal *sig)
Register/Unregister poll signal for buffer events.
Definition video.h:375
int video_format_caps_index(const struct video_format_cap *fmts, const struct video_format *fmt, size_t *idx)
Search for a format that matches in a list of capabilities.
video_selection_target
Video selection target.
Definition video.h:232
int(* video_api_enqueue_t)(const struct device *dev, struct video_buffer *buf)
Enqueue a buffer in the driver’s incoming queue.
Definition video.h:305
struct video_buffer * video_buffer_alloc(size_t size, k_timeout_t timeout)
Allocate video buffer.
void video_closest_frmival(const struct device *dev, struct video_frmival_enum *match)
Find the closest match to a frame interval value within a video device.
static int video_get_frmival(const struct device *dev, struct video_frmival *frmival)
Get video frame interval.
Definition video.h:511
int(* video_api_frmival_t)(const struct device *dev, struct video_frmival *frmival)
Function pointer type for video_set/get_frmival()
Definition video.h:289
@ VIDEO_BUF_ABORTED
Buffer is aborted.
Definition video.h:223
@ VIDEO_BUF_DONE
Buffer is done.
Definition video.h:222
@ VIDEO_BUF_ERROR
Buffer is in error.
Definition video.h:224
@ VIDEO_FRMIVAL_TYPE_DISCRETE
discrete frame interval type
Definition video.h:166
@ VIDEO_FRMIVAL_TYPE_STEPWISE
stepwise frame interval type
Definition video.h:168
@ VIDEO_BUF_TYPE_INPUT
input buffer type
Definition video.h:49
@ VIDEO_BUF_TYPE_OUTPUT
output buffer type
Definition video.h:51
@ VIDEO_SEL_TGT_COMPOSE_BOUND
Compose bound (aka the maximum compose achievable)
Definition video.h:242
@ VIDEO_SEL_TGT_COMPOSE
Current compose setting.
Definition video.h:240
@ VIDEO_SEL_TGT_NATIVE_SIZE
Native size of the input frame.
Definition video.h:238
@ VIDEO_SEL_TGT_CROP
Current crop setting.
Definition video.h:234
@ VIDEO_SEL_TGT_CROP_BOUND
Crop bound (aka the maximum crop achievable)
Definition video.h:236
#define NULL
Definition iar_missing_defs.h:20
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
__INT64_TYPE__ int64_t
Definition stdint.h:75
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
Kernel timeout type.
Definition clock.h:65
Video buffer structure.
Definition video.h:134
uint32_t bytesused
number of bytes occupied by the valid data in the buffer.
Definition video.h:147
uint32_t size
size of the buffer in bytes.
Definition video.h:145
enum video_buf_type type
type of the buffer
Definition video.h:139
uint8_t * buffer
pointer to the start of the buffer.
Definition video.h:141
void * driver_data
Pointer to driver specific data.
Definition video.h:137
uint16_t line_offset
Line offset within frame this buffer represents, from the beginning of the frame.
Definition video.h:158
uint8_t index
index of the buffer, optionally set by the application
Definition video.h:143
uint32_t timestamp
time reference in milliseconds at which the last data byte was actually received for input endpoints ...
Definition video.h:152
Video format capabilities.
Definition video.h:116
uint8_t min_vbuf_count
minimal count of video buffers to enqueue before being able to start the stream.
Definition video.h:124
enum video_buf_type type
type of the buffer
Definition video.h:118
size_t buf_align
requirement on the buffer alignment, in bytes
Definition video.h:126
const struct video_format_cap * format_caps
list of video format capabilities (zero terminated).
Definition video.h:120
Video control structure.
Definition video-controls.h:445
Definition video-controls.h:492
const struct device * dev
device being queried, application needs to set this field
Definition video-controls.h:494
video_api_transform_cap_t transform_cap
Transform capability from one end to the other end of an m2m device.
Definition video.h:404
video_api_format_t set_format
Definition video.h:387
video_api_ctrl_t set_ctrl
Definition video.h:395
video_api_enqueue_t enqueue
Definition video.h:392
video_api_set_signal_t set_signal
Definition video.h:397
video_api_enum_frmival_t enum_frmival
Definition video.h:400
video_api_get_caps_t get_caps
Definition video.h:390
video_api_selection_t get_selection
Definition video.h:402
video_api_selection_t set_selection
Definition video.h:401
video_api_format_t get_format
Definition video.h:388
video_api_flush_t flush
Definition video.h:394
video_api_dequeue_t dequeue
Definition video.h:393
video_api_frmival_t get_frmival
Definition video.h:399
video_api_frmival_t set_frmival
Definition video.h:398
video_api_set_stream_t set_stream
Definition video.h:389
video_api_ctrl_t get_volatile_ctrl
Definition video.h:396
Video frame interval enumeration structure.
Definition video.h:202
uint32_t index
frame interval index during enumeration
Definition video.h:204
const struct video_format * format
video format for which the query is made
Definition video.h:206
struct video_frmival_stepwise stepwise
Definition video.h:212
enum video_frmival_type type
frame interval type the device supports
Definition video.h:208
struct video_frmival discrete
Definition video.h:211
Video frame interval stepwise structure.
Definition video.h:188
struct video_frmival min
minimum frame interval in seconds
Definition video.h:190
struct video_frmival max
maximum frame interval in seconds
Definition video.h:192
struct video_frmival step
frame interval step size in seconds
Definition video.h:194
Video frame interval structure.
Definition video.h:176
uint32_t numerator
numerator of the frame interval
Definition video.h:178
uint32_t denominator
denominator of the frame interval
Definition video.h:180
Description of a rectangle area.
Definition video.h:250
uint32_t width
width of selection rectangle
Definition video.h:256
uint32_t height
height of selection rectangle
Definition video.h:258
uint32_t top
top offset of selection rectangle
Definition video.h:254
uint32_t left
left offset of selection rectangle
Definition video.h:252
Video selection (crop / compose) structure.
Definition video.h:266
struct video_rect rect
selection target rectangle
Definition video.h:272
enum video_buf_type type
buffer type, allow to select for device having both input and output
Definition video.h:268
enum video_selection_target target
selection target enum
Definition video.h:270