Skip to content

Commit

Permalink
media: uapi: Add controls for NPCM video driver
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Marvin Lin authored and Hans Verkuil committed Sep 27, 2023
1 parent 2817154 commit 1568583
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 0 deletions.
1 change: 1 addition & 0 deletions Documentation/userspace-api/media/drivers/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ For more details see the file COPYING in the source distribution of Linux.
dw100
imx-uapi
max2175
npcm-video
omap3isp-uapi
st-vgxy61
uvcvideo
66 changes: 66 additions & 0 deletions Documentation/userspace-api/media/drivers/npcm-video.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
.. SPDX-License-Identifier: GPL-2.0
.. include:: <isonum.txt>

NPCM video driver
=================

This driver is used to control the Video Capture/Differentiation (VCD) engine
and Encoding Compression Engine (ECE) present on Nuvoton NPCM SoCs. The VCD can
capture a frame from digital video input and compare two frames in memory, and
the ECE can compress the frame data into HEXTILE format.

Driver-specific Controls
------------------------

V4L2_CID_NPCM_CAPTURE_MODE
~~~~~~~~~~~~~~~~~~~~~~~~~~

The VCD engine supports two modes:

- COMPLETE mode:

Capture the next complete frame into memory.

- DIFF mode:

Compare the incoming frame with the frame stored in memory, and updates the
differentiated frame in memory.

Application can use ``V4L2_CID_NPCM_CAPTURE_MODE`` control to set the VCD mode
with different control values (enum v4l2_npcm_capture_mode):

- ``V4L2_NPCM_CAPTURE_MODE_COMPLETE``: will set VCD to COMPLETE mode.
- ``V4L2_NPCM_CAPTURE_MODE_DIFF``: will set VCD to DIFF mode.

V4L2_CID_NPCM_RECT_COUNT
~~~~~~~~~~~~~~~~~~~~~~~~

If using V4L2_PIX_FMT_HEXTILE format, VCD will capture frame data and then ECE
will compress the data into HEXTILE rectangles and store them in V4L2 video
buffer with the layout defined in Remote Framebuffer Protocol:
::

(RFC 6143, https://www.rfc-editor.org/rfc/rfc6143.html#section-7.6.1)

+--------------+--------------+-------------------+
| No. of bytes | Type [Value] | Description |
+--------------+--------------+-------------------+
| 2 | U16 | x-position |
| 2 | U16 | y-position |
| 2 | U16 | width |
| 2 | U16 | height |
| 4 | S32 | encoding-type (5) |
+--------------+--------------+-------------------+
| HEXTILE rectangle data |
+-------------------------------------------------+

Application can get the video buffer through VIDIOC_DQBUF, and followed by
calling ``V4L2_CID_NPCM_RECT_COUNT`` control to get the number of HEXTILE
rectangles in this buffer.

References
----------
include/uapi/linux/npcm-video.h

**Copyright** |copy| 2022 Nuvoton Technologies
41 changes: 41 additions & 0 deletions include/uapi/linux/npcm-video.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
/* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */
/*
* Controls header for NPCM video driver
*
* Copyright (C) 2022 Nuvoton Technologies
*/

#ifndef _UAPI_LINUX_NPCM_VIDEO_H
#define _UAPI_LINUX_NPCM_VIDEO_H

#include <linux/v4l2-controls.h>

/*
* Check Documentation/userspace-api/media/drivers/npcm-video.rst for control
* details.
*/

/*
* This control is meant to set the mode of NPCM Video Capture/Differentiation
* (VCD) engine.
*
* The VCD engine supports two modes:
* COMPLETE - Capture the next complete frame into memory.
* DIFF - Compare the incoming frame with the frame stored in memory, and
* updates the differentiated frame in memory.
*/
#define V4L2_CID_NPCM_CAPTURE_MODE (V4L2_CID_USER_NPCM_BASE + 0)

enum v4l2_npcm_capture_mode {
V4L2_NPCM_CAPTURE_MODE_COMPLETE = 0, /* COMPLETE mode */
V4L2_NPCM_CAPTURE_MODE_DIFF = 1, /* DIFF mode */
};

/*
* This control is meant to get the count of compressed HEXTILE rectangles which
* is relevant to the number of differentiated frames if VCD is in DIFF mode.
* And the count will always be 1 if VCD is in COMPLETE mode.
*/
#define V4L2_CID_NPCM_RECT_COUNT (V4L2_CID_USER_NPCM_BASE + 1)

#endif /* _UAPI_LINUX_NPCM_VIDEO_H */

0 comments on commit 1568583

Please sign in to comment.