Zephyr API Documentation  3.5.0
A Scalable Open Source RTOS
3.5.0
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
video.h
Go to the documentation of this file.
1
7/*
8 * Copyright (c) 2019 Linaro Limited.
9 *
10 * SPDX-License-Identifier: Apache-2.0
11 */
12#ifndef ZEPHYR_INCLUDE_VIDEO_H_
13#define ZEPHYR_INCLUDE_VIDEO_H_
14
22#include <zephyr/device.h>
23#include <stddef.h>
24#include <zephyr/kernel.h>
25
26#include <zephyr/types.h>
27
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34
56};
57
58
80};
81
88struct video_caps {
95};
96
117};
118
129};
130
140};
141
148typedef int (*video_api_set_format_t)(const struct device *dev,
149 enum video_endpoint_id ep,
150 struct video_format *fmt);
151
158typedef int (*video_api_get_format_t)(const struct device *dev,
159 enum video_endpoint_id ep,
160 struct video_format *fmt);
161
168typedef int (*video_api_enqueue_t)(const struct device *dev,
169 enum video_endpoint_id ep,
170 struct video_buffer *buf);
171
178typedef int (*video_api_dequeue_t)(const struct device *dev,
179 enum video_endpoint_id ep,
180 struct video_buffer **buf,
181 k_timeout_t timeout);
182
190typedef int (*video_api_flush_t)(const struct device *dev,
191 enum video_endpoint_id ep,
192 bool cancel);
193
200typedef int (*video_api_stream_start_t)(const struct device *dev);
201
208typedef int (*video_api_stream_stop_t)(const struct device *dev);
209
216typedef int (*video_api_set_ctrl_t)(const struct device *dev,
217 unsigned int cid,
218 void *value);
219
226typedef int (*video_api_get_ctrl_t)(const struct device *dev,
227 unsigned int cid,
228 void *value);
229
236typedef int (*video_api_get_caps_t)(const struct device *dev,
237 enum video_endpoint_id ep,
238 struct video_caps *caps);
239
246typedef int (*video_api_set_signal_t)(const struct device *dev,
247 enum video_endpoint_id ep,
248 struct k_poll_signal *signal);
249
251 /* mandatory callbacks */
257 /* optional callbacks */
264};
265
280static inline int video_set_format(const struct device *dev,
281 enum video_endpoint_id ep,
282 struct video_format *fmt)
283{
284 const struct video_driver_api *api =
285 (const struct video_driver_api *)dev->api;
286
287 if (api->set_format == NULL) {
288 return -ENOSYS;
289 }
290
291 return api->set_format(dev, ep, fmt);
292}
293
305static inline int video_get_format(const struct device *dev,
306 enum video_endpoint_id ep,
307 struct video_format *fmt)
308{
309 const struct video_driver_api *api =
310 (const struct video_driver_api *)dev->api;
311
312 if (api->get_format == NULL) {
313 return -ENOSYS;
314 }
315
316 return api->get_format(dev, ep, fmt);
317}
318
333static inline int video_enqueue(const struct device *dev,
334 enum video_endpoint_id ep,
335 struct video_buffer *buf)
336{
337 const struct video_driver_api *api =
338 (const struct video_driver_api *)dev->api;
339
340 if (api->enqueue == NULL) {
341 return -ENOSYS;
342 }
343
344 return api->enqueue(dev, ep, buf);
345}
346
362static inline int video_dequeue(const struct device *dev,
363 enum video_endpoint_id ep,
364 struct video_buffer **buf,
365 k_timeout_t timeout)
366{
367 const struct video_driver_api *api =
368 (const struct video_driver_api *)dev->api;
369
370 if (api->dequeue == NULL) {
371 return -ENOSYS;
372 }
373
374 return api->dequeue(dev, ep, buf, timeout);
375}
376
377
392static inline int video_flush(const struct device *dev,
393 enum video_endpoint_id ep,
394 bool cancel)
395{
396 const struct video_driver_api *api =
397 (const struct video_driver_api *)dev->api;
398
399 if (api->flush == NULL) {
400 return -ENOSYS;
401 }
402
403 return api->flush(dev, ep, cancel);
404}
405
418static inline int video_stream_start(const struct device *dev)
419{
420 const struct video_driver_api *api =
421 (const struct video_driver_api *)dev->api;
422
423 if (api->stream_start == NULL) {
424 return -ENOSYS;
425 }
426
427 return api->stream_start(dev);
428}
429
439static inline int video_stream_stop(const struct device *dev)
440{
441 const struct video_driver_api *api =
442 (const struct video_driver_api *)dev->api;
443 int ret;
444
445 if (api->stream_stop == NULL) {
446 return -ENOSYS;
447 }
448
449 ret = api->stream_stop(dev);
450 video_flush(dev, VIDEO_EP_ANY, true);
451
452 return ret;
453}
454
464static inline int video_get_caps(const struct device *dev,
465 enum video_endpoint_id ep,
466 struct video_caps *caps)
467{
468 const struct video_driver_api *api =
469 (const struct video_driver_api *)dev->api;
470
471 if (api->get_caps == NULL) {
472 return -ENOSYS;
473 }
474
475 return api->get_caps(dev, ep, caps);
476}
477
493static inline int video_set_ctrl(const struct device *dev, unsigned int cid,
494 void *value)
495{
496 const struct video_driver_api *api =
497 (const struct video_driver_api *)dev->api;
498
499 if (api->set_ctrl == NULL) {
500 return -ENOSYS;
501 }
502
503 return api->set_ctrl(dev, cid, value);
504}
505
521static inline int video_get_ctrl(const struct device *dev, unsigned int cid,
522 void *value)
523{
524 const struct video_driver_api *api =
525 (const struct video_driver_api *)dev->api;
526
527 if (api->get_ctrl == NULL) {
528 return -ENOSYS;
529 }
530
531 return api->get_ctrl(dev, cid, value);
532}
533
547static inline int video_set_signal(const struct device *dev,
548 enum video_endpoint_id ep,
549 struct k_poll_signal *signal)
550{
551 const struct video_driver_api *api =
552 (const struct video_driver_api *)dev->api;
553
554 if (api->set_signal == NULL) {
555 return -ENOSYS;
556 }
557
558 return api->set_signal(dev, ep, signal);
559}
560
569
576
577
578/* fourcc - four-character-code */
579#define video_fourcc(a, b, c, d)\
580 ((uint32_t)(a) | ((uint32_t)(b) << 8) | ((uint32_t)(c) << 16) | ((uint32_t)(d) << 24))
581
582
594#define VIDEO_PIX_FMT_BGGR8 video_fourcc('B', 'G', 'G', 'R') /* 8 BGBG.. GRGR.. */
596#define VIDEO_PIX_FMT_GBRG8 video_fourcc('G', 'B', 'R', 'G') /* 8 GBGB.. RGRG.. */
598#define VIDEO_PIX_FMT_GRBG8 video_fourcc('G', 'R', 'B', 'G') /* 8 GRGR.. BGBG.. */
600#define VIDEO_PIX_FMT_RGGB8 video_fourcc('R', 'G', 'G', 'B') /* 8 RGRG.. GBGB.. */
601
612#define VIDEO_PIX_FMT_RGB565 video_fourcc('R', 'G', 'B', 'P') /* 16 RGB-5-6-5 */
613
624#define VIDEO_PIX_FMT_YUYV video_fourcc('Y', 'U', 'Y', 'V') /* 16 Y0-Cb0 Y1-Cr0 */
625
637#define VIDEO_PIX_FMT_JPEG video_fourcc('J', 'P', 'E', 'G') /* 8 JPEG */
638
647#ifdef __cplusplus
648}
649#endif
650
655#endif /* ZEPHYR_INCLUDE_VIDEO_H_ */
#define ENOSYS
Function not implemented.
Definition: errno.h:83
int(* video_api_stream_start_t)(const struct device *dev)
Start the capture or output process.
Definition: video.h:200
int(* video_api_set_format_t)(const struct device *dev, enum video_endpoint_id ep, struct video_format *fmt)
Set video format.
Definition: video.h:148
video_signal_result
video_event enum
Definition: video.h:136
int(* video_api_enqueue_t)(const struct device *dev, enum video_endpoint_id ep, struct video_buffer *buf)
Enqueue a buffer in the driver’s incoming queue.
Definition: video.h:168
int(* video_api_set_signal_t)(const struct device *dev, enum video_endpoint_id ep, struct k_poll_signal *signal)
Register/Unregister poll signal for buffer events.
Definition: video.h:246
int(* video_api_stream_stop_t)(const struct device *dev)
Stop the capture or output process.
Definition: video.h:208
int(* video_api_get_format_t)(const struct device *dev, enum video_endpoint_id ep, struct video_format *fmt)
Get current video format.
Definition: video.h:158
static int video_get_caps(const struct device *dev, enum video_endpoint_id ep, struct video_caps *caps)
Get the capabilities of a video endpoint.
Definition: video.h:464
static int video_stream_stop(const struct device *dev)
Stop the video device function.
Definition: video.h:439
static int video_get_ctrl(const struct device *dev, unsigned int cid, void *value)
Get the current value of a control.
Definition: video.h:521
static int video_stream_start(const struct device *dev)
Start the video device function.
Definition: video.h:418
struct video_buffer * video_buffer_alloc(size_t size)
Allocate video buffer.
static int video_set_ctrl(const struct device *dev, unsigned int cid, void *value)
Set the value of a control.
Definition: video.h:493
int(* video_api_flush_t)(const struct device *dev, enum video_endpoint_id ep, bool cancel)
Flush endpoint buffers, buffer are moved from incoming queue to outgoing queue.
Definition: video.h:190
int(* video_api_get_caps_t)(const struct device *dev, enum video_endpoint_id ep, struct video_caps *caps)
Get capabilities of a video endpoint.
Definition: video.h:236
static int video_dequeue(const struct device *dev, enum video_endpoint_id ep, struct video_buffer **buf, k_timeout_t timeout)
Dequeue a video buffer.
Definition: video.h:362
int(* video_api_dequeue_t)(const struct device *dev, enum video_endpoint_id ep, struct video_buffer **buf, k_timeout_t timeout)
Dequeue a buffer from the driver’s outgoing queue.
Definition: video.h:178
static int video_set_signal(const struct device *dev, enum video_endpoint_id ep, struct k_poll_signal *signal)
Register/Unregister k_poll signal for a video endpoint.
Definition: video.h:547
static int video_get_format(const struct device *dev, enum video_endpoint_id ep, struct video_format *fmt)
Get video format.
Definition: video.h:305
static int video_enqueue(const struct device *dev, enum video_endpoint_id ep, struct video_buffer *buf)
Enqueue a video buffer.
Definition: video.h:333
void video_buffer_release(struct video_buffer *buf)
Release a video buffer.
int(* video_api_get_ctrl_t)(const struct device *dev, unsigned int cid, void *value)
Get a video control value.
Definition: video.h:226
static int video_set_format(const struct device *dev, enum video_endpoint_id ep, struct video_format *fmt)
Set video format.
Definition: video.h:280
static int video_flush(const struct device *dev, enum video_endpoint_id ep, bool cancel)
Flush endpoint buffers.
Definition: video.h:392
video_endpoint_id
video_endpoint_id enum
Definition: video.h:124
int(* video_api_set_ctrl_t)(const struct device *dev, unsigned int cid, void *value)
Set a video control value.
Definition: video.h:216
@ VIDEO_BUF_ABORTED
Definition: video.h:138
@ VIDEO_BUF_DONE
Definition: video.h:137
@ VIDEO_BUF_ERROR
Definition: video.h:139
@ VIDEO_EP_IN
Definition: video.h:127
@ VIDEO_EP_NONE
Definition: video.h:125
@ VIDEO_EP_ANY
Definition: video.h:126
@ VIDEO_EP_OUT
Definition: video.h:128
Public kernel APIs.
__UINT32_TYPE__ uint32_t
Definition: stdint.h:90
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINT16_TYPE__ uint16_t
Definition: stdint.h:89
Runtime device structure (in ROM) per driver instance.
Definition: device.h:381
const void * api
Address of the API structure exposed by the device instance.
Definition: device.h:387
Definition: kernel.h:5627
Kernel timeout type.
Definition: sys_clock.h:65
Video buffer structure.
Definition: video.h:103
uint32_t bytesused
number of bytes occupied by the valid data in the buffer.
Definition: video.h:111
uint32_t size
size of the buffer in bytes.
Definition: video.h:109
uint8_t * buffer
pointer to the start of the buffer.
Definition: video.h:107
void * driver_data
pointer to driver specific data.
Definition: video.h:105
uint32_t timestamp
time reference in milliseconds at which the last data byte was actually received for input endpoints ...
Definition: video.h:116
Video format capabilities.
Definition: video.h:88
uint8_t min_vbuf_count
minimal count of video buffers to enqueue before being able to start the stream.
Definition: video.h:94
const struct video_format_cap * format_caps
list of video format capabilities (zero terminated).
Definition: video.h:90
Definition: video.h:250
video_api_stream_stop_t stream_stop
Definition: video.h:255
video_api_set_ctrl_t set_ctrl
Definition: video.h:261
video_api_stream_start_t stream_start
Definition: video.h:254
video_api_set_ctrl_t get_ctrl
Definition: video.h:262
video_api_enqueue_t enqueue
Definition: video.h:258
video_api_set_signal_t set_signal
Definition: video.h:263
video_api_get_format_t get_format
Definition: video.h:253
video_api_get_caps_t get_caps
Definition: video.h:256
video_api_set_format_t set_format
Definition: video.h:252
video_api_flush_t flush
Definition: video.h:260
video_api_dequeue_t dequeue
Definition: video.h:259
Video format capability.
Definition: video.h:65
uint16_t height_step
height step size in pixels.
Definition: video.h:79
uint32_t width_min
minimum supported frame width in pixels.
Definition: video.h:69
uint32_t width_max
maximum supported frame width in pixels.
Definition: video.h:71
uint16_t width_step
width step size in pixels.
Definition: video.h:77
uint32_t height_max
maximum supported frame height in pixels.
Definition: video.h:75
uint32_t height_min
minimum supported frame height in pixels.
Definition: video.h:73
uint32_t pixelformat
FourCC pixel format value (Video pixel formats).
Definition: video.h:67
Video format structure.
Definition: video.h:41
uint32_t height
frame height in pixels.
Definition: video.h:47
uint32_t width
frame width in pixels.
Definition: video.h:45
uint32_t pitch
line stride.
Definition: video.h:55
uint32_t pixelformat
FourCC pixel format value (Video pixel formats)
Definition: video.h:43
Public APIs for Video.