.. zephyr:code-sample:: video-capture
:name: Video capture
:relevant-api: video_interface
Use the video API to retrieve video frames from a capture device.
Description
***********
This sample application uses the :ref:`video_api` to capture frames from a video capture
device then uses the :ref:`display_api` to display them onto an LCD screen (if any).
Requirements
************
This sample needs a video capture device (e.g. a camera) but it is not mandatory.
Supported boards and camera modules include:
- `Camera iMXRT`_
- :zephyr:board:`mimxrt1064_evk`
with a `MT9M114 camera module`_
- :zephyr:board:`mimxrt1170_evk`
with an `OV5640 camera module`_
- :zephyr:board:`frdm_mcxn947`
with any ``arducam,dvp-20pin-connector`` camera module such as :ref:`dvp_20pin_ov7670`.
- :zephyr:board:`stm32h7b3i_dk`
with the :ref:`st_b_cams_omv_mb1683` shield and a compatible camera module.
Also :zephyr:board:`arduino_nicla_vision` can be used in this sample as capture device, in that case
The user can transfer the captured frames through on board USB.
Wiring
******
On :zephyr:board:`mimxrt1064_evk`, the MT9M114 camera module should be plugged in the
J35 camera connector. A USB cable should be connected from a host to the micro
USB debug connector (J41) in order to get console output via the freelink interface.
On :zephyr:board:`mimxrt1170_evk`, the OV5640 camera module should be plugged into the
J2 camera connector. A USB cable should be connected from a host to the micro
USB debug connector (J11) in order to get console output via the daplink interface.
On :zephyr:board:`stm32h7b3i_dk`, connect the :ref:`st_b_cams_omv_mb1683` shield to the
board on CN7 connector. A USB cable should be connected from a host to the micro USB
connector in order to get console output.
For :zephyr:board:`arduino_nicla_vision` there is no extra wiring required.
Building and Running
********************
For :zephyr:board:`mimxrt1064_evk`, build this sample application with the following commands:
.. zephyr-app-commands::
:zephyr-app: samples/drivers/video/capture
:board: mimxrt1064_evk
:shield: dvp_fpc24_mt9m114,rk043fn66hs_ctg
:goals: build
:compact:
For :zephyr:board:`mimxrt1170_evk`, build this sample application with the following commands:
.. zephyr-app-commands::
:zephyr-app: samples/drivers/video/capture
:board: mimxrt1170_evk/mimxrt1176/cm7
:shield: nxp_btb44_ov5640,rk055hdmipi4ma0
:goals: build
:compact:
For :zephyr:board:`arduino_nicla_vision`, build this sample application with the following
commands:
.. zephyr-app-commands::
:zephyr-app: samples/drivers/video/capture
:board: arduino_nicla_vision/stm32h747xx/m7
:goals: build
:compact:
For :zephyr:board:`frdm_mcxn947`, build this sample application with the following commands,
using the :ref:`dvp_20pin_ov7670` and :ref:`lcd_par_s035` connected to the board:
.. zephyr-app-commands::
:zephyr-app: samples/drivers/video/capture
:board: frdm_mcxn947/mcxn947/cpu0
:shield: dvp_20pin_ov7670,lcd_par_s035_8080
:goals: build
:compact:
For :zephyr:board:`stm32h7b3i_dk`, build this sample application with the following commands,
using the :ref:`st_b_cams_omv_mb1683` shield with a compatible camera module:
.. zephyr-app-commands::
:zephyr-app: samples/drivers/video/capture
:board: stm32h7b3i_dk
:shield: st_b_cams_omv_mb1683
:goals: build
:compact:
For testing purpose and without the need of any real video capture and/or display hardwares,
a video software pattern generator is supported by the above build commands without
specifying the shields, and using :ref:`snippet-video-sw-generator`:
.. zephyr-app-commands::
:zephyr-app: samples/drivers/video/capture
:board: native_sim/native/64
:snippets: video-sw-generator
:goals: build
:compact:
For controlling the camera device using shell commands instead of continuously capturing the data,
append ``-DCONFIG_VIDEO_SHELL=y`` to the build command:
.. zephyr-app-commands::
:zephyr-app: samples/drivers/video/capture
:board: mimxrt1064_evk
:shield: dvp_fpc24_mt9m114,rk043fn66hs_ctg
:gen-args: -DCONFIG_VIDEO_SHELL=y
:goals: build
:compact:
For :zephyr:board:`stm32h7b3i_dk` with shell commands:
.. zephyr-app-commands::
:zephyr-app: samples/drivers/video/capture
:board: stm32h7b3i_dk
:shield: st_b_cams_omv_mb1683
:gen-args: -DCONFIG_VIDEO_SHELL=y
:goals: build
:compact:
Sample Output
=============
.. code-block:: console
Video device: csi@402bc000
- Capabilities:
RGBP width [480; 480; 0] height [272; 272; 0]
YUYV width [480; 480; 0] height [272; 272; 0]
RGBP width [640; 640; 0] height [480; 480; 0]
YUYV width [640; 640; 0] height [480; 480; 0]
RGBP width [1280; 1280; 0] height [720; 720; 0]
YUYV width [1280; 1280; 0] height [720; 720; 0]
- Default format: RGBP 480x272
Display device: display-controller@402b8000
- Capabilities:
x_resolution = 480, y_resolution = 272, supported_pixel_formats = 40
current_pixel_format = 32, current_orientation = 0
Capture started
Got frame 0! size: 261120; timestamp 249 ms
Got frame 1! size: 261120; timestamp 282 ms
Got frame 2! size: 261120; timestamp 316 ms
Got frame 3! size: 261120; timestamp 350 ms
Got frame 4! size: 261120; timestamp 384 ms
Got frame 5! size: 261120; timestamp 418 ms
Got frame 6! size: 261120; timestamp 451 ms
<repeats endlessly>
If using the shell, the capture would not start, and instead it is possible to access the shell
.. code-block:: console
uart:~$ video --help
video - Video driver commands
Subcommands:
start : Start a video device and its sources
Usage: start <device>
stop : Stop a video device and its sources
Usage: stop <device>
capture : Capture a given number of buffers from a device
Usage: capture <device> <num-buffers>
format : Query or set the video format of a device
Usage: format <device> <dir> [<fourcc> <width>x<height>]
frmival : Query or set the video frame rate/interval of a device
Usage: frmival <device> [<n>fps|<n>ms|<n>us]
ctrl : Query or set video controls of a device
Usage: ctrl <device> [<ctrl> <value>]
uart:~$
References
**********
.. target-notes::
.. _Camera iMXRT: https://community.nxp.com/t5/i-MX-RT-Knowledge-Base/Connecting-camera-and-LCD-to-i-MX-RT-EVKs/ta-p/1122183
.. _MT9M114 camera module: https://www.onsemi.com/PowerSolutions/product.do?id=MT9M114
.. _OV5640 camera module: https://cdn.sparkfun.com/datasheets/Sensors/LightImaging/OV5640_datasheet.pdf