Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: uapi: Add controls for NPCM video driver

Create controls for Nuvoton NPCM video driver to support setting
capture mode of Video Capture/Differentiation (VCD) engine and getting
the count of HEXTILE rectangles that is compressed by Encoding
Compression Engine (ECE).

Signed-off-by: Marvin Lin <milkfafa@gmail.com>
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>

authored by

Marvin Lin and committed by
Hans Verkuil
1568583b 2817154c

+108
+1
Documentation/userspace-api/media/drivers/index.rst
··· 37 37 dw100 38 38 imx-uapi 39 39 max2175 40 + npcm-video 40 41 omap3isp-uapi 41 42 st-vgxy61 42 43 uvcvideo
+66
Documentation/userspace-api/media/drivers/npcm-video.rst
··· 1 + .. SPDX-License-Identifier: GPL-2.0 2 + 3 + .. include:: <isonum.txt> 4 + 5 + NPCM video driver 6 + ================= 7 + 8 + This driver is used to control the Video Capture/Differentiation (VCD) engine 9 + and Encoding Compression Engine (ECE) present on Nuvoton NPCM SoCs. The VCD can 10 + capture a frame from digital video input and compare two frames in memory, and 11 + the ECE can compress the frame data into HEXTILE format. 12 + 13 + Driver-specific Controls 14 + ------------------------ 15 + 16 + V4L2_CID_NPCM_CAPTURE_MODE 17 + ~~~~~~~~~~~~~~~~~~~~~~~~~~ 18 + 19 + The VCD engine supports two modes: 20 + 21 + - COMPLETE mode: 22 + 23 + Capture the next complete frame into memory. 24 + 25 + - DIFF mode: 26 + 27 + Compare the incoming frame with the frame stored in memory, and updates the 28 + differentiated frame in memory. 29 + 30 + Application can use ``V4L2_CID_NPCM_CAPTURE_MODE`` control to set the VCD mode 31 + with different control values (enum v4l2_npcm_capture_mode): 32 + 33 + - ``V4L2_NPCM_CAPTURE_MODE_COMPLETE``: will set VCD to COMPLETE mode. 34 + - ``V4L2_NPCM_CAPTURE_MODE_DIFF``: will set VCD to DIFF mode. 35 + 36 + V4L2_CID_NPCM_RECT_COUNT 37 + ~~~~~~~~~~~~~~~~~~~~~~~~ 38 + 39 + If using V4L2_PIX_FMT_HEXTILE format, VCD will capture frame data and then ECE 40 + will compress the data into HEXTILE rectangles and store them in V4L2 video 41 + buffer with the layout defined in Remote Framebuffer Protocol: 42 + :: 43 + 44 + (RFC 6143, https://www.rfc-editor.org/rfc/rfc6143.html#section-7.6.1) 45 + 46 + +--------------+--------------+-------------------+ 47 + | No. of bytes | Type [Value] | Description | 48 + +--------------+--------------+-------------------+ 49 + | 2 | U16 | x-position | 50 + | 2 | U16 | y-position | 51 + | 2 | U16 | width | 52 + | 2 | U16 | height | 53 + | 4 | S32 | encoding-type (5) | 54 + +--------------+--------------+-------------------+ 55 + | HEXTILE rectangle data | 56 + +-------------------------------------------------+ 57 + 58 + Application can get the video buffer through VIDIOC_DQBUF, and followed by 59 + calling ``V4L2_CID_NPCM_RECT_COUNT`` control to get the number of HEXTILE 60 + rectangles in this buffer. 61 + 62 + References 63 + ---------- 64 + include/uapi/linux/npcm-video.h 65 + 66 + **Copyright** |copy| 2022 Nuvoton Technologies
+41
include/uapi/linux/npcm-video.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ 2 + /* 3 + * Controls header for NPCM video driver 4 + * 5 + * Copyright (C) 2022 Nuvoton Technologies 6 + */ 7 + 8 + #ifndef _UAPI_LINUX_NPCM_VIDEO_H 9 + #define _UAPI_LINUX_NPCM_VIDEO_H 10 + 11 + #include <linux/v4l2-controls.h> 12 + 13 + /* 14 + * Check Documentation/userspace-api/media/drivers/npcm-video.rst for control 15 + * details. 16 + */ 17 + 18 + /* 19 + * This control is meant to set the mode of NPCM Video Capture/Differentiation 20 + * (VCD) engine. 21 + * 22 + * The VCD engine supports two modes: 23 + * COMPLETE - Capture the next complete frame into memory. 24 + * DIFF - Compare the incoming frame with the frame stored in memory, and 25 + * updates the differentiated frame in memory. 26 + */ 27 + #define V4L2_CID_NPCM_CAPTURE_MODE (V4L2_CID_USER_NPCM_BASE + 0) 28 + 29 + enum v4l2_npcm_capture_mode { 30 + V4L2_NPCM_CAPTURE_MODE_COMPLETE = 0, /* COMPLETE mode */ 31 + V4L2_NPCM_CAPTURE_MODE_DIFF = 1, /* DIFF mode */ 32 + }; 33 + 34 + /* 35 + * This control is meant to get the count of compressed HEXTILE rectangles which 36 + * is relevant to the number of differentiated frames if VCD is in DIFF mode. 37 + * And the count will always be 1 if VCD is in COMPLETE mode. 38 + */ 39 + #define V4L2_CID_NPCM_RECT_COUNT (V4L2_CID_USER_NPCM_BASE + 1) 40 + 41 + #endif /* _UAPI_LINUX_NPCM_VIDEO_H */