include: linux: Update Linux headers to v5.12-rc1
Update Linux headers to v5.12-rc1, to provide the MEDIA_ENT_F_PROC_VIDEO_ISP entity function. The DRM FourCC and modifiers that were manually added in commits9db0ed5e20
,38f2efb05c
and90c793c698
are kept. New Intel DRM format modifiers are conflicting with IPU3_FORMAT_MOD_PACKED, which is updated as a result. The V4L2 controls and formats that were manually added in commit43d81d43fe
are kept. This causes a conflict in the V4L2 control base for V4L2_CID_USER_BCM2835_ISP_BASE that needs to be resolved in the downstream Raspberry Pi kernel first. The intel-ipu3.h header is manually exported with the scripts/headers_install.sh script. The script complained about a missing "WITH Linux-syscall-note" license extension, which has been worked around manually. The issue has been reported upstream in [1]. [1] https://lore.kernel.org/linux-media/20210207235610.15687-1-laurent.pinchart@ideasonboard.com/T/#u Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Acked-by: Kieran Bingham <kieran.bingham@ideasonboard.com>
This commit is contained in:
parent
09b0801fdb
commit
330a2d688d
11 changed files with 1445 additions and 278 deletions
|
@ -1,4 +1,4 @@
|
||||||
# SPDX-License-Identifier: CC0-1.0
|
# SPDX-License-Identifier: CC0-1.0
|
||||||
|
|
||||||
Files in this directory are imported from v5.2 of the Linux kernel. Do not
|
Files in this directory are imported from v5.12-rc1 of the Linux kernel. Do not
|
||||||
modify them manually.
|
modify them manually.
|
||||||
|
|
|
@ -5,8 +5,8 @@
|
||||||
* Copyright (C) 2011 Google, Inc.
|
* Copyright (C) 2011 Google, Inc.
|
||||||
* Copyright (C) 2019 Linaro Ltd.
|
* Copyright (C) 2019 Linaro Ltd.
|
||||||
*/
|
*/
|
||||||
#ifndef _UAPI_LINUX_DMABUF_POOL_H
|
#ifndef _LINUX_DMABUF_POOL_H
|
||||||
#define _UAPI_LINUX_DMABUF_POOL_H
|
#define _LINUX_DMABUF_POOL_H
|
||||||
|
|
||||||
#include <linux/ioctl.h>
|
#include <linux/ioctl.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
@ -50,4 +50,4 @@ struct dma_heap_allocation_data {
|
||||||
#define DMA_HEAP_IOCTL_ALLOC _IOWR(DMA_HEAP_IOC_MAGIC, 0x0,\
|
#define DMA_HEAP_IOCTL_ALLOC _IOWR(DMA_HEAP_IOC_MAGIC, 0x0,\
|
||||||
struct dma_heap_allocation_data)
|
struct dma_heap_allocation_data)
|
||||||
|
|
||||||
#endif /* _UAPI_LINUX_DMABUF_POOL_H */
|
#endif /* _LINUX_DMABUF_POOL_H */
|
||||||
|
|
|
@ -58,6 +58,30 @@ extern "C" {
|
||||||
* may preserve meaning - such as number of planes - from the fourcc code,
|
* may preserve meaning - such as number of planes - from the fourcc code,
|
||||||
* whereas others may not.
|
* whereas others may not.
|
||||||
*
|
*
|
||||||
|
* Modifiers must uniquely encode buffer layout. In other words, a buffer must
|
||||||
|
* match only a single modifier. A modifier must not be a subset of layouts of
|
||||||
|
* another modifier. For instance, it's incorrect to encode pitch alignment in
|
||||||
|
* a modifier: a buffer may match a 64-pixel aligned modifier and a 32-pixel
|
||||||
|
* aligned modifier. That said, modifiers can have implicit minimal
|
||||||
|
* requirements.
|
||||||
|
*
|
||||||
|
* For modifiers where the combination of fourcc code and modifier can alias,
|
||||||
|
* a canonical pair needs to be defined and used by all drivers. Preferred
|
||||||
|
* combinations are also encouraged where all combinations might lead to
|
||||||
|
* confusion and unnecessarily reduced interoperability. An example for the
|
||||||
|
* latter is AFBC, where the ABGR layouts are preferred over ARGB layouts.
|
||||||
|
*
|
||||||
|
* There are two kinds of modifier users:
|
||||||
|
*
|
||||||
|
* - Kernel and user-space drivers: for drivers it's important that modifiers
|
||||||
|
* don't alias, otherwise two drivers might support the same format but use
|
||||||
|
* different aliases, preventing them from sharing buffers in an efficient
|
||||||
|
* format.
|
||||||
|
* - Higher-level programs interfacing with KMS/GBM/EGL/Vulkan/etc: these users
|
||||||
|
* see modifiers as opaque tokens they can check for equality and intersect.
|
||||||
|
* These users musn't need to know to reason about the modifier value
|
||||||
|
* (i.e. they are not expected to extract information out of the modifier).
|
||||||
|
*
|
||||||
* Vendors should document their modifier usage in as much detail as
|
* Vendors should document their modifier usage in as much detail as
|
||||||
* possible, to ensure maximum compatibility across devices, drivers and
|
* possible, to ensure maximum compatibility across devices, drivers and
|
||||||
* applications.
|
* applications.
|
||||||
|
@ -69,7 +93,7 @@ extern "C" {
|
||||||
#define fourcc_code(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | \
|
#define fourcc_code(a, b, c, d) ((__u32)(a) | ((__u32)(b) << 8) | \
|
||||||
((__u32)(c) << 16) | ((__u32)(d) << 24))
|
((__u32)(c) << 16) | ((__u32)(d) << 24))
|
||||||
|
|
||||||
#define DRM_FORMAT_BIG_ENDIAN (1<<31) /* format is big endian instead of little endian */
|
#define DRM_FORMAT_BIG_ENDIAN (1U<<31) /* format is big endian instead of little endian */
|
||||||
|
|
||||||
/* Reserve 0 for the invalid format specifier */
|
/* Reserve 0 for the invalid format specifier */
|
||||||
#define DRM_FORMAT_INVALID 0
|
#define DRM_FORMAT_INVALID 0
|
||||||
|
@ -155,6 +179,12 @@ extern "C" {
|
||||||
#define DRM_FORMAT_ARGB16161616F fourcc_code('A', 'R', '4', 'H') /* [63:0] A:R:G:B 16:16:16:16 little endian */
|
#define DRM_FORMAT_ARGB16161616F fourcc_code('A', 'R', '4', 'H') /* [63:0] A:R:G:B 16:16:16:16 little endian */
|
||||||
#define DRM_FORMAT_ABGR16161616F fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */
|
#define DRM_FORMAT_ABGR16161616F fourcc_code('A', 'B', '4', 'H') /* [63:0] A:B:G:R 16:16:16:16 little endian */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* RGBA format with 10-bit components packed in 64-bit per pixel, with 6 bits
|
||||||
|
* of unused padding per component:
|
||||||
|
*/
|
||||||
|
#define DRM_FORMAT_AXBXGXRX106106106106 fourcc_code('A', 'B', '1', '0') /* [63:0] A:x:B:x:G:x:R:x 10:6:10:6:10:6:10:6 little endian */
|
||||||
|
|
||||||
/* packed YCbCr */
|
/* packed YCbCr */
|
||||||
#define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */
|
#define DRM_FORMAT_YUYV fourcc_code('Y', 'U', 'Y', 'V') /* [31:0] Cr0:Y1:Cb0:Y0 8:8:8:8 little endian */
|
||||||
#define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */
|
#define DRM_FORMAT_YVYU fourcc_code('Y', 'V', 'Y', 'U') /* [31:0] Cb0:Y1:Cr0:Y0 8:8:8:8 little endian */
|
||||||
|
@ -236,6 +266,12 @@ extern "C" {
|
||||||
#define DRM_FORMAT_NV61 fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */
|
#define DRM_FORMAT_NV61 fourcc_code('N', 'V', '6', '1') /* 2x1 subsampled Cb:Cr plane */
|
||||||
#define DRM_FORMAT_NV24 fourcc_code('N', 'V', '2', '4') /* non-subsampled Cr:Cb plane */
|
#define DRM_FORMAT_NV24 fourcc_code('N', 'V', '2', '4') /* non-subsampled Cr:Cb plane */
|
||||||
#define DRM_FORMAT_NV42 fourcc_code('N', 'V', '4', '2') /* non-subsampled Cb:Cr plane */
|
#define DRM_FORMAT_NV42 fourcc_code('N', 'V', '4', '2') /* non-subsampled Cb:Cr plane */
|
||||||
|
/*
|
||||||
|
* 2 plane YCbCr
|
||||||
|
* index 0 = Y plane, [39:0] Y3:Y2:Y1:Y0 little endian
|
||||||
|
* index 1 = Cr:Cb plane, [39:0] Cr1:Cb1:Cr0:Cb0 little endian
|
||||||
|
*/
|
||||||
|
#define DRM_FORMAT_NV15 fourcc_code('N', 'V', '1', '5') /* 2x2 subsampled Cr:Cb plane */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 2 plane YCbCr MSB aligned
|
* 2 plane YCbCr MSB aligned
|
||||||
|
@ -265,6 +301,22 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define DRM_FORMAT_P016 fourcc_code('P', '0', '1', '6') /* 2x2 subsampled Cr:Cb plane 16 bits per channel */
|
#define DRM_FORMAT_P016 fourcc_code('P', '0', '1', '6') /* 2x2 subsampled Cr:Cb plane 16 bits per channel */
|
||||||
|
|
||||||
|
/* 3 plane non-subsampled (444) YCbCr
|
||||||
|
* 16 bits per component, but only 10 bits are used and 6 bits are padded
|
||||||
|
* index 0: Y plane, [15:0] Y:x [10:6] little endian
|
||||||
|
* index 1: Cb plane, [15:0] Cb:x [10:6] little endian
|
||||||
|
* index 2: Cr plane, [15:0] Cr:x [10:6] little endian
|
||||||
|
*/
|
||||||
|
#define DRM_FORMAT_Q410 fourcc_code('Q', '4', '1', '0')
|
||||||
|
|
||||||
|
/* 3 plane non-subsampled (444) YCrCb
|
||||||
|
* 16 bits per component, but only 10 bits are used and 6 bits are padded
|
||||||
|
* index 0: Y plane, [15:0] Y:x [10:6] little endian
|
||||||
|
* index 1: Cr plane, [15:0] Cr:x [10:6] little endian
|
||||||
|
* index 2: Cb plane, [15:0] Cb:x [10:6] little endian
|
||||||
|
*/
|
||||||
|
#define DRM_FORMAT_Q401 fourcc_code('Q', '4', '0', '1')
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 3 plane YCbCr
|
* 3 plane YCbCr
|
||||||
* index 0: Y plane, [7:0] Y
|
* index 0: Y plane, [7:0] Y
|
||||||
|
@ -362,7 +414,6 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Vendor Ids: */
|
/* Vendor Ids: */
|
||||||
#define DRM_FORMAT_MOD_NONE 0
|
|
||||||
#define DRM_FORMAT_MOD_VENDOR_NONE 0
|
#define DRM_FORMAT_MOD_VENDOR_NONE 0
|
||||||
#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01
|
#define DRM_FORMAT_MOD_VENDOR_INTEL 0x01
|
||||||
#define DRM_FORMAT_MOD_VENDOR_AMD 0x02
|
#define DRM_FORMAT_MOD_VENDOR_AMD 0x02
|
||||||
|
@ -373,7 +424,8 @@ extern "C" {
|
||||||
#define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07
|
#define DRM_FORMAT_MOD_VENDOR_BROADCOM 0x07
|
||||||
#define DRM_FORMAT_MOD_VENDOR_ARM 0x08
|
#define DRM_FORMAT_MOD_VENDOR_ARM 0x08
|
||||||
#define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09
|
#define DRM_FORMAT_MOD_VENDOR_ALLWINNER 0x09
|
||||||
#define DRM_FORMAT_MOD_VENDOR_MIPI 0x0a
|
#define DRM_FORMAT_MOD_VENDOR_AMLOGIC 0x0a
|
||||||
|
#define DRM_FORMAT_MOD_VENDOR_MIPI 0x0b
|
||||||
|
|
||||||
/* add more to the end as needed */
|
/* add more to the end as needed */
|
||||||
|
|
||||||
|
@ -388,8 +440,33 @@ extern "C" {
|
||||||
* When adding a new token please document the layout with a code comment,
|
* When adding a new token please document the layout with a code comment,
|
||||||
* similar to the fourcc codes above. drm_fourcc.h is considered the
|
* similar to the fourcc codes above. drm_fourcc.h is considered the
|
||||||
* authoritative source for all of these.
|
* authoritative source for all of these.
|
||||||
|
*
|
||||||
|
* Generic modifier names:
|
||||||
|
*
|
||||||
|
* DRM_FORMAT_MOD_GENERIC_* definitions are used to provide vendor-neutral names
|
||||||
|
* for layouts which are common across multiple vendors. To preserve
|
||||||
|
* compatibility, in cases where a vendor-specific definition already exists and
|
||||||
|
* a generic name for it is desired, the common name is a purely symbolic alias
|
||||||
|
* and must use the same numerical value as the original definition.
|
||||||
|
*
|
||||||
|
* Note that generic names should only be used for modifiers which describe
|
||||||
|
* generic layouts (such as pixel re-ordering), which may have
|
||||||
|
* independently-developed support across multiple vendors.
|
||||||
|
*
|
||||||
|
* In future cases where a generic layout is identified before merging with a
|
||||||
|
* vendor-specific modifier, a new 'GENERIC' vendor or modifier using vendor
|
||||||
|
* 'NONE' could be considered. This should only be for obvious, exceptional
|
||||||
|
* cases to avoid polluting the 'GENERIC' namespace with modifiers which only
|
||||||
|
* apply to a single vendor.
|
||||||
|
*
|
||||||
|
* Generic names should not be used for cases where multiple hardware vendors
|
||||||
|
* have implementations of the same standardised compression scheme (such as
|
||||||
|
* AFBC). In those cases, all implementations should use the same format
|
||||||
|
* modifier(s), reflecting the vendor of the standard.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define DRM_FORMAT_MOD_GENERIC_16_16_TILE DRM_FORMAT_MOD_SAMSUNG_16_16_TILE
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Invalid Modifier
|
* Invalid Modifier
|
||||||
*
|
*
|
||||||
|
@ -409,6 +486,16 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0)
|
#define DRM_FORMAT_MOD_LINEAR fourcc_mod_code(NONE, 0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Deprecated: use DRM_FORMAT_MOD_LINEAR instead
|
||||||
|
*
|
||||||
|
* The "none" format modifier doesn't actually mean that the modifier is
|
||||||
|
* implicit, instead it means that the layout is linear. Whether modifiers are
|
||||||
|
* used is out-of-band information carried in an API-specific way (e.g. in a
|
||||||
|
* flag for drm_mode_fb_cmd2).
|
||||||
|
*/
|
||||||
|
#define DRM_FORMAT_MOD_NONE 0
|
||||||
|
|
||||||
/* Intel framebuffer modifiers */
|
/* Intel framebuffer modifiers */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -419,9 +506,12 @@ extern "C" {
|
||||||
* a platform-dependent stride. On top of that the memory can apply
|
* a platform-dependent stride. On top of that the memory can apply
|
||||||
* platform-depending swizzling of some higher address bits into bit6.
|
* platform-depending swizzling of some higher address bits into bit6.
|
||||||
*
|
*
|
||||||
* This format is highly platforms specific and not useful for cross-driver
|
* Note that this layout is only accurate on intel gen 8+ or valleyview chipsets.
|
||||||
* sharing. It exists since on a given platform it does uniquely identify the
|
* On earlier platforms the is highly platforms specific and not useful for
|
||||||
* layout in a simple way for i915-specific userspace.
|
* cross-driver sharing. It exists since on a given platform it does uniquely
|
||||||
|
* identify the layout in a simple way for i915-specific userspace, which
|
||||||
|
* facilitated conversion of userspace to modifiers. Additionally the exact
|
||||||
|
* format on some really old platforms is not known.
|
||||||
*/
|
*/
|
||||||
#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1)
|
#define I915_FORMAT_MOD_X_TILED fourcc_mod_code(INTEL, 1)
|
||||||
|
|
||||||
|
@ -434,9 +524,12 @@ extern "C" {
|
||||||
* memory can apply platform-depending swizzling of some higher address bits
|
* memory can apply platform-depending swizzling of some higher address bits
|
||||||
* into bit6.
|
* into bit6.
|
||||||
*
|
*
|
||||||
* This format is highly platforms specific and not useful for cross-driver
|
* Note that this layout is only accurate on intel gen 8+ or valleyview chipsets.
|
||||||
* sharing. It exists since on a given platform it does uniquely identify the
|
* On earlier platforms the is highly platforms specific and not useful for
|
||||||
* layout in a simple way for i915-specific userspace.
|
* cross-driver sharing. It exists since on a given platform it does uniquely
|
||||||
|
* identify the layout in a simple way for i915-specific userspace, which
|
||||||
|
* facilitated conversion of userspace to modifiers. Additionally the exact
|
||||||
|
* format on some really old platforms is not known.
|
||||||
*/
|
*/
|
||||||
#define I915_FORMAT_MOD_Y_TILED fourcc_mod_code(INTEL, 2)
|
#define I915_FORMAT_MOD_Y_TILED fourcc_mod_code(INTEL, 2)
|
||||||
|
|
||||||
|
@ -475,6 +568,49 @@ extern "C" {
|
||||||
#define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4)
|
#define I915_FORMAT_MOD_Y_TILED_CCS fourcc_mod_code(INTEL, 4)
|
||||||
#define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5)
|
#define I915_FORMAT_MOD_Yf_TILED_CCS fourcc_mod_code(INTEL, 5)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Intel color control surfaces (CCS) for Gen-12 render compression.
|
||||||
|
*
|
||||||
|
* The main surface is Y-tiled and at plane index 0, the CCS is linear and
|
||||||
|
* at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in
|
||||||
|
* main surface. In other words, 4 bits in CCS map to a main surface cache
|
||||||
|
* line pair. The main surface pitch is required to be a multiple of four
|
||||||
|
* Y-tile widths.
|
||||||
|
*/
|
||||||
|
#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS fourcc_mod_code(INTEL, 6)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Intel color control surfaces (CCS) for Gen-12 media compression
|
||||||
|
*
|
||||||
|
* The main surface is Y-tiled and at plane index 0, the CCS is linear and
|
||||||
|
* at index 1. A 64B CCS cache line corresponds to an area of 4x1 tiles in
|
||||||
|
* main surface. In other words, 4 bits in CCS map to a main surface cache
|
||||||
|
* line pair. The main surface pitch is required to be a multiple of four
|
||||||
|
* Y-tile widths. For semi-planar formats like NV12, CCS planes follow the
|
||||||
|
* Y and UV planes i.e., planes 0 and 1 are used for Y and UV surfaces,
|
||||||
|
* planes 2 and 3 for the respective CCS.
|
||||||
|
*/
|
||||||
|
#define I915_FORMAT_MOD_Y_TILED_GEN12_MC_CCS fourcc_mod_code(INTEL, 7)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Intel Color Control Surface with Clear Color (CCS) for Gen-12 render
|
||||||
|
* compression.
|
||||||
|
*
|
||||||
|
* The main surface is Y-tiled and is at plane index 0 whereas CCS is linear
|
||||||
|
* and at index 1. The clear color is stored at index 2, and the pitch should
|
||||||
|
* be ignored. The clear color structure is 256 bits. The first 128 bits
|
||||||
|
* represents Raw Clear Color Red, Green, Blue and Alpha color each represented
|
||||||
|
* by 32 bits. The raw clear color is consumed by the 3d engine and generates
|
||||||
|
* the converted clear color of size 64 bits. The first 32 bits store the Lower
|
||||||
|
* Converted Clear Color value and the next 32 bits store the Higher Converted
|
||||||
|
* Clear Color value when applicable. The Converted Clear Color values are
|
||||||
|
* consumed by the DE. The last 64 bits are used to store Color Discard Enable
|
||||||
|
* and Depth Clear Value Valid which are ignored by the DE. A CCS cache line
|
||||||
|
* corresponds to an area of 4x1 tiles in the main surface. The main surface
|
||||||
|
* pitch is required to be a multiple of 4 tile widths.
|
||||||
|
*/
|
||||||
|
#define I915_FORMAT_MOD_Y_TILED_GEN12_RC_CCS_CC fourcc_mod_code(INTEL, 8)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* IPU3 Bayer packing layout
|
* IPU3 Bayer packing layout
|
||||||
*
|
*
|
||||||
|
@ -483,7 +619,7 @@ extern "C" {
|
||||||
* the 6 most significant bits in the last byte unused. The format is little
|
* the 6 most significant bits in the last byte unused. The format is little
|
||||||
* endian.
|
* endian.
|
||||||
*/
|
*/
|
||||||
#define IPU3_FORMAT_MOD_PACKED fourcc_mod_code(INTEL, 8)
|
#define IPU3_FORMAT_MOD_PACKED fourcc_mod_code(INTEL, 9)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tiled, NV12MT, grouped in 64 (pixels) x 32 (lines) -sized macroblocks
|
* Tiled, NV12MT, grouped in 64 (pixels) x 32 (lines) -sized macroblocks
|
||||||
|
@ -572,7 +708,113 @@ extern "C" {
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1)
|
#define DRM_FORMAT_MOD_NVIDIA_TEGRA_TILED fourcc_mod_code(NVIDIA, 1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* 16Bx2 Block Linear layout, used by desktop GPUs, and Tegra K1 and later
|
* Generalized Block Linear layout, used by desktop GPUs starting with NV50/G80,
|
||||||
|
* and Tegra GPUs starting with Tegra K1.
|
||||||
|
*
|
||||||
|
* Pixels are arranged in Groups of Bytes (GOBs). GOB size and layout varies
|
||||||
|
* based on the architecture generation. GOBs themselves are then arranged in
|
||||||
|
* 3D blocks, with the block dimensions (in terms of GOBs) always being a power
|
||||||
|
* of two, and hence expressible as their log2 equivalent (E.g., "2" represents
|
||||||
|
* a block depth or height of "4").
|
||||||
|
*
|
||||||
|
* Chapter 20 "Pixel Memory Formats" of the Tegra X1 TRM describes this format
|
||||||
|
* in full detail.
|
||||||
|
*
|
||||||
|
* Macro
|
||||||
|
* Bits Param Description
|
||||||
|
* ---- ----- -----------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* 3:0 h log2(height) of each block, in GOBs. Placed here for
|
||||||
|
* compatibility with the existing
|
||||||
|
* DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers.
|
||||||
|
*
|
||||||
|
* 4:4 - Must be 1, to indicate block-linear layout. Necessary for
|
||||||
|
* compatibility with the existing
|
||||||
|
* DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK()-based modifiers.
|
||||||
|
*
|
||||||
|
* 8:5 - Reserved (To support 3D-surfaces with variable log2(depth) block
|
||||||
|
* size). Must be zero.
|
||||||
|
*
|
||||||
|
* Note there is no log2(width) parameter. Some portions of the
|
||||||
|
* hardware support a block width of two gobs, but it is impractical
|
||||||
|
* to use due to lack of support elsewhere, and has no known
|
||||||
|
* benefits.
|
||||||
|
*
|
||||||
|
* 11:9 - Reserved (To support 2D-array textures with variable array stride
|
||||||
|
* in blocks, specified via log2(tile width in blocks)). Must be
|
||||||
|
* zero.
|
||||||
|
*
|
||||||
|
* 19:12 k Page Kind. This value directly maps to a field in the page
|
||||||
|
* tables of all GPUs >= NV50. It affects the exact layout of bits
|
||||||
|
* in memory and can be derived from the tuple
|
||||||
|
*
|
||||||
|
* (format, GPU model, compression type, samples per pixel)
|
||||||
|
*
|
||||||
|
* Where compression type is defined below. If GPU model were
|
||||||
|
* implied by the format modifier, format, or memory buffer, page
|
||||||
|
* kind would not need to be included in the modifier itself, but
|
||||||
|
* since the modifier should define the layout of the associated
|
||||||
|
* memory buffer independent from any device or other context, it
|
||||||
|
* must be included here.
|
||||||
|
*
|
||||||
|
* 21:20 g GOB Height and Page Kind Generation. The height of a GOB changed
|
||||||
|
* starting with Fermi GPUs. Additionally, the mapping between page
|
||||||
|
* kind and bit layout has changed at various points.
|
||||||
|
*
|
||||||
|
* 0 = Gob Height 8, Fermi - Volta, Tegra K1+ Page Kind mapping
|
||||||
|
* 1 = Gob Height 4, G80 - GT2XX Page Kind mapping
|
||||||
|
* 2 = Gob Height 8, Turing+ Page Kind mapping
|
||||||
|
* 3 = Reserved for future use.
|
||||||
|
*
|
||||||
|
* 22:22 s Sector layout. On Tegra GPUs prior to Xavier, there is a further
|
||||||
|
* bit remapping step that occurs at an even lower level than the
|
||||||
|
* page kind and block linear swizzles. This causes the layout of
|
||||||
|
* surfaces mapped in those SOC's GPUs to be incompatible with the
|
||||||
|
* equivalent mapping on other GPUs in the same system.
|
||||||
|
*
|
||||||
|
* 0 = Tegra K1 - Tegra Parker/TX2 Layout.
|
||||||
|
* 1 = Desktop GPU and Tegra Xavier+ Layout
|
||||||
|
*
|
||||||
|
* 25:23 c Lossless Framebuffer Compression type.
|
||||||
|
*
|
||||||
|
* 0 = none
|
||||||
|
* 1 = ROP/3D, layout 1, exact compression format implied by Page
|
||||||
|
* Kind field
|
||||||
|
* 2 = ROP/3D, layout 2, exact compression format implied by Page
|
||||||
|
* Kind field
|
||||||
|
* 3 = CDE horizontal
|
||||||
|
* 4 = CDE vertical
|
||||||
|
* 5 = Reserved for future use
|
||||||
|
* 6 = Reserved for future use
|
||||||
|
* 7 = Reserved for future use
|
||||||
|
*
|
||||||
|
* 55:25 - Reserved for future use. Must be zero.
|
||||||
|
*/
|
||||||
|
#define DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(c, s, g, k, h) \
|
||||||
|
fourcc_mod_code(NVIDIA, (0x10 | \
|
||||||
|
((h) & 0xf) | \
|
||||||
|
(((k) & 0xff) << 12) | \
|
||||||
|
(((g) & 0x3) << 20) | \
|
||||||
|
(((s) & 0x1) << 22) | \
|
||||||
|
(((c) & 0x7) << 23)))
|
||||||
|
|
||||||
|
/* To grandfather in prior block linear format modifiers to the above layout,
|
||||||
|
* the page kind "0", which corresponds to "pitch/linear" and hence is unusable
|
||||||
|
* with block-linear layouts, is remapped within drivers to the value 0xfe,
|
||||||
|
* which corresponds to the "generic" kind used for simple single-sample
|
||||||
|
* uncompressed color formats on Fermi - Volta GPUs.
|
||||||
|
*/
|
||||||
|
static __inline__ __u64
|
||||||
|
drm_fourcc_canonicalize_nvidia_format_mod(__u64 modifier)
|
||||||
|
{
|
||||||
|
if (!(modifier & 0x10) || (modifier & (0xff << 12)))
|
||||||
|
return modifier;
|
||||||
|
else
|
||||||
|
return modifier | (0xfe << 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 16Bx2 Block Linear layout, used by Tegra K1 and later
|
||||||
*
|
*
|
||||||
* Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked
|
* Pixels are arranged in 64x8 Groups Of Bytes (GOBs). GOBs are then stacked
|
||||||
* vertically by a power of 2 (1 to 32 GOBs) to form a block.
|
* vertically by a power of 2 (1 to 32 GOBs) to form a block.
|
||||||
|
@ -593,20 +835,20 @@ extern "C" {
|
||||||
* in full detail.
|
* in full detail.
|
||||||
*/
|
*/
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \
|
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(v) \
|
||||||
fourcc_mod_code(NVIDIA, 0x10 | ((v) & 0xf))
|
DRM_FORMAT_MOD_NVIDIA_BLOCK_LINEAR_2D(0, 0, 0, 0, (v))
|
||||||
|
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \
|
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_ONE_GOB \
|
||||||
fourcc_mod_code(NVIDIA, 0x10)
|
DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(0)
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \
|
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_TWO_GOB \
|
||||||
fourcc_mod_code(NVIDIA, 0x11)
|
DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(1)
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \
|
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_FOUR_GOB \
|
||||||
fourcc_mod_code(NVIDIA, 0x12)
|
DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(2)
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \
|
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_EIGHT_GOB \
|
||||||
fourcc_mod_code(NVIDIA, 0x13)
|
DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(3)
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \
|
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_SIXTEEN_GOB \
|
||||||
fourcc_mod_code(NVIDIA, 0x14)
|
DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(4)
|
||||||
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \
|
#define DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK_THIRTYTWO_GOB \
|
||||||
fourcc_mod_code(NVIDIA, 0x15)
|
DRM_FORMAT_MOD_NVIDIA_16BX2_BLOCK(5)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some Broadcom modifiers take parameters, for example the number of
|
* Some Broadcom modifiers take parameters, for example the number of
|
||||||
|
@ -723,7 +965,21 @@ extern "C" {
|
||||||
* Further information on the use of AFBC modifiers can be found in
|
* Further information on the use of AFBC modifiers can be found in
|
||||||
* Documentation/gpu/afbc.rst
|
* Documentation/gpu/afbc.rst
|
||||||
*/
|
*/
|
||||||
#define DRM_FORMAT_MOD_ARM_AFBC(__afbc_mode) fourcc_mod_code(ARM, __afbc_mode)
|
|
||||||
|
/*
|
||||||
|
* The top 4 bits (out of the 56 bits alloted for specifying vendor specific
|
||||||
|
* modifiers) denote the category for modifiers. Currently we have only two
|
||||||
|
* categories of modifiers ie AFBC and MISC. We can have a maximum of sixteen
|
||||||
|
* different categories.
|
||||||
|
*/
|
||||||
|
#define DRM_FORMAT_MOD_ARM_CODE(__type, __val) \
|
||||||
|
fourcc_mod_code(ARM, ((__u64)(__type) << 52) | ((__val) & 0x000fffffffffffffULL))
|
||||||
|
|
||||||
|
#define DRM_FORMAT_MOD_ARM_TYPE_AFBC 0x00
|
||||||
|
#define DRM_FORMAT_MOD_ARM_TYPE_MISC 0x01
|
||||||
|
|
||||||
|
#define DRM_FORMAT_MOD_ARM_AFBC(__afbc_mode) \
|
||||||
|
DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_AFBC, __afbc_mode)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* AFBC superblock size
|
* AFBC superblock size
|
||||||
|
@ -817,6 +1073,28 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define AFBC_FORMAT_MOD_BCH (1ULL << 11)
|
#define AFBC_FORMAT_MOD_BCH (1ULL << 11)
|
||||||
|
|
||||||
|
/* AFBC uncompressed storage mode
|
||||||
|
*
|
||||||
|
* Indicates that the buffer is using AFBC uncompressed storage mode.
|
||||||
|
* In this mode all superblock payloads in the buffer use the uncompressed
|
||||||
|
* storage mode, which is usually only used for data which cannot be compressed.
|
||||||
|
* The buffer layout is the same as for AFBC buffers without USM set, this only
|
||||||
|
* affects the storage mode of the individual superblocks. Note that even a
|
||||||
|
* buffer without USM set may use uncompressed storage mode for some or all
|
||||||
|
* superblocks, USM just guarantees it for all.
|
||||||
|
*/
|
||||||
|
#define AFBC_FORMAT_MOD_USM (1ULL << 12)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Arm 16x16 Block U-Interleaved modifier
|
||||||
|
*
|
||||||
|
* This is used by Arm Mali Utgard and Midgard GPUs. It divides the image
|
||||||
|
* into 16x16 pixel blocks. Blocks are stored linearly in order, but pixels
|
||||||
|
* in the block are reordered.
|
||||||
|
*/
|
||||||
|
#define DRM_FORMAT_MOD_ARM_16X16_BLOCK_U_INTERLEAVED \
|
||||||
|
DRM_FORMAT_MOD_ARM_CODE(DRM_FORMAT_MOD_ARM_TYPE_MISC, 1ULL)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allwinner tiled modifier
|
* Allwinner tiled modifier
|
||||||
*
|
*
|
||||||
|
@ -831,6 +1109,220 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define DRM_FORMAT_MOD_ALLWINNER_TILED fourcc_mod_code(ALLWINNER, 1)
|
#define DRM_FORMAT_MOD_ALLWINNER_TILED fourcc_mod_code(ALLWINNER, 1)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Amlogic Video Framebuffer Compression modifiers
|
||||||
|
*
|
||||||
|
* Amlogic uses a proprietary lossless image compression protocol and format
|
||||||
|
* for their hardware video codec accelerators, either video decoders or
|
||||||
|
* video input encoders.
|
||||||
|
*
|
||||||
|
* It considerably reduces memory bandwidth while writing and reading
|
||||||
|
* frames in memory.
|
||||||
|
*
|
||||||
|
* The underlying storage is considered to be 3 components, 8bit or 10-bit
|
||||||
|
* per component YCbCr 420, single plane :
|
||||||
|
* - DRM_FORMAT_YUV420_8BIT
|
||||||
|
* - DRM_FORMAT_YUV420_10BIT
|
||||||
|
*
|
||||||
|
* The first 8 bits of the mode defines the layout, then the following 8 bits
|
||||||
|
* defines the options changing the layout.
|
||||||
|
*
|
||||||
|
* Not all combinations are valid, and different SoCs may support different
|
||||||
|
* combinations of layout and options.
|
||||||
|
*/
|
||||||
|
#define __fourcc_mod_amlogic_layout_mask 0xff
|
||||||
|
#define __fourcc_mod_amlogic_options_shift 8
|
||||||
|
#define __fourcc_mod_amlogic_options_mask 0xff
|
||||||
|
|
||||||
|
#define DRM_FORMAT_MOD_AMLOGIC_FBC(__layout, __options) \
|
||||||
|
fourcc_mod_code(AMLOGIC, \
|
||||||
|
((__layout) & __fourcc_mod_amlogic_layout_mask) | \
|
||||||
|
(((__options) & __fourcc_mod_amlogic_options_mask) \
|
||||||
|
<< __fourcc_mod_amlogic_options_shift))
|
||||||
|
|
||||||
|
/* Amlogic FBC Layouts */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Amlogic FBC Basic Layout
|
||||||
|
*
|
||||||
|
* The basic layout is composed of:
|
||||||
|
* - a body content organized in 64x32 superblocks with 4096 bytes per
|
||||||
|
* superblock in default mode.
|
||||||
|
* - a 32 bytes per 128x64 header block
|
||||||
|
*
|
||||||
|
* This layout is transferrable between Amlogic SoCs supporting this modifier.
|
||||||
|
*/
|
||||||
|
#define AMLOGIC_FBC_LAYOUT_BASIC (1ULL)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Amlogic FBC Scatter Memory layout
|
||||||
|
*
|
||||||
|
* Indicates the header contains IOMMU references to the compressed
|
||||||
|
* frames content to optimize memory access and layout.
|
||||||
|
*
|
||||||
|
* In this mode, only the header memory address is needed, thus the
|
||||||
|
* content memory organization is tied to the current producer
|
||||||
|
* execution and cannot be saved/dumped neither transferrable between
|
||||||
|
* Amlogic SoCs supporting this modifier.
|
||||||
|
*
|
||||||
|
* Due to the nature of the layout, these buffers are not expected to
|
||||||
|
* be accessible by the user-space clients, but only accessible by the
|
||||||
|
* hardware producers and consumers.
|
||||||
|
*
|
||||||
|
* The user-space clients should expect a failure while trying to mmap
|
||||||
|
* the DMA-BUF handle returned by the producer.
|
||||||
|
*/
|
||||||
|
#define AMLOGIC_FBC_LAYOUT_SCATTER (2ULL)
|
||||||
|
|
||||||
|
/* Amlogic FBC Layout Options Bit Mask */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Amlogic FBC Memory Saving mode
|
||||||
|
*
|
||||||
|
* Indicates the storage is packed when pixel size is multiple of word
|
||||||
|
* boudaries, i.e. 8bit should be stored in this mode to save allocation
|
||||||
|
* memory.
|
||||||
|
*
|
||||||
|
* This mode reduces body layout to 3072 bytes per 64x32 superblock with
|
||||||
|
* the basic layout and 3200 bytes per 64x32 superblock combined with
|
||||||
|
* the scatter layout.
|
||||||
|
*/
|
||||||
|
#define AMLOGIC_FBC_OPTION_MEM_SAVING (1ULL << 0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* AMD modifiers
|
||||||
|
*
|
||||||
|
* Memory layout:
|
||||||
|
*
|
||||||
|
* without DCC:
|
||||||
|
* - main surface
|
||||||
|
*
|
||||||
|
* with DCC & without DCC_RETILE:
|
||||||
|
* - main surface in plane 0
|
||||||
|
* - DCC surface in plane 1 (RB-aligned, pipe-aligned if DCC_PIPE_ALIGN is set)
|
||||||
|
*
|
||||||
|
* with DCC & DCC_RETILE:
|
||||||
|
* - main surface in plane 0
|
||||||
|
* - displayable DCC surface in plane 1 (not RB-aligned & not pipe-aligned)
|
||||||
|
* - pipe-aligned DCC surface in plane 2 (RB-aligned & pipe-aligned)
|
||||||
|
*
|
||||||
|
* For multi-plane formats the above surfaces get merged into one plane for
|
||||||
|
* each format plane, based on the required alignment only.
|
||||||
|
*
|
||||||
|
* Bits Parameter Notes
|
||||||
|
* ----- ------------------------ ---------------------------------------------
|
||||||
|
*
|
||||||
|
* 7:0 TILE_VERSION Values are AMD_FMT_MOD_TILE_VER_*
|
||||||
|
* 12:8 TILE Values are AMD_FMT_MOD_TILE_<version>_*
|
||||||
|
* 13 DCC
|
||||||
|
* 14 DCC_RETILE
|
||||||
|
* 15 DCC_PIPE_ALIGN
|
||||||
|
* 16 DCC_INDEPENDENT_64B
|
||||||
|
* 17 DCC_INDEPENDENT_128B
|
||||||
|
* 19:18 DCC_MAX_COMPRESSED_BLOCK Values are AMD_FMT_MOD_DCC_BLOCK_*
|
||||||
|
* 20 DCC_CONSTANT_ENCODE
|
||||||
|
* 23:21 PIPE_XOR_BITS Only for some chips
|
||||||
|
* 26:24 BANK_XOR_BITS Only for some chips
|
||||||
|
* 29:27 PACKERS Only for some chips
|
||||||
|
* 32:30 RB Only for some chips
|
||||||
|
* 35:33 PIPE Only for some chips
|
||||||
|
* 55:36 - Reserved for future use, must be zero
|
||||||
|
*/
|
||||||
|
#define AMD_FMT_MOD fourcc_mod_code(AMD, 0)
|
||||||
|
|
||||||
|
#define IS_AMD_FMT_MOD(val) (((val) >> 56) == DRM_FORMAT_MOD_VENDOR_AMD)
|
||||||
|
|
||||||
|
/* Reserve 0 for GFX8 and older */
|
||||||
|
#define AMD_FMT_MOD_TILE_VER_GFX9 1
|
||||||
|
#define AMD_FMT_MOD_TILE_VER_GFX10 2
|
||||||
|
#define AMD_FMT_MOD_TILE_VER_GFX10_RBPLUS 3
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 64K_S is the same for GFX9/GFX10/GFX10_RBPLUS and hence has GFX9 as canonical
|
||||||
|
* version.
|
||||||
|
*/
|
||||||
|
#define AMD_FMT_MOD_TILE_GFX9_64K_S 9
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 64K_D for non-32 bpp is the same for GFX9/GFX10/GFX10_RBPLUS and hence has
|
||||||
|
* GFX9 as canonical version.
|
||||||
|
*/
|
||||||
|
#define AMD_FMT_MOD_TILE_GFX9_64K_D 10
|
||||||
|
#define AMD_FMT_MOD_TILE_GFX9_64K_S_X 25
|
||||||
|
#define AMD_FMT_MOD_TILE_GFX9_64K_D_X 26
|
||||||
|
#define AMD_FMT_MOD_TILE_GFX9_64K_R_X 27
|
||||||
|
|
||||||
|
#define AMD_FMT_MOD_DCC_BLOCK_64B 0
|
||||||
|
#define AMD_FMT_MOD_DCC_BLOCK_128B 1
|
||||||
|
#define AMD_FMT_MOD_DCC_BLOCK_256B 2
|
||||||
|
|
||||||
|
#define AMD_FMT_MOD_TILE_VERSION_SHIFT 0
|
||||||
|
#define AMD_FMT_MOD_TILE_VERSION_MASK 0xFF
|
||||||
|
#define AMD_FMT_MOD_TILE_SHIFT 8
|
||||||
|
#define AMD_FMT_MOD_TILE_MASK 0x1F
|
||||||
|
|
||||||
|
/* Whether DCC compression is enabled. */
|
||||||
|
#define AMD_FMT_MOD_DCC_SHIFT 13
|
||||||
|
#define AMD_FMT_MOD_DCC_MASK 0x1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Whether to include two DCC surfaces, one which is rb & pipe aligned, and
|
||||||
|
* one which is not-aligned.
|
||||||
|
*/
|
||||||
|
#define AMD_FMT_MOD_DCC_RETILE_SHIFT 14
|
||||||
|
#define AMD_FMT_MOD_DCC_RETILE_MASK 0x1
|
||||||
|
|
||||||
|
/* Only set if DCC_RETILE = false */
|
||||||
|
#define AMD_FMT_MOD_DCC_PIPE_ALIGN_SHIFT 15
|
||||||
|
#define AMD_FMT_MOD_DCC_PIPE_ALIGN_MASK 0x1
|
||||||
|
|
||||||
|
#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_SHIFT 16
|
||||||
|
#define AMD_FMT_MOD_DCC_INDEPENDENT_64B_MASK 0x1
|
||||||
|
#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_SHIFT 17
|
||||||
|
#define AMD_FMT_MOD_DCC_INDEPENDENT_128B_MASK 0x1
|
||||||
|
#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_SHIFT 18
|
||||||
|
#define AMD_FMT_MOD_DCC_MAX_COMPRESSED_BLOCK_MASK 0x3
|
||||||
|
|
||||||
|
/*
|
||||||
|
* DCC supports embedding some clear colors directly in the DCC surface.
|
||||||
|
* However, on older GPUs the rendering HW ignores the embedded clear color
|
||||||
|
* and prefers the driver provided color. This necessitates doing a fastclear
|
||||||
|
* eliminate operation before a process transfers control.
|
||||||
|
*
|
||||||
|
* If this bit is set that means the fastclear eliminate is not needed for these
|
||||||
|
* embeddable colors.
|
||||||
|
*/
|
||||||
|
#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_SHIFT 20
|
||||||
|
#define AMD_FMT_MOD_DCC_CONSTANT_ENCODE_MASK 0x1
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The below fields are for accounting for per GPU differences. These are only
|
||||||
|
* relevant for GFX9 and later and if the tile field is *_X/_T.
|
||||||
|
*
|
||||||
|
* PIPE_XOR_BITS = always needed
|
||||||
|
* BANK_XOR_BITS = only for TILE_VER_GFX9
|
||||||
|
* PACKERS = only for TILE_VER_GFX10_RBPLUS
|
||||||
|
* RB = only for TILE_VER_GFX9 & DCC
|
||||||
|
* PIPE = only for TILE_VER_GFX9 & DCC & (DCC_RETILE | DCC_PIPE_ALIGN)
|
||||||
|
*/
|
||||||
|
#define AMD_FMT_MOD_PIPE_XOR_BITS_SHIFT 21
|
||||||
|
#define AMD_FMT_MOD_PIPE_XOR_BITS_MASK 0x7
|
||||||
|
#define AMD_FMT_MOD_BANK_XOR_BITS_SHIFT 24
|
||||||
|
#define AMD_FMT_MOD_BANK_XOR_BITS_MASK 0x7
|
||||||
|
#define AMD_FMT_MOD_PACKERS_SHIFT 27
|
||||||
|
#define AMD_FMT_MOD_PACKERS_MASK 0x7
|
||||||
|
#define AMD_FMT_MOD_RB_SHIFT 30
|
||||||
|
#define AMD_FMT_MOD_RB_MASK 0x7
|
||||||
|
#define AMD_FMT_MOD_PIPE_SHIFT 33
|
||||||
|
#define AMD_FMT_MOD_PIPE_MASK 0x7
|
||||||
|
|
||||||
|
#define AMD_FMT_MOD_SET(field, value) \
|
||||||
|
((uint64_t)(value) << AMD_FMT_MOD_##field##_SHIFT)
|
||||||
|
#define AMD_FMT_MOD_GET(field, value) \
|
||||||
|
(((value) >> AMD_FMT_MOD_##field##_SHIFT) & AMD_FMT_MOD_##field##_MASK)
|
||||||
|
#define AMD_FMT_MOD_CLEAR(field) \
|
||||||
|
(~((uint64_t)AMD_FMT_MOD_##field##_MASK << AMD_FMT_MOD_##field##_SHIFT))
|
||||||
|
|
||||||
/* Mobile Industry Processor Interface (MIPI) modifiers */
|
/* Mobile Industry Processor Interface (MIPI) modifiers */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -120,13 +120,13 @@ struct ipu3_uapi_awb_config {
|
||||||
#define IPU3_UAPI_AE_WEIGHTS 96
|
#define IPU3_UAPI_AE_WEIGHTS 96
|
||||||
|
|
||||||
/**
|
/**
|
||||||
+ * struct ipu3_uapi_ae_raw_buffer - AE global weighted histogram
|
* struct ipu3_uapi_ae_raw_buffer - AE global weighted histogram
|
||||||
+ *
|
*
|
||||||
+ * @vals: Sum of IPU3_UAPI_AE_COLORS in cell
|
* @vals: Sum of IPU3_UAPI_AE_COLORS in cell
|
||||||
+ *
|
*
|
||||||
+ * Each histogram contains IPU3_UAPI_AE_BINS bins. Each bin has 24 bit unsigned
|
* Each histogram contains IPU3_UAPI_AE_BINS bins. Each bin has 24 bit unsigned
|
||||||
+ * for counting the number of the pixel.
|
* for counting the number of the pixel.
|
||||||
+ */
|
*/
|
||||||
struct ipu3_uapi_ae_raw_buffer {
|
struct ipu3_uapi_ae_raw_buffer {
|
||||||
__u32 vals[IPU3_UAPI_AE_BINS * IPU3_UAPI_AE_COLORS];
|
__u32 vals[IPU3_UAPI_AE_BINS * IPU3_UAPI_AE_COLORS];
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
@ -418,7 +418,7 @@ struct ipu3_uapi_af_config_s {
|
||||||
IPU3_UAPI_AWB_FR_SPARE_FOR_BUBBLES) * IPU3_UAPI_MAX_STRIPES)
|
IPU3_UAPI_AWB_FR_SPARE_FOR_BUBBLES) * IPU3_UAPI_MAX_STRIPES)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ipu3_uapi_awb_fr_meta_data - AWB filter response meta data
|
* struct ipu3_uapi_awb_fr_raw_buffer - AWB filter response meta data
|
||||||
*
|
*
|
||||||
* @meta_data: Statistics output on the grid after convolving with 1D filter.
|
* @meta_data: Statistics output on the grid after convolving with 1D filter.
|
||||||
*/
|
*/
|
||||||
|
@ -1506,7 +1506,7 @@ struct ipu3_uapi_sharp_cfg {
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct struct ipu3_uapi_far_w - Sharpening config for far sub-group
|
* struct ipu3_uapi_far_w - Sharpening config for far sub-group
|
||||||
*
|
*
|
||||||
* @dir_shrp: Weight of wide direct sharpening, u1.6, range [0, 64], default 64.
|
* @dir_shrp: Weight of wide direct sharpening, u1.6, range [0, 64], default 64.
|
||||||
* @reserved0: reserved
|
* @reserved0: reserved
|
||||||
|
@ -1526,7 +1526,7 @@ struct ipu3_uapi_far_w {
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct struct ipu3_uapi_unsharp_cfg - Unsharp config
|
* struct ipu3_uapi_unsharp_cfg - Unsharp config
|
||||||
*
|
*
|
||||||
* @unsharp_weight: Unsharp mask blending weight.
|
* @unsharp_weight: Unsharp mask blending weight.
|
||||||
* u1.6, range [0, 64], default 16.
|
* u1.6, range [0, 64], default 16.
|
||||||
|
@ -1772,7 +1772,7 @@ struct ipu3_uapi_vss_lut_y {
|
||||||
} __attribute__((packed));
|
} __attribute__((packed));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct ipu3_uapi_yuvp1_iefd_vssnlm_cf - IEFd Vssnlm Lookup table
|
* struct ipu3_uapi_yuvp1_iefd_vssnlm_cfg - IEFd Vssnlm Lookup table
|
||||||
*
|
*
|
||||||
* @vss_lut_x: vss lookup table. See &ipu3_uapi_vss_lut_x description
|
* @vss_lut_x: vss lookup table. See &ipu3_uapi_vss_lut_x description
|
||||||
* @vss_lut_y: vss lookup table. See &ipu3_uapi_vss_lut_y description
|
* @vss_lut_y: vss lookup table. See &ipu3_uapi_vss_lut_y description
|
||||||
|
|
|
@ -34,7 +34,7 @@
|
||||||
|
|
||||||
#define MEDIA_BUS_FMT_FIXED 0x0001
|
#define MEDIA_BUS_FMT_FIXED 0x0001
|
||||||
|
|
||||||
/* RGB - next is 0x101d */
|
/* RGB - next is 0x101e */
|
||||||
#define MEDIA_BUS_FMT_RGB444_1X12 0x1016
|
#define MEDIA_BUS_FMT_RGB444_1X12 0x1016
|
||||||
#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE 0x1001
|
#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_BE 0x1001
|
||||||
#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE 0x1002
|
#define MEDIA_BUS_FMT_RGB444_2X8_PADHI_LE 0x1002
|
||||||
|
@ -56,6 +56,7 @@
|
||||||
#define MEDIA_BUS_FMT_RGB888_2X12_BE 0x100b
|
#define MEDIA_BUS_FMT_RGB888_2X12_BE 0x100b
|
||||||
#define MEDIA_BUS_FMT_RGB888_2X12_LE 0x100c
|
#define MEDIA_BUS_FMT_RGB888_2X12_LE 0x100c
|
||||||
#define MEDIA_BUS_FMT_RGB888_3X8 0x101c
|
#define MEDIA_BUS_FMT_RGB888_3X8 0x101c
|
||||||
|
#define MEDIA_BUS_FMT_RGB888_3X8_DELTA 0x101d
|
||||||
#define MEDIA_BUS_FMT_RGB888_1X7X4_SPWG 0x1011
|
#define MEDIA_BUS_FMT_RGB888_1X7X4_SPWG 0x1011
|
||||||
#define MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA 0x1012
|
#define MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA 0x1012
|
||||||
#define MEDIA_BUS_FMT_ARGB8888_1X32 0x100d
|
#define MEDIA_BUS_FMT_ARGB8888_1X32 0x100d
|
||||||
|
@ -64,7 +65,7 @@
|
||||||
#define MEDIA_BUS_FMT_RGB121212_1X36 0x1019
|
#define MEDIA_BUS_FMT_RGB121212_1X36 0x1019
|
||||||
#define MEDIA_BUS_FMT_RGB161616_1X48 0x101a
|
#define MEDIA_BUS_FMT_RGB161616_1X48 0x101a
|
||||||
|
|
||||||
/* YUV (including grey) - next is 0x202d */
|
/* YUV (including grey) - next is 0x202e */
|
||||||
#define MEDIA_BUS_FMT_Y8_1X8 0x2001
|
#define MEDIA_BUS_FMT_Y8_1X8 0x2001
|
||||||
#define MEDIA_BUS_FMT_UV8_1X8 0x2015
|
#define MEDIA_BUS_FMT_UV8_1X8 0x2015
|
||||||
#define MEDIA_BUS_FMT_UYVY8_1_5X8 0x2002
|
#define MEDIA_BUS_FMT_UYVY8_1_5X8 0x2002
|
||||||
|
@ -86,6 +87,7 @@
|
||||||
#define MEDIA_BUS_FMT_VYUY12_2X12 0x201d
|
#define MEDIA_BUS_FMT_VYUY12_2X12 0x201d
|
||||||
#define MEDIA_BUS_FMT_YUYV12_2X12 0x201e
|
#define MEDIA_BUS_FMT_YUYV12_2X12 0x201e
|
||||||
#define MEDIA_BUS_FMT_YVYU12_2X12 0x201f
|
#define MEDIA_BUS_FMT_YVYU12_2X12 0x201f
|
||||||
|
#define MEDIA_BUS_FMT_Y14_1X14 0x202d
|
||||||
#define MEDIA_BUS_FMT_UYVY8_1X16 0x200f
|
#define MEDIA_BUS_FMT_UYVY8_1X16 0x200f
|
||||||
#define MEDIA_BUS_FMT_VYUY8_1X16 0x2010
|
#define MEDIA_BUS_FMT_VYUY8_1X16 0x2010
|
||||||
#define MEDIA_BUS_FMT_YUYV8_1X16 0x2011
|
#define MEDIA_BUS_FMT_YUYV8_1X16 0x2011
|
||||||
|
@ -155,4 +157,12 @@
|
||||||
/* HSV - next is 0x6002 */
|
/* HSV - next is 0x6002 */
|
||||||
#define MEDIA_BUS_FMT_AHSV8888_1X32 0x6001
|
#define MEDIA_BUS_FMT_AHSV8888_1X32 0x6001
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This format should be used when the same driver handles
|
||||||
|
* both sides of the link and the bus format is a fixed
|
||||||
|
* metadata format that is not configurable from userspace.
|
||||||
|
* Width and height will be set to 0 for this format.
|
||||||
|
*/
|
||||||
|
#define MEDIA_BUS_FMT_METADATA_FIXED 0x7001
|
||||||
|
|
||||||
#endif /* __LINUX_MEDIA_BUS_FORMAT_H */
|
#endif /* __LINUX_MEDIA_BUS_FORMAT_H */
|
||||||
|
|
|
@ -125,6 +125,7 @@ struct media_device_info {
|
||||||
#define MEDIA_ENT_F_PROC_VIDEO_STATISTICS (MEDIA_ENT_F_BASE + 0x4006)
|
#define MEDIA_ENT_F_PROC_VIDEO_STATISTICS (MEDIA_ENT_F_BASE + 0x4006)
|
||||||
#define MEDIA_ENT_F_PROC_VIDEO_ENCODER (MEDIA_ENT_F_BASE + 0x4007)
|
#define MEDIA_ENT_F_PROC_VIDEO_ENCODER (MEDIA_ENT_F_BASE + 0x4007)
|
||||||
#define MEDIA_ENT_F_PROC_VIDEO_DECODER (MEDIA_ENT_F_BASE + 0x4008)
|
#define MEDIA_ENT_F_PROC_VIDEO_DECODER (MEDIA_ENT_F_BASE + 0x4008)
|
||||||
|
#define MEDIA_ENT_F_PROC_VIDEO_ISP (MEDIA_ENT_F_BASE + 0x4009)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Switch and bridge entity functions
|
* Switch and bridge entity functions
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
/* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */
|
||||||
/*
|
/*
|
||||||
* Rockchip ISP1 userspace API
|
* Rockchip ISP1 userspace API
|
||||||
* Copyright (C) 2017 Rockchip Electronics Co., Ltd.
|
* Copyright (C) 2017 Rockchip Electronics Co., Ltd.
|
||||||
|
@ -9,10 +9,6 @@
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
/* Vendor specific - used for RK_ISP1 camera sub-system */
|
|
||||||
#define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 params */
|
|
||||||
#define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A statistics */
|
|
||||||
|
|
||||||
/* Defect Pixel Cluster Detection */
|
/* Defect Pixel Cluster Detection */
|
||||||
#define RKISP1_CIF_ISP_MODULE_DPCC (1U << 0)
|
#define RKISP1_CIF_ISP_MODULE_DPCC (1U << 0)
|
||||||
/* Black Level Subtraction */
|
/* Black Level Subtraction */
|
||||||
|
@ -53,8 +49,14 @@
|
||||||
#define RKISP1_CIF_ISP_CTK_COEFF_MAX 0x100
|
#define RKISP1_CIF_ISP_CTK_COEFF_MAX 0x100
|
||||||
#define RKISP1_CIF_ISP_CTK_OFFSET_MAX 0x800
|
#define RKISP1_CIF_ISP_CTK_OFFSET_MAX 0x800
|
||||||
|
|
||||||
#define RKISP1_CIF_ISP_AE_MEAN_MAX 25
|
#define RKISP1_CIF_ISP_AE_MEAN_MAX_V10 25
|
||||||
#define RKISP1_CIF_ISP_HIST_BIN_N_MAX 16
|
#define RKISP1_CIF_ISP_AE_MEAN_MAX_V12 81
|
||||||
|
#define RKISP1_CIF_ISP_AE_MEAN_MAX RKISP1_CIF_ISP_AE_MEAN_MAX_V12
|
||||||
|
|
||||||
|
#define RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10 16
|
||||||
|
#define RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 32
|
||||||
|
#define RKISP1_CIF_ISP_HIST_BIN_N_MAX RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12
|
||||||
|
|
||||||
#define RKISP1_CIF_ISP_AFM_MAX_WINDOWS 3
|
#define RKISP1_CIF_ISP_AFM_MAX_WINDOWS 3
|
||||||
#define RKISP1_CIF_ISP_DEGAMMA_CURVE_SIZE 17
|
#define RKISP1_CIF_ISP_DEGAMMA_CURVE_SIZE 17
|
||||||
|
|
||||||
|
@ -90,7 +92,9 @@
|
||||||
* Gamma out
|
* Gamma out
|
||||||
*/
|
*/
|
||||||
/* Maximum number of color samples supported */
|
/* Maximum number of color samples supported */
|
||||||
#define RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES 17
|
#define RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10 17
|
||||||
|
#define RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12 34
|
||||||
|
#define RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lens shade correction
|
* Lens shade correction
|
||||||
|
@ -106,8 +110,9 @@
|
||||||
/*
|
/*
|
||||||
* Histogram calculation
|
* Histogram calculation
|
||||||
*/
|
*/
|
||||||
/* Last 3 values unused. */
|
#define RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10 25
|
||||||
#define RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE 28
|
#define RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12 81
|
||||||
|
#define RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Defect Pixel Cluster Correction
|
* Defect Pixel Cluster Correction
|
||||||
|
@ -128,6 +133,21 @@
|
||||||
#define RKISP1_CIF_ISP_STAT_AFM (1U << 2)
|
#define RKISP1_CIF_ISP_STAT_AFM (1U << 2)
|
||||||
#define RKISP1_CIF_ISP_STAT_HIST (1U << 3)
|
#define RKISP1_CIF_ISP_STAT_HIST (1U << 3)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum rkisp1_cif_isp_version - ISP variants
|
||||||
|
*
|
||||||
|
* @RKISP1_V10: used at least in rk3288 and rk3399
|
||||||
|
* @RKISP1_V11: declared in the original vendor code, but not used
|
||||||
|
* @RKISP1_V12: used at least in rk3326 and px30
|
||||||
|
* @RKISP1_V13: used at least in rk1808
|
||||||
|
*/
|
||||||
|
enum rkisp1_cif_isp_version {
|
||||||
|
RKISP1_V10 = 10,
|
||||||
|
RKISP1_V11,
|
||||||
|
RKISP1_V12,
|
||||||
|
RKISP1_V13,
|
||||||
|
};
|
||||||
|
|
||||||
enum rkisp1_cif_isp_histogram_mode {
|
enum rkisp1_cif_isp_histogram_mode {
|
||||||
RKISP1_CIF_ISP_HISTOGRAM_MODE_DISABLE,
|
RKISP1_CIF_ISP_HISTOGRAM_MODE_DISABLE,
|
||||||
RKISP1_CIF_ISP_HISTOGRAM_MODE_RGB_COMBINED,
|
RKISP1_CIF_ISP_HISTOGRAM_MODE_RGB_COMBINED,
|
||||||
|
@ -514,6 +534,15 @@ enum rkisp1_cif_isp_goc_mode {
|
||||||
*
|
*
|
||||||
* @mode: goc mode (from enum rkisp1_cif_isp_goc_mode)
|
* @mode: goc mode (from enum rkisp1_cif_isp_goc_mode)
|
||||||
* @gamma_y: gamma out curve y-axis for all color components
|
* @gamma_y: gamma out curve y-axis for all color components
|
||||||
|
*
|
||||||
|
* The number of entries of @gamma_y depends on the hardware revision
|
||||||
|
* as is reported by the hw_revision field of the struct media_device_info
|
||||||
|
* that is returned by ioctl MEDIA_IOC_DEVICE_INFO.
|
||||||
|
*
|
||||||
|
* Versions <= V11 have RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V10
|
||||||
|
* entries, versions >= V12 have RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES_V12
|
||||||
|
* entries. RKISP1_CIF_ISP_GAMMA_OUT_MAX_SAMPLES is equal to the maximum
|
||||||
|
* of the two.
|
||||||
*/
|
*/
|
||||||
struct rkisp1_cif_isp_goc_config {
|
struct rkisp1_cif_isp_goc_config {
|
||||||
__u32 mode;
|
__u32 mode;
|
||||||
|
@ -528,6 +557,15 @@ struct rkisp1_cif_isp_goc_config {
|
||||||
* skipped
|
* skipped
|
||||||
* @meas_window: coordinates of the measure window
|
* @meas_window: coordinates of the measure window
|
||||||
* @hist_weight: weighting factor for sub-windows
|
* @hist_weight: weighting factor for sub-windows
|
||||||
|
*
|
||||||
|
* The number of entries of @hist_weight depends on the hardware revision
|
||||||
|
* as is reported by the hw_revision field of the struct media_device_info
|
||||||
|
* that is returned by ioctl MEDIA_IOC_DEVICE_INFO.
|
||||||
|
*
|
||||||
|
* Versions <= V11 have RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V10
|
||||||
|
* entries, versions >= V12 have RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE_V12
|
||||||
|
* entries. RKISP1_CIF_ISP_HISTOGRAM_WEIGHT_GRIDS_SIZE is equal to the maximum
|
||||||
|
* of the two.
|
||||||
*/
|
*/
|
||||||
struct rkisp1_cif_isp_hst_config {
|
struct rkisp1_cif_isp_hst_config {
|
||||||
__u32 mode;
|
__u32 mode;
|
||||||
|
@ -815,7 +853,15 @@ struct rkisp1_cif_isp_bls_meas_val {
|
||||||
* @exp_mean: Mean luminance value of block xx
|
* @exp_mean: Mean luminance value of block xx
|
||||||
* @bls_val: BLS measured values
|
* @bls_val: BLS measured values
|
||||||
*
|
*
|
||||||
* Image is divided into 5x5 blocks.
|
* The number of entries of @exp_mean depends on the hardware revision
|
||||||
|
* as is reported by the hw_revision field of the struct media_device_info
|
||||||
|
* that is returned by ioctl MEDIA_IOC_DEVICE_INFO.
|
||||||
|
*
|
||||||
|
* Versions <= V11 have RKISP1_CIF_ISP_AE_MEAN_MAX_V10 entries,
|
||||||
|
* versions >= V12 have RKISP1_CIF_ISP_AE_MEAN_MAX_V12 entries.
|
||||||
|
* RKISP1_CIF_ISP_AE_MEAN_MAX is equal to the maximum of the two.
|
||||||
|
*
|
||||||
|
* Image is divided into 5x5 blocks on V10 and 9x9 blocks on V12.
|
||||||
*/
|
*/
|
||||||
struct rkisp1_cif_isp_ae_stat {
|
struct rkisp1_cif_isp_ae_stat {
|
||||||
__u8 exp_mean[RKISP1_CIF_ISP_AE_MEAN_MAX];
|
__u8 exp_mean[RKISP1_CIF_ISP_AE_MEAN_MAX];
|
||||||
|
@ -848,13 +894,29 @@ struct rkisp1_cif_isp_af_stat {
|
||||||
/**
|
/**
|
||||||
* struct rkisp1_cif_isp_hist_stat - statistics histogram data
|
* struct rkisp1_cif_isp_hist_stat - statistics histogram data
|
||||||
*
|
*
|
||||||
* @hist_bins: measured bin counters
|
* @hist_bins: measured bin counters. Each bin is a 20 bits unsigned fixed point
|
||||||
|
* type. Bits 0-4 are the fractional part and bits 5-19 are the
|
||||||
|
* integer part.
|
||||||
*
|
*
|
||||||
* Measurement window divided into 25 sub-windows, set
|
* The window of the measurements area is divided to 5x5 sub-windows for
|
||||||
* with ISP_HIST_XXX
|
* V10/V11 and to 9x9 sub-windows for V12. The histogram is then computed for
|
||||||
|
* each sub-window independently and the final result is a weighted average of
|
||||||
|
* the histogram measurements on all sub-windows. The window of the
|
||||||
|
* measurements area and the weight of each sub-window are configurable using
|
||||||
|
* struct @rkisp1_cif_isp_hst_config.
|
||||||
|
*
|
||||||
|
* The histogram contains 16 bins in V10/V11 and 32 bins in V12/V13.
|
||||||
|
*
|
||||||
|
* The number of entries of @hist_bins depends on the hardware revision
|
||||||
|
* as is reported by the hw_revision field of the struct media_device_info
|
||||||
|
* that is returned by ioctl MEDIA_IOC_DEVICE_INFO.
|
||||||
|
*
|
||||||
|
* Versions <= V11 have RKISP1_CIF_ISP_HIST_BIN_N_MAX_V10 entries,
|
||||||
|
* versions >= V12 have RKISP1_CIF_ISP_HIST_BIN_N_MAX_V12 entries.
|
||||||
|
* RKISP1_CIF_ISP_HIST_BIN_N_MAX is equal to the maximum of the two.
|
||||||
*/
|
*/
|
||||||
struct rkisp1_cif_isp_hist_stat {
|
struct rkisp1_cif_isp_hist_stat {
|
||||||
__u16 hist_bins[RKISP1_CIF_ISP_HIST_BIN_N_MAX];
|
__u32 hist_bins[RKISP1_CIF_ISP_HIST_BIN_N_MAX];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -16,6 +16,8 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/videodev2.h>
|
#include <linux/videodev2.h>
|
||||||
|
|
||||||
|
#define V4L2_MBUS_FRAMEFMT_SET_CSC 0x0001
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct v4l2_mbus_framefmt - frame format on the media bus
|
* struct v4l2_mbus_framefmt - frame format on the media bus
|
||||||
* @width: image width
|
* @width: image width
|
||||||
|
@ -24,8 +26,11 @@
|
||||||
* @field: used interlacing type (from enum v4l2_field)
|
* @field: used interlacing type (from enum v4l2_field)
|
||||||
* @colorspace: colorspace of the data (from enum v4l2_colorspace)
|
* @colorspace: colorspace of the data (from enum v4l2_colorspace)
|
||||||
* @ycbcr_enc: YCbCr encoding of the data (from enum v4l2_ycbcr_encoding)
|
* @ycbcr_enc: YCbCr encoding of the data (from enum v4l2_ycbcr_encoding)
|
||||||
|
* @hsv_enc: HSV encoding of the data (from enum v4l2_hsv_encoding)
|
||||||
* @quantization: quantization of the data (from enum v4l2_quantization)
|
* @quantization: quantization of the data (from enum v4l2_quantization)
|
||||||
* @xfer_func: transfer function of the data (from enum v4l2_xfer_func)
|
* @xfer_func: transfer function of the data (from enum v4l2_xfer_func)
|
||||||
|
* @flags: flags (V4L2_MBUS_FRAMEFMT_*)
|
||||||
|
* @reserved: reserved bytes that can be later used
|
||||||
*/
|
*/
|
||||||
struct v4l2_mbus_framefmt {
|
struct v4l2_mbus_framefmt {
|
||||||
__u32 width;
|
__u32 width;
|
||||||
|
@ -33,10 +38,16 @@ struct v4l2_mbus_framefmt {
|
||||||
__u32 code;
|
__u32 code;
|
||||||
__u32 field;
|
__u32 field;
|
||||||
__u32 colorspace;
|
__u32 colorspace;
|
||||||
__u16 ycbcr_enc;
|
union {
|
||||||
|
/* enum v4l2_ycbcr_encoding */
|
||||||
|
__u16 ycbcr_enc;
|
||||||
|
/* enum v4l2_hsv_encoding */
|
||||||
|
__u16 hsv_enc;
|
||||||
|
};
|
||||||
__u16 quantization;
|
__u16 quantization;
|
||||||
__u16 xfer_func;
|
__u16 xfer_func;
|
||||||
__u16 reserved[11];
|
__u16 flags;
|
||||||
|
__u16 reserved[10];
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -65,19 +65,27 @@ struct v4l2_subdev_crop {
|
||||||
__u32 reserved[8];
|
__u32 reserved[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define V4L2_SUBDEV_MBUS_CODE_CSC_COLORSPACE 0x00000001
|
||||||
|
#define V4L2_SUBDEV_MBUS_CODE_CSC_XFER_FUNC 0x00000002
|
||||||
|
#define V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC 0x00000004
|
||||||
|
#define V4L2_SUBDEV_MBUS_CODE_CSC_HSV_ENC V4L2_SUBDEV_MBUS_CODE_CSC_YCBCR_ENC
|
||||||
|
#define V4L2_SUBDEV_MBUS_CODE_CSC_QUANTIZATION 0x00000008
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
|
* struct v4l2_subdev_mbus_code_enum - Media bus format enumeration
|
||||||
* @pad: pad number, as reported by the media API
|
* @pad: pad number, as reported by the media API
|
||||||
* @index: format index during enumeration
|
* @index: format index during enumeration
|
||||||
* @code: format code (MEDIA_BUS_FMT_ definitions)
|
* @code: format code (MEDIA_BUS_FMT_ definitions)
|
||||||
* @which: format type (from enum v4l2_subdev_format_whence)
|
* @which: format type (from enum v4l2_subdev_format_whence)
|
||||||
|
* @flags: flags set by the driver, (V4L2_SUBDEV_MBUS_CODE_*)
|
||||||
*/
|
*/
|
||||||
struct v4l2_subdev_mbus_code_enum {
|
struct v4l2_subdev_mbus_code_enum {
|
||||||
__u32 pad;
|
__u32 pad;
|
||||||
__u32 index;
|
__u32 index;
|
||||||
__u32 code;
|
__u32 code;
|
||||||
__u32 which;
|
__u32 which;
|
||||||
__u32 reserved[8];
|
__u32 flags;
|
||||||
|
__u32 reserved[7];
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -155,9 +163,25 @@ struct v4l2_subdev_selection {
|
||||||
__u32 reserved[8];
|
__u32 reserved[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct v4l2_subdev_capability - subdev capabilities
|
||||||
|
* @version: the driver versioning number
|
||||||
|
* @capabilities: the subdev capabilities, see V4L2_SUBDEV_CAP_*
|
||||||
|
* @reserved: for future use, set to zero for now
|
||||||
|
*/
|
||||||
|
struct v4l2_subdev_capability {
|
||||||
|
__u32 version;
|
||||||
|
__u32 capabilities;
|
||||||
|
__u32 reserved[14];
|
||||||
|
};
|
||||||
|
|
||||||
|
/* The v4l2 sub-device video device node is registered in read-only mode. */
|
||||||
|
#define V4L2_SUBDEV_CAP_RO_SUBDEV 0x00000001
|
||||||
|
|
||||||
/* Backwards compatibility define --- to be removed */
|
/* Backwards compatibility define --- to be removed */
|
||||||
#define v4l2_subdev_edid v4l2_edid
|
#define v4l2_subdev_edid v4l2_edid
|
||||||
|
|
||||||
|
#define VIDIOC_SUBDEV_QUERYCAP _IOR('V', 0, struct v4l2_subdev_capability)
|
||||||
#define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format)
|
#define VIDIOC_SUBDEV_G_FMT _IOWR('V', 4, struct v4l2_subdev_format)
|
||||||
#define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format)
|
#define VIDIOC_SUBDEV_S_FMT _IOWR('V', 5, struct v4l2_subdev_format)
|
||||||
#define VIDIOC_SUBDEV_G_FRAME_INTERVAL _IOWR('V', 21, struct v4l2_subdev_frame_interval)
|
#define VIDIOC_SUBDEV_G_FRAME_INTERVAL _IOWR('V', 21, struct v4l2_subdev_frame_interval)
|
||||||
|
|
|
@ -169,6 +169,8 @@ enum v4l2_buf_type {
|
||||||
|| (type) == V4L2_BUF_TYPE_SDR_OUTPUT \
|
|| (type) == V4L2_BUF_TYPE_SDR_OUTPUT \
|
||||||
|| (type) == V4L2_BUF_TYPE_META_OUTPUT)
|
|| (type) == V4L2_BUF_TYPE_META_OUTPUT)
|
||||||
|
|
||||||
|
#define V4L2_TYPE_IS_CAPTURE(type) (!V4L2_TYPE_IS_OUTPUT(type))
|
||||||
|
|
||||||
enum v4l2_tuner_type {
|
enum v4l2_tuner_type {
|
||||||
V4L2_TUNER_RADIO = 1,
|
V4L2_TUNER_RADIO = 1,
|
||||||
V4L2_TUNER_ANALOG_TV = 2,
|
V4L2_TUNER_ANALOG_TV = 2,
|
||||||
|
@ -217,9 +219,7 @@ enum v4l2_colorspace {
|
||||||
V4L2_COLORSPACE_470_SYSTEM_M = 5,
|
V4L2_COLORSPACE_470_SYSTEM_M = 5,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* EBU Tech 3213 PAL/SECAM colorspace. This only makes sense when
|
* EBU Tech 3213 PAL/SECAM colorspace.
|
||||||
* dealing with really old PAL/SECAM recordings. Superseded by
|
|
||||||
* SMPTE 170M.
|
|
||||||
*/
|
*/
|
||||||
V4L2_COLORSPACE_470_SYSTEM_BG = 6,
|
V4L2_COLORSPACE_470_SYSTEM_BG = 6,
|
||||||
|
|
||||||
|
@ -367,9 +367,9 @@ enum v4l2_hsv_encoding {
|
||||||
|
|
||||||
enum v4l2_quantization {
|
enum v4l2_quantization {
|
||||||
/*
|
/*
|
||||||
* The default for R'G'B' quantization is always full range, except
|
* The default for R'G'B' quantization is always full range.
|
||||||
* for the BT2020 colorspace. For Y'CbCr the quantization is always
|
* For Y'CbCr the quantization is always limited range, except
|
||||||
* limited range, except for COLORSPACE_JPEG: this is full range.
|
* for COLORSPACE_JPEG: this is full range.
|
||||||
*/
|
*/
|
||||||
V4L2_QUANTIZATION_DEFAULT = 0,
|
V4L2_QUANTIZATION_DEFAULT = 0,
|
||||||
V4L2_QUANTIZATION_FULL_RANGE = 1,
|
V4L2_QUANTIZATION_FULL_RANGE = 1,
|
||||||
|
@ -378,14 +378,13 @@ enum v4l2_quantization {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
|
* Determine how QUANTIZATION_DEFAULT should map to a proper quantization.
|
||||||
* This depends on whether the image is RGB or not, the colorspace and the
|
* This depends on whether the image is RGB or not, the colorspace.
|
||||||
* Y'CbCr encoding.
|
* The Y'CbCr encoding is not used anymore, but is still there for backwards
|
||||||
|
* compatibility.
|
||||||
*/
|
*/
|
||||||
#define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb_or_hsv, colsp, ycbcr_enc) \
|
#define V4L2_MAP_QUANTIZATION_DEFAULT(is_rgb_or_hsv, colsp, ycbcr_enc) \
|
||||||
(((is_rgb_or_hsv) && (colsp) == V4L2_COLORSPACE_BT2020) ? \
|
(((is_rgb_or_hsv) || (colsp) == V4L2_COLORSPACE_JPEG) ? \
|
||||||
V4L2_QUANTIZATION_LIM_RANGE : \
|
V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE)
|
||||||
(((is_rgb_or_hsv) || (colsp) == V4L2_COLORSPACE_JPEG) ? \
|
|
||||||
V4L2_QUANTIZATION_FULL_RANGE : V4L2_QUANTIZATION_LIM_RANGE))
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Deprecated names for opRGB colorspace (IEC 61966-2-5)
|
* Deprecated names for opRGB colorspace (IEC 61966-2-5)
|
||||||
|
@ -416,6 +415,11 @@ struct v4l2_fract {
|
||||||
__u32 denominator;
|
__u32 denominator;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct v4l2_area {
|
||||||
|
__u32 width;
|
||||||
|
__u32 height;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
|
* struct v4l2_capability - Describes V4L2 device caps returned by VIDIOC_QUERYCAP
|
||||||
*
|
*
|
||||||
|
@ -505,7 +509,7 @@ struct v4l2_pix_format {
|
||||||
|
|
||||||
/* Pixel format FOURCC depth Description */
|
/* Pixel format FOURCC depth Description */
|
||||||
|
|
||||||
/* RGB formats */
|
/* RGB formats (1 or 2 bytes per pixel) */
|
||||||
#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */
|
#define V4L2_PIX_FMT_RGB332 v4l2_fourcc('R', 'G', 'B', '1') /* 8 RGB-3-3-2 */
|
||||||
#define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */
|
#define V4L2_PIX_FMT_RGB444 v4l2_fourcc('R', '4', '4', '4') /* 16 xxxxrrrr ggggbbbb */
|
||||||
#define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */
|
#define V4L2_PIX_FMT_ARGB444 v4l2_fourcc('A', 'R', '1', '2') /* 16 aaaarrrr ggggbbbb */
|
||||||
|
@ -514,12 +518,6 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2') /* 16 rrrrgggg bbbbxxxx */
|
#define V4L2_PIX_FMT_RGBX444 v4l2_fourcc('R', 'X', '1', '2') /* 16 rrrrgggg bbbbxxxx */
|
||||||
#define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2') /* 16 aaaabbbb ggggrrrr */
|
#define V4L2_PIX_FMT_ABGR444 v4l2_fourcc('A', 'B', '1', '2') /* 16 aaaabbbb ggggrrrr */
|
||||||
#define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2') /* 16 xxxxbbbb ggggrrrr */
|
#define V4L2_PIX_FMT_XBGR444 v4l2_fourcc('X', 'B', '1', '2') /* 16 xxxxbbbb ggggrrrr */
|
||||||
|
|
||||||
/*
|
|
||||||
* Originally this had 'BA12' as fourcc, but this clashed with the older
|
|
||||||
* V4L2_PIX_FMT_SGRBG12 which inexplicably used that same fourcc.
|
|
||||||
* So use 'GA12' instead for V4L2_PIX_FMT_BGRA444.
|
|
||||||
*/
|
|
||||||
#define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2') /* 16 bbbbgggg rrrraaaa */
|
#define V4L2_PIX_FMT_BGRA444 v4l2_fourcc('G', 'A', '1', '2') /* 16 bbbbgggg rrrraaaa */
|
||||||
#define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2') /* 16 bbbbgggg rrrrxxxx */
|
#define V4L2_PIX_FMT_BGRX444 v4l2_fourcc('B', 'X', '1', '2') /* 16 bbbbgggg rrrrxxxx */
|
||||||
#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */
|
#define V4L2_PIX_FMT_RGB555 v4l2_fourcc('R', 'G', 'B', 'O') /* 16 RGB-5-5-5 */
|
||||||
|
@ -536,6 +534,8 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16 ARGB-5-5-5 BE */
|
#define V4L2_PIX_FMT_ARGB555X v4l2_fourcc_be('A', 'R', '1', '5') /* 16 ARGB-5-5-5 BE */
|
||||||
#define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16 XRGB-5-5-5 BE */
|
#define V4L2_PIX_FMT_XRGB555X v4l2_fourcc_be('X', 'R', '1', '5') /* 16 XRGB-5-5-5 BE */
|
||||||
#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */
|
#define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */
|
||||||
|
|
||||||
|
/* RGB formats (3 or 4 bytes per pixel) */
|
||||||
#define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */
|
#define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */
|
||||||
#define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */
|
#define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */
|
||||||
#define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */
|
#define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */
|
||||||
|
@ -556,6 +556,7 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */
|
#define V4L2_PIX_FMT_Y6 v4l2_fourcc('Y', '0', '6', ' ') /* 6 Greyscale */
|
||||||
#define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
|
#define V4L2_PIX_FMT_Y10 v4l2_fourcc('Y', '1', '0', ' ') /* 10 Greyscale */
|
||||||
#define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */
|
#define V4L2_PIX_FMT_Y12 v4l2_fourcc('Y', '1', '2', ' ') /* 12 Greyscale */
|
||||||
|
#define V4L2_PIX_FMT_Y14 v4l2_fourcc('Y', '1', '4', ' ') /* 14 Greyscale */
|
||||||
#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
|
#define V4L2_PIX_FMT_Y16 v4l2_fourcc('Y', '1', '6', ' ') /* 16 Greyscale */
|
||||||
#define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ') /* 16 Greyscale BE */
|
#define V4L2_PIX_FMT_Y16_BE v4l2_fourcc_be('Y', '1', '6', ' ') /* 16 Greyscale BE */
|
||||||
|
|
||||||
|
@ -584,8 +585,6 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_XYUV32 v4l2_fourcc('X', 'Y', 'U', 'V') /* 32 XYUV-8-8-8-8 */
|
#define V4L2_PIX_FMT_XYUV32 v4l2_fourcc('X', 'Y', 'U', 'V') /* 32 XYUV-8-8-8-8 */
|
||||||
#define V4L2_PIX_FMT_VUYA32 v4l2_fourcc('V', 'U', 'Y', 'A') /* 32 VUYA-8-8-8-8 */
|
#define V4L2_PIX_FMT_VUYA32 v4l2_fourcc('V', 'U', 'Y', 'A') /* 32 VUYA-8-8-8-8 */
|
||||||
#define V4L2_PIX_FMT_VUYX32 v4l2_fourcc('V', 'U', 'Y', 'X') /* 32 VUYX-8-8-8-8 */
|
#define V4L2_PIX_FMT_VUYX32 v4l2_fourcc('V', 'U', 'Y', 'X') /* 32 VUYX-8-8-8-8 */
|
||||||
#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* 8 8-bit color */
|
|
||||||
#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */
|
|
||||||
#define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */
|
#define V4L2_PIX_FMT_M420 v4l2_fourcc('M', '4', '2', '0') /* 12 YUV 4:2:0 2 lines y, 1 line uv interleaved */
|
||||||
|
|
||||||
/* two planes -- one Y, one Cr + Cb interleaved */
|
/* two planes -- one Y, one Cr + Cb interleaved */
|
||||||
|
@ -595,6 +594,7 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
|
#define V4L2_PIX_FMT_NV61 v4l2_fourcc('N', 'V', '6', '1') /* 16 Y/CrCb 4:2:2 */
|
||||||
#define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */
|
#define V4L2_PIX_FMT_NV24 v4l2_fourcc('N', 'V', '2', '4') /* 24 Y/CbCr 4:4:4 */
|
||||||
#define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */
|
#define V4L2_PIX_FMT_NV42 v4l2_fourcc('N', 'V', '4', '2') /* 24 Y/CrCb 4:4:4 */
|
||||||
|
#define V4L2_PIX_FMT_HM12 v4l2_fourcc('H', 'M', '1', '2') /* 8 YUV 4:2:0 16x16 macroblocks */
|
||||||
|
|
||||||
/* two non contiguous planes - one Y, one Cr + Cb interleaved */
|
/* two non contiguous planes - one Y, one Cr + Cb interleaved */
|
||||||
#define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */
|
#define V4L2_PIX_FMT_NV12M v4l2_fourcc('N', 'M', '1', '2') /* 12 Y/CbCr 4:2:0 */
|
||||||
|
@ -653,6 +653,10 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
|
#define V4L2_PIX_FMT_SGBRG12P v4l2_fourcc('p', 'G', 'C', 'C')
|
||||||
#define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
|
#define V4L2_PIX_FMT_SGRBG12P v4l2_fourcc('p', 'g', 'C', 'C')
|
||||||
#define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
|
#define V4L2_PIX_FMT_SRGGB12P v4l2_fourcc('p', 'R', 'C', 'C')
|
||||||
|
#define V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4') /* 14 BGBG.. GRGR.. */
|
||||||
|
#define V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4') /* 14 GBGB.. RGRG.. */
|
||||||
|
#define V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('G', 'R', '1', '4') /* 14 GRGR.. BGBG.. */
|
||||||
|
#define V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4') /* 14 RGRG.. GBGB.. */
|
||||||
/* 14bit raw bayer packed, 7 bytes for every 4 pixels */
|
/* 14bit raw bayer packed, 7 bytes for every 4 pixels */
|
||||||
#define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
|
#define V4L2_PIX_FMT_SBGGR14P v4l2_fourcc('p', 'B', 'E', 'E')
|
||||||
#define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
|
#define V4L2_PIX_FMT_SGBRG14P v4l2_fourcc('p', 'G', 'E', 'E')
|
||||||
|
@ -688,6 +692,7 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */
|
#define V4L2_PIX_FMT_HEVC v4l2_fourcc('H', 'E', 'V', 'C') /* HEVC aka H.265 */
|
||||||
#define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */
|
#define V4L2_PIX_FMT_FWHT v4l2_fourcc('F', 'W', 'H', 'T') /* Fast Walsh Hadamard Transform (vicodec) */
|
||||||
#define V4L2_PIX_FMT_FWHT_STATELESS v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */
|
#define V4L2_PIX_FMT_FWHT_STATELESS v4l2_fourcc('S', 'F', 'W', 'H') /* Stateless FWHT (vicodec) */
|
||||||
|
#define V4L2_PIX_FMT_H264_SLICE v4l2_fourcc('S', '2', '6', '4') /* H264 parsed slices */
|
||||||
|
|
||||||
/* Vendor-specific formats */
|
/* Vendor-specific formats */
|
||||||
#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
|
#define V4L2_PIX_FMT_CPIA1 v4l2_fourcc('C', 'P', 'I', 'A') /* cpia1 YUV */
|
||||||
|
@ -723,6 +728,7 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */
|
#define V4L2_PIX_FMT_INZI v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */
|
||||||
#define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2') /* Sunxi Tiled NV12 Format */
|
#define V4L2_PIX_FMT_SUNXI_TILED_NV12 v4l2_fourcc('S', 'T', '1', '2') /* Sunxi Tiled NV12 Format */
|
||||||
#define V4L2_PIX_FMT_CNF4 v4l2_fourcc('C', 'N', 'F', '4') /* Intel 4-bit packed depth confidence information */
|
#define V4L2_PIX_FMT_CNF4 v4l2_fourcc('C', 'N', 'F', '4') /* Intel 4-bit packed depth confidence information */
|
||||||
|
#define V4L2_PIX_FMT_HI240 v4l2_fourcc('H', 'I', '2', '4') /* BTTV 8-bit dithered RGB */
|
||||||
|
|
||||||
/* 10bit raw bayer packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */
|
/* 10bit raw bayer packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */
|
||||||
#define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */
|
#define V4L2_PIX_FMT_IPU3_SBGGR10 v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */
|
||||||
|
@ -751,18 +757,20 @@ struct v4l2_pix_format {
|
||||||
#define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */
|
#define V4L2_META_FMT_VSP1_HGT v4l2_fourcc('V', 'S', 'P', 'T') /* R-Car VSP1 2-D Histogram */
|
||||||
#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
|
#define V4L2_META_FMT_UVC v4l2_fourcc('U', 'V', 'C', 'H') /* UVC Payload Header metadata */
|
||||||
#define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
|
#define V4L2_META_FMT_D4XX v4l2_fourcc('D', '4', 'X', 'X') /* D4XX Payload Header metadata */
|
||||||
|
#define V4L2_META_FMT_VIVID v4l2_fourcc('V', 'I', 'V', 'D') /* Vivid Metadata */
|
||||||
#define V4L2_META_FMT_SENSOR_DATA v4l2_fourcc('S', 'E', 'N', 'S') /* Sensor Ancillary metadata */
|
#define V4L2_META_FMT_SENSOR_DATA v4l2_fourcc('S', 'E', 'N', 'S') /* Sensor Ancillary metadata */
|
||||||
#define V4L2_META_FMT_BCM2835_ISP_STATS v4l2_fourcc('B', 'S', 'T', 'A') /* BCM2835 ISP image statistics output */
|
#define V4L2_META_FMT_BCM2835_ISP_STATS v4l2_fourcc('B', 'S', 'T', 'A') /* BCM2835 ISP image statistics output */
|
||||||
|
|
||||||
/* Vendor specific - used for RK_ISP1 camera sub-system */
|
/* Vendor specific - used for RK_ISP1 camera sub-system */
|
||||||
#define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 params */
|
#define V4L2_META_FMT_RK_ISP1_PARAMS v4l2_fourcc('R', 'K', '1', 'P') /* Rockchip ISP1 3A Parameters */
|
||||||
#define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A statistics */
|
#define V4L2_META_FMT_RK_ISP1_STAT_3A v4l2_fourcc('R', 'K', '1', 'S') /* Rockchip ISP1 3A Statistics */
|
||||||
|
|
||||||
/* priv field value to indicates that subsequent fields are valid. */
|
/* priv field value to indicates that subsequent fields are valid. */
|
||||||
#define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
|
#define V4L2_PIX_FMT_PRIV_MAGIC 0xfeedcafe
|
||||||
|
|
||||||
/* Flags */
|
/* Flags */
|
||||||
#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
|
#define V4L2_PIX_FMT_FLAG_PREMUL_ALPHA 0x00000001
|
||||||
|
#define V4L2_PIX_FMT_FLAG_SET_CSC 0x00000002
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* F O R M A T E N U M E R A T I O N
|
* F O R M A T E N U M E R A T I O N
|
||||||
|
@ -781,6 +789,12 @@ struct v4l2_fmtdesc {
|
||||||
#define V4L2_FMT_FLAG_EMULATED 0x0002
|
#define V4L2_FMT_FLAG_EMULATED 0x0002
|
||||||
#define V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM 0x0004
|
#define V4L2_FMT_FLAG_CONTINUOUS_BYTESTREAM 0x0004
|
||||||
#define V4L2_FMT_FLAG_DYN_RESOLUTION 0x0008
|
#define V4L2_FMT_FLAG_DYN_RESOLUTION 0x0008
|
||||||
|
#define V4L2_FMT_FLAG_ENC_CAP_FRAME_INTERVAL 0x0010
|
||||||
|
#define V4L2_FMT_FLAG_CSC_COLORSPACE 0x0020
|
||||||
|
#define V4L2_FMT_FLAG_CSC_XFER_FUNC 0x0040
|
||||||
|
#define V4L2_FMT_FLAG_CSC_YCBCR_ENC 0x0080
|
||||||
|
#define V4L2_FMT_FLAG_CSC_HSV_ENC V4L2_FMT_FLAG_CSC_YCBCR_ENC
|
||||||
|
#define V4L2_FMT_FLAG_CSC_QUANTIZATION 0x0100
|
||||||
|
|
||||||
/* Frame Size and frame rate enumeration */
|
/* Frame Size and frame rate enumeration */
|
||||||
/*
|
/*
|
||||||
|
@ -909,6 +923,8 @@ struct v4l2_jpegcompression {
|
||||||
/*
|
/*
|
||||||
* M E M O R Y - M A P P I N G B U F F E R S
|
* M E M O R Y - M A P P I N G B U F F E R S
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
struct v4l2_requestbuffers {
|
struct v4l2_requestbuffers {
|
||||||
__u32 count;
|
__u32 count;
|
||||||
__u32 type; /* enum v4l2_buf_type */
|
__u32 type; /* enum v4l2_buf_type */
|
||||||
|
@ -918,11 +934,13 @@ struct v4l2_requestbuffers {
|
||||||
};
|
};
|
||||||
|
|
||||||
/* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
|
/* capabilities for struct v4l2_requestbuffers and v4l2_create_buffers */
|
||||||
#define V4L2_BUF_CAP_SUPPORTS_MMAP (1 << 0)
|
#define V4L2_BUF_CAP_SUPPORTS_MMAP (1 << 0)
|
||||||
#define V4L2_BUF_CAP_SUPPORTS_USERPTR (1 << 1)
|
#define V4L2_BUF_CAP_SUPPORTS_USERPTR (1 << 1)
|
||||||
#define V4L2_BUF_CAP_SUPPORTS_DMABUF (1 << 2)
|
#define V4L2_BUF_CAP_SUPPORTS_DMABUF (1 << 2)
|
||||||
#define V4L2_BUF_CAP_SUPPORTS_REQUESTS (1 << 3)
|
#define V4L2_BUF_CAP_SUPPORTS_REQUESTS (1 << 3)
|
||||||
#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
|
#define V4L2_BUF_CAP_SUPPORTS_ORPHANED_BUFS (1 << 4)
|
||||||
|
#define V4L2_BUF_CAP_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 5)
|
||||||
|
#define V4L2_BUF_CAP_SUPPORTS_MMAP_CACHE_HINTS (1 << 6)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct v4l2_plane - plane info for multi-planar buffers
|
* struct v4l2_plane - plane info for multi-planar buffers
|
||||||
|
@ -1044,6 +1062,8 @@ static __inline__ __u64 v4l2_timeval_to_ns(const struct timeval *tv)
|
||||||
#define V4L2_BUF_FLAG_IN_REQUEST 0x00000080
|
#define V4L2_BUF_FLAG_IN_REQUEST 0x00000080
|
||||||
/* timecode field is valid */
|
/* timecode field is valid */
|
||||||
#define V4L2_BUF_FLAG_TIMECODE 0x00000100
|
#define V4L2_BUF_FLAG_TIMECODE 0x00000100
|
||||||
|
/* Don't return the capture buffer until OUTPUT timestamp changes */
|
||||||
|
#define V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF 0x00000200
|
||||||
/* Buffer is prepared for queuing */
|
/* Buffer is prepared for queuing */
|
||||||
#define V4L2_BUF_FLAG_PREPARED 0x00000400
|
#define V4L2_BUF_FLAG_PREPARED 0x00000400
|
||||||
/* Cache handling flags */
|
/* Cache handling flags */
|
||||||
|
@ -1211,6 +1231,10 @@ struct v4l2_selection {
|
||||||
|
|
||||||
typedef __u64 v4l2_std_id;
|
typedef __u64 v4l2_std_id;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Attention: Keep the V4L2_STD_* bit definitions in sync with
|
||||||
|
* include/dt-bindings/display/sdtv-standards.h SDTV_STD_* bit definitions.
|
||||||
|
*/
|
||||||
/* one bit for each */
|
/* one bit for each */
|
||||||
#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
|
#define V4L2_STD_PAL_B ((v4l2_std_id)0x00000001)
|
||||||
#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
|
#define V4L2_STD_PAL_B1 ((v4l2_std_id)0x00000002)
|
||||||
|
@ -1678,6 +1702,14 @@ struct v4l2_ext_control {
|
||||||
__u8 *p_u8;
|
__u8 *p_u8;
|
||||||
__u16 *p_u16;
|
__u16 *p_u16;
|
||||||
__u32 *p_u32;
|
__u32 *p_u32;
|
||||||
|
struct v4l2_area *p_area;
|
||||||
|
struct v4l2_ctrl_h264_sps *p_h264_sps;
|
||||||
|
struct v4l2_ctrl_h264_pps *p_h264_pps;
|
||||||
|
struct v4l2_ctrl_h264_scaling_matrix *p_h264_scaling_matrix;
|
||||||
|
struct v4l2_ctrl_h264_pred_weights *p_h264_pred_weights;
|
||||||
|
struct v4l2_ctrl_h264_slice_params *p_h264_slice_params;
|
||||||
|
struct v4l2_ctrl_h264_decode_params *p_h264_decode_params;
|
||||||
|
struct v4l2_ctrl_fwht_params *p_fwht_params;
|
||||||
void *ptr;
|
void *ptr;
|
||||||
};
|
};
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
@ -1719,6 +1751,16 @@ enum v4l2_ctrl_type {
|
||||||
V4L2_CTRL_TYPE_U8 = 0x0100,
|
V4L2_CTRL_TYPE_U8 = 0x0100,
|
||||||
V4L2_CTRL_TYPE_U16 = 0x0101,
|
V4L2_CTRL_TYPE_U16 = 0x0101,
|
||||||
V4L2_CTRL_TYPE_U32 = 0x0102,
|
V4L2_CTRL_TYPE_U32 = 0x0102,
|
||||||
|
V4L2_CTRL_TYPE_AREA = 0x0106,
|
||||||
|
|
||||||
|
V4L2_CTRL_TYPE_H264_SPS = 0x0200,
|
||||||
|
V4L2_CTRL_TYPE_H264_PPS = 0x0201,
|
||||||
|
V4L2_CTRL_TYPE_H264_SCALING_MATRIX = 0x0202,
|
||||||
|
V4L2_CTRL_TYPE_H264_SLICE_PARAMS = 0x0203,
|
||||||
|
V4L2_CTRL_TYPE_H264_DECODE_PARAMS = 0x0204,
|
||||||
|
V4L2_CTRL_TYPE_H264_PRED_WEIGHTS = 0x0205,
|
||||||
|
|
||||||
|
V4L2_CTRL_TYPE_FWHT_PARAMS = 0x0220,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
|
/* Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
|
||||||
|
@ -1974,6 +2016,7 @@ struct v4l2_encoder_cmd {
|
||||||
#define V4L2_DEC_CMD_STOP (1)
|
#define V4L2_DEC_CMD_STOP (1)
|
||||||
#define V4L2_DEC_CMD_PAUSE (2)
|
#define V4L2_DEC_CMD_PAUSE (2)
|
||||||
#define V4L2_DEC_CMD_RESUME (3)
|
#define V4L2_DEC_CMD_RESUME (3)
|
||||||
|
#define V4L2_DEC_CMD_FLUSH (4)
|
||||||
|
|
||||||
/* Flags for V4L2_DEC_CMD_START */
|
/* Flags for V4L2_DEC_CMD_START */
|
||||||
#define V4L2_DEC_CMD_START_MUTE_AUDIO (1 << 0)
|
#define V4L2_DEC_CMD_START_MUTE_AUDIO (1 << 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue