mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
600 lines
22 KiB
600 lines
22 KiB
.. SPDX-License-Identifier: GPL-2.0 |
|
|
|
.. include:: <isonum.txt> |
|
|
|
=============================================================== |
|
Intel Image Processing Unit 3 (IPU3) Imaging Unit (ImgU) driver |
|
=============================================================== |
|
|
|
Copyright |copy| 2018 Intel Corporation |
|
|
|
Introduction |
|
============ |
|
|
|
This file documents the Intel IPU3 (3rd generation Image Processing Unit) |
|
Imaging Unit drivers located under drivers/media/pci/intel/ipu3 (CIO2) as well |
|
as under drivers/staging/media/ipu3 (ImgU). |
|
|
|
The Intel IPU3 found in certain Kaby Lake (as well as certain Sky Lake) |
|
platforms (U/Y processor lines) is made up of two parts namely the Imaging Unit |
|
(ImgU) and the CIO2 device (MIPI CSI2 receiver). |
|
|
|
The CIO2 device receives the raw Bayer data from the sensors and outputs the |
|
frames in a format that is specific to the IPU3 (for consumption by the IPU3 |
|
ImgU). The CIO2 driver is available as drivers/media/pci/intel/ipu3/ipu3-cio2* |
|
and is enabled through the CONFIG_VIDEO_IPU3_CIO2 config option. |
|
|
|
The Imaging Unit (ImgU) is responsible for processing images captured |
|
by the IPU3 CIO2 device. The ImgU driver sources can be found under |
|
drivers/staging/media/ipu3 directory. The driver is enabled through the |
|
CONFIG_VIDEO_IPU3_IMGU config option. |
|
|
|
The two driver modules are named ipu3_csi2 and ipu3_imgu, respectively. |
|
|
|
The drivers has been tested on Kaby Lake platforms (U/Y processor lines). |
|
|
|
Both of the drivers implement V4L2, Media Controller and V4L2 sub-device |
|
interfaces. The IPU3 CIO2 driver supports camera sensors connected to the CIO2 |
|
MIPI CSI-2 interfaces through V4L2 sub-device sensor drivers. |
|
|
|
CIO2 |
|
==== |
|
|
|
The CIO2 is represented as a single V4L2 subdev, which provides a V4L2 subdev |
|
interface to the user space. There is a video node for each CSI-2 receiver, |
|
with a single media controller interface for the entire device. |
|
|
|
The CIO2 contains four independent capture channel, each with its own MIPI CSI-2 |
|
receiver and DMA engine. Each channel is modelled as a V4L2 sub-device exposed |
|
to userspace as a V4L2 sub-device node and has two pads: |
|
|
|
.. tabularcolumns:: |p{0.8cm}|p{4.0cm}|p{4.0cm}| |
|
|
|
.. flat-table:: |
|
:header-rows: 1 |
|
|
|
* - Pad |
|
- Direction |
|
- Purpose |
|
|
|
* - 0 |
|
- sink |
|
- MIPI CSI-2 input, connected to the sensor subdev |
|
|
|
* - 1 |
|
- source |
|
- Raw video capture, connected to the V4L2 video interface |
|
|
|
The V4L2 video interfaces model the DMA engines. They are exposed to userspace |
|
as V4L2 video device nodes. |
|
|
|
Capturing frames in raw Bayer format |
|
------------------------------------ |
|
|
|
CIO2 MIPI CSI2 receiver is used to capture frames (in packed raw Bayer format) |
|
from the raw sensors connected to the CSI2 ports. The captured frames are used |
|
as input to the ImgU driver. |
|
|
|
Image processing using IPU3 ImgU requires tools such as raw2pnm [#f1]_, and |
|
yavta [#f2]_ due to the following unique requirements and / or features specific |
|
to IPU3. |
|
|
|
-- The IPU3 CSI2 receiver outputs the captured frames from the sensor in packed |
|
raw Bayer format that is specific to IPU3. |
|
|
|
-- Multiple video nodes have to be operated simultaneously. |
|
|
|
Let us take the example of ov5670 sensor connected to CSI2 port 0, for a |
|
2592x1944 image capture. |
|
|
|
Using the media controller APIs, the ov5670 sensor is configured to send |
|
frames in packed raw Bayer format to IPU3 CSI2 receiver. |
|
|
|
.. code-block:: none |
|
|
|
# This example assumes /dev/media0 as the CIO2 media device |
|
export MDEV=/dev/media0 |
|
|
|
# and that ov5670 sensor is connected to i2c bus 10 with address 0x36 |
|
export SDEV=$(media-ctl -d $MDEV -e "ov5670 10-0036") |
|
|
|
# Establish the link for the media devices using media-ctl [#f3]_ |
|
media-ctl -d $MDEV -l "ov5670:0 -> ipu3-csi2 0:0[1]" |
|
|
|
# Set the format for the media devices |
|
media-ctl -d $MDEV -V "ov5670:0 [fmt:SGRBG10/2592x1944]" |
|
media-ctl -d $MDEV -V "ipu3-csi2 0:0 [fmt:SGRBG10/2592x1944]" |
|
media-ctl -d $MDEV -V "ipu3-csi2 0:1 [fmt:SGRBG10/2592x1944]" |
|
|
|
Once the media pipeline is configured, desired sensor specific settings |
|
(such as exposure and gain settings) can be set, using the yavta tool. |
|
|
|
e.g |
|
|
|
.. code-block:: none |
|
|
|
yavta -w 0x009e0903 444 $SDEV |
|
yavta -w 0x009e0913 1024 $SDEV |
|
yavta -w 0x009e0911 2046 $SDEV |
|
|
|
Once the desired sensor settings are set, frame captures can be done as below. |
|
|
|
e.g |
|
|
|
.. code-block:: none |
|
|
|
yavta --data-prefix -u -c10 -n5 -I -s2592x1944 --file=/tmp/frame-#.bin \ |
|
-f IPU3_SGRBG10 $(media-ctl -d $MDEV -e "ipu3-cio2 0") |
|
|
|
With the above command, 10 frames are captured at 2592x1944 resolution, with |
|
sGRBG10 format and output as IPU3_SGRBG10 format. |
|
|
|
The captured frames are available as /tmp/frame-#.bin files. |
|
|
|
ImgU |
|
==== |
|
|
|
The ImgU is represented as two V4L2 subdevs, each of which provides a V4L2 |
|
subdev interface to the user space. |
|
|
|
Each V4L2 subdev represents a pipe, which can support a maximum of 2 streams. |
|
This helps to support advanced camera features like Continuous View Finder (CVF) |
|
and Snapshot During Video(SDV). |
|
|
|
The ImgU contains two independent pipes, each modelled as a V4L2 sub-device |
|
exposed to userspace as a V4L2 sub-device node. |
|
|
|
Each pipe has two sink pads and three source pads for the following purpose: |
|
|
|
.. tabularcolumns:: |p{0.8cm}|p{4.0cm}|p{4.0cm}| |
|
|
|
.. flat-table:: |
|
:header-rows: 1 |
|
|
|
* - Pad |
|
- Direction |
|
- Purpose |
|
|
|
* - 0 |
|
- sink |
|
- Input raw video stream |
|
|
|
* - 1 |
|
- sink |
|
- Processing parameters |
|
|
|
* - 2 |
|
- source |
|
- Output processed video stream |
|
|
|
* - 3 |
|
- source |
|
- Output viewfinder video stream |
|
|
|
* - 4 |
|
- source |
|
- 3A statistics |
|
|
|
Each pad is connected to a corresponding V4L2 video interface, exposed to |
|
userspace as a V4L2 video device node. |
|
|
|
Device operation |
|
---------------- |
|
|
|
With ImgU, once the input video node ("ipu3-imgu 0/1":0, in |
|
<entity>:<pad-number> format) is queued with buffer (in packed raw Bayer |
|
format), ImgU starts processing the buffer and produces the video output in YUV |
|
format and statistics output on respective output nodes. The driver is expected |
|
to have buffers ready for all of parameter, output and statistics nodes, when |
|
input video node is queued with buffer. |
|
|
|
At a minimum, all of input, main output, 3A statistics and viewfinder |
|
video nodes should be enabled for IPU3 to start image processing. |
|
|
|
Each ImgU V4L2 subdev has the following set of video nodes. |
|
|
|
input, output and viewfinder video nodes |
|
---------------------------------------- |
|
|
|
The frames (in packed raw Bayer format specific to the IPU3) received by the |
|
input video node is processed by the IPU3 Imaging Unit and are output to 2 video |
|
nodes, with each targeting a different purpose (main output and viewfinder |
|
output). |
|
|
|
Details onand the Bayer format specific to the IPU3 can be found in |
|
:ref:`v4l2-pix-fmt-ipu3-sbggr10`. |
|
|
|
The driver supports V4L2 Video Capture Interface as defined at :ref:`devices`. |
|
|
|
Only the multi-planar API is supported. More details can be found at |
|
:ref:`planar-apis`. |
|
|
|
Parameters video node |
|
--------------------- |
|
|
|
The parameters video node receives the ImgU algorithm parameters that are used |
|
to configure how the ImgU algorithms process the image. |
|
|
|
Details on processing parameters specific to the IPU3 can be found in |
|
:ref:`v4l2-meta-fmt-params`. |
|
|
|
3A statistics video node |
|
------------------------ |
|
|
|
3A statistics video node is used by the ImgU driver to output the 3A (auto |
|
focus, auto exposure and auto white balance) statistics for the frames that are |
|
being processed by the ImgU to user space applications. User space applications |
|
can use this statistics data to compute the desired algorithm parameters for |
|
the ImgU. |
|
|
|
Configuring the Intel IPU3 |
|
========================== |
|
|
|
The IPU3 ImgU pipelines can be configured using the Media Controller, defined at |
|
:ref:`media_controller`. |
|
|
|
Running mode and firmware binary selection |
|
------------------------------------------ |
|
|
|
ImgU works based on firmware, currently the ImgU firmware support run 2 pipes |
|
in time-sharing with single input frame data. Each pipe can run at certain mode |
|
- "VIDEO" or "STILL", "VIDEO" mode is commonly used for video frames capture, |
|
and "STILL" is used for still frame capture. However, you can also select |
|
"VIDEO" to capture still frames if you want to capture images with less system |
|
load and power. For "STILL" mode, ImgU will try to use smaller BDS factor and |
|
output larger bayer frame for further YUV processing than "VIDEO" mode to get |
|
high quality images. Besides, "STILL" mode need XNR3 to do noise reduction, |
|
hence "STILL" mode will need more power and memory bandwidth than "VIDEO" mode. |
|
TNR will be enabled in "VIDEO" mode and bypassed by "STILL" mode. ImgU is |
|
running at "VIDEO" mode by default, the user can use v4l2 control |
|
V4L2_CID_INTEL_IPU3_MODE (currently defined in |
|
drivers/staging/media/ipu3/include/uapi/intel-ipu3.h) to query and set the |
|
running mode. For user, there is no difference for buffer queueing between the |
|
"VIDEO" and "STILL" mode, mandatory input and main output node should be |
|
enabled and buffers need be queued, the statistics and the view-finder queues |
|
are optional. |
|
|
|
The firmware binary will be selected according to current running mode, such log |
|
"using binary if_to_osys_striped " or "using binary if_to_osys_primary_striped" |
|
could be observed if you enable the ImgU dynamic debug, the binary |
|
if_to_osys_striped is selected for "VIDEO" and the binary |
|
"if_to_osys_primary_striped" is selected for "STILL". |
|
|
|
|
|
Processing the image in raw Bayer format |
|
---------------------------------------- |
|
|
|
Configuring ImgU V4L2 subdev for image processing |
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
The ImgU V4L2 subdevs have to be configured with media controller APIs to have |
|
all the video nodes setup correctly. |
|
|
|
Let us take "ipu3-imgu 0" subdev as an example. |
|
|
|
.. code-block:: none |
|
|
|
media-ctl -d $MDEV -r |
|
media-ctl -d $MDEV -l "ipu3-imgu 0 input":0 -> "ipu3-imgu 0":0[1] |
|
media-ctl -d $MDEV -l "ipu3-imgu 0":2 -> "ipu3-imgu 0 output":0[1] |
|
media-ctl -d $MDEV -l "ipu3-imgu 0":3 -> "ipu3-imgu 0 viewfinder":0[1] |
|
media-ctl -d $MDEV -l "ipu3-imgu 0":4 -> "ipu3-imgu 0 3a stat":0[1] |
|
|
|
Also the pipe mode of the corresponding V4L2 subdev should be set as desired |
|
(e.g 0 for video mode or 1 for still mode) through the control id 0x009819a1 as |
|
below. |
|
|
|
.. code-block:: none |
|
|
|
yavta -w "0x009819A1 1" /dev/v4l-subdev7 |
|
|
|
Certain hardware blocks in ImgU pipeline can change the frame resolution by |
|
cropping or scaling, these hardware blocks include Input Feeder(IF), Bayer Down |
|
Scaler (BDS) and Geometric Distortion Correction (GDC). |
|
There is also a block which can change the frame resolution - YUV Scaler, it is |
|
only applicable to the secondary output. |
|
|
|
RAW Bayer frames go through these ImgU pipeline hardware blocks and the final |
|
processed image output to the DDR memory. |
|
|
|
.. kernel-figure:: ipu3_rcb.svg |
|
:alt: ipu3 resolution blocks image |
|
|
|
IPU3 resolution change hardware blocks |
|
|
|
**Input Feeder** |
|
|
|
Input Feeder gets the Bayer frame data from the sensor, it can enable cropping |
|
of lines and columns from the frame and then store pixels into device's internal |
|
pixel buffer which are ready to readout by following blocks. |
|
|
|
**Bayer Down Scaler** |
|
|
|
Bayer Down Scaler is capable of performing image scaling in Bayer domain, the |
|
downscale factor can be configured from 1X to 1/4X in each axis with |
|
configuration steps of 0.03125 (1/32). |
|
|
|
**Geometric Distortion Correction** |
|
|
|
Geometric Distortion Correction is used to perform correction of distortions |
|
and image filtering. It needs some extra filter and envelope padding pixels to |
|
work, so the input resolution of GDC should be larger than the output |
|
resolution. |
|
|
|
**YUV Scaler** |
|
|
|
YUV Scaler which similar with BDS, but it is mainly do image down scaling in |
|
YUV domain, it can support up to 1/12X down scaling, but it can not be applied |
|
to the main output. |
|
|
|
The ImgU V4L2 subdev has to be configured with the supported resolutions in all |
|
the above hardware blocks, for a given input resolution. |
|
For a given supported resolution for an input frame, the Input Feeder, Bayer |
|
Down Scaler and GDC blocks should be configured with the supported resolutions |
|
as each hardware block has its own alignment requirement. |
|
|
|
You must configure the output resolution of the hardware blocks smartly to meet |
|
the hardware requirement along with keeping the maximum field of view. The |
|
intermediate resolutions can be generated by specific tool - |
|
|
|
https://github.com/intel/intel-ipu3-pipecfg |
|
|
|
This tool can be used to generate intermediate resolutions. More information can |
|
be obtained by looking at the following IPU3 ImgU configuration table. |
|
|
|
https://chromium.googlesource.com/chromiumos/overlays/board-overlays/+/master |
|
|
|
Under baseboard-poppy/media-libs/cros-camera-hal-configs-poppy/files/gcss |
|
directory, graph_settings_ov5670.xml can be used as an example. |
|
|
|
The following steps prepare the ImgU pipeline for the image processing. |
|
|
|
1. The ImgU V4L2 subdev data format should be set by using the |
|
VIDIOC_SUBDEV_S_FMT on pad 0, using the GDC width and height obtained above. |
|
|
|
2. The ImgU V4L2 subdev cropping should be set by using the |
|
VIDIOC_SUBDEV_S_SELECTION on pad 0, with V4L2_SEL_TGT_CROP as the target, |
|
using the input feeder height and width. |
|
|
|
3. The ImgU V4L2 subdev composing should be set by using the |
|
VIDIOC_SUBDEV_S_SELECTION on pad 0, with V4L2_SEL_TGT_COMPOSE as the target, |
|
using the BDS height and width. |
|
|
|
For the ov5670 example, for an input frame with a resolution of 2592x1944 |
|
(which is input to the ImgU subdev pad 0), the corresponding resolutions |
|
for input feeder, BDS and GDC are 2592x1944, 2592x1944 and 2560x1920 |
|
respectively. |
|
|
|
Once this is done, the received raw Bayer frames can be input to the ImgU |
|
V4L2 subdev as below, using the open source application v4l2n [#f1]_. |
|
|
|
For an image captured with 2592x1944 [#f4]_ resolution, with desired output |
|
resolution as 2560x1920 and viewfinder resolution as 2560x1920, the following |
|
v4l2n command can be used. This helps process the raw Bayer frames and produces |
|
the desired results for the main output image and the viewfinder output, in NV12 |
|
format. |
|
|
|
.. code-block:: none |
|
|
|
v4l2n --pipe=4 --load=/tmp/frame-#.bin --open=/dev/video4 |
|
--fmt=type:VIDEO_OUTPUT_MPLANE,width=2592,height=1944,pixelformat=0X47337069 \ |
|
--reqbufs=type:VIDEO_OUTPUT_MPLANE,count:1 --pipe=1 \ |
|
--output=/tmp/frames.out --open=/dev/video5 \ |
|
--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12 \ |
|
--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=2 \ |
|
--output=/tmp/frames.vf --open=/dev/video6 \ |
|
--fmt=type:VIDEO_CAPTURE_MPLANE,width=2560,height=1920,pixelformat=NV12 \ |
|
--reqbufs=type:VIDEO_CAPTURE_MPLANE,count:1 --pipe=3 --open=/dev/video7 \ |
|
--output=/tmp/frames.3A --fmt=type:META_CAPTURE,? \ |
|
--reqbufs=count:1,type:META_CAPTURE --pipe=1,2,3,4 --stream=5 |
|
|
|
You can also use yavta [#f2]_ command to do same thing as above: |
|
|
|
.. code-block:: none |
|
|
|
yavta --data-prefix -Bcapture-mplane -c10 -n5 -I -s2592x1944 \ |
|
--file=frame-#.out-f NV12 /dev/video5 & \ |
|
yavta --data-prefix -Bcapture-mplane -c10 -n5 -I -s2592x1944 \ |
|
--file=frame-#.vf -f NV12 /dev/video6 & \ |
|
yavta --data-prefix -Bmeta-capture -c10 -n5 -I \ |
|
--file=frame-#.3a /dev/video7 & \ |
|
yavta --data-prefix -Boutput-mplane -c10 -n5 -I -s2592x1944 \ |
|
--file=/tmp/frame-in.cio2 -f IPU3_SGRBG10 /dev/video4 |
|
|
|
where /dev/video4, /dev/video5, /dev/video6 and /dev/video7 devices point to |
|
input, output, viewfinder and 3A statistics video nodes respectively. |
|
|
|
Converting the raw Bayer image into YUV domain |
|
---------------------------------------------- |
|
|
|
The processed images after the above step, can be converted to YUV domain |
|
as below. |
|
|
|
Main output frames |
|
~~~~~~~~~~~~~~~~~~ |
|
|
|
.. code-block:: none |
|
|
|
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.out /tmp/frames.out.ppm |
|
|
|
where 2560x1920 is output resolution, NV12 is the video format, followed |
|
by input frame and output PNM file. |
|
|
|
Viewfinder output frames |
|
~~~~~~~~~~~~~~~~~~~~~~~~ |
|
|
|
.. code-block:: none |
|
|
|
raw2pnm -x2560 -y1920 -fNV12 /tmp/frames.vf /tmp/frames.vf.ppm |
|
|
|
where 2560x1920 is output resolution, NV12 is the video format, followed |
|
by input frame and output PNM file. |
|
|
|
Example user space code for IPU3 |
|
================================ |
|
|
|
User space code that configures and uses IPU3 is available here. |
|
|
|
https://chromium.googlesource.com/chromiumos/platform/arc-camera/+/master/ |
|
|
|
The source can be located under hal/intel directory. |
|
|
|
Overview of IPU3 pipeline |
|
========================= |
|
|
|
IPU3 pipeline has a number of image processing stages, each of which takes a |
|
set of parameters as input. The major stages of pipelines are shown here: |
|
|
|
.. kernel-render:: DOT |
|
:alt: IPU3 ImgU Pipeline |
|
:caption: IPU3 ImgU Pipeline Diagram |
|
|
|
digraph "IPU3 ImgU" { |
|
node [shape=box] |
|
splines="ortho" |
|
rankdir="LR" |
|
|
|
a [label="Raw pixels"] |
|
b [label="Bayer Downscaling"] |
|
c [label="Optical Black Correction"] |
|
d [label="Linearization"] |
|
e [label="Lens Shading Correction"] |
|
f [label="White Balance / Exposure / Focus Apply"] |
|
g [label="Bayer Noise Reduction"] |
|
h [label="ANR"] |
|
i [label="Demosaicing"] |
|
j [label="Color Correction Matrix"] |
|
k [label="Gamma correction"] |
|
l [label="Color Space Conversion"] |
|
m [label="Chroma Down Scaling"] |
|
n [label="Chromatic Noise Reduction"] |
|
o [label="Total Color Correction"] |
|
p [label="XNR3"] |
|
q [label="TNR"] |
|
r [label="DDR", style=filled, fillcolor=yellow, shape=cylinder] |
|
s [label="YUV Downscaling"] |
|
t [label="DDR", style=filled, fillcolor=yellow, shape=cylinder] |
|
|
|
{ rank=same; a -> b -> c -> d -> e -> f -> g -> h -> i } |
|
{ rank=same; j -> k -> l -> m -> n -> o -> p -> q -> s -> t} |
|
|
|
a -> j [style=invis, weight=10] |
|
i -> j |
|
q -> r |
|
} |
|
|
|
The table below presents a description of the above algorithms. |
|
|
|
======================== ======================================================= |
|
Name Description |
|
======================== ======================================================= |
|
Optical Black Correction Optical Black Correction block subtracts a pre-defined |
|
value from the respective pixel values to obtain better |
|
image quality. |
|
Defined in struct ipu3_uapi_obgrid_param. |
|
Linearization This algo block uses linearization parameters to |
|
address non-linearity sensor effects. The Lookup table |
|
table is defined in |
|
struct ipu3_uapi_isp_lin_vmem_params. |
|
SHD Lens shading correction is used to correct spatial |
|
non-uniformity of the pixel response due to optical |
|
lens shading. This is done by applying a different gain |
|
for each pixel. The gain, black level etc are |
|
configured in struct ipu3_uapi_shd_config_static. |
|
BNR Bayer noise reduction block removes image noise by |
|
applying a bilateral filter. |
|
See struct ipu3_uapi_bnr_static_config for details. |
|
ANR Advanced Noise Reduction is a block based algorithm |
|
that performs noise reduction in the Bayer domain. The |
|
convolution matrix etc can be found in |
|
struct ipu3_uapi_anr_config. |
|
DM Demosaicing converts raw sensor data in Bayer format |
|
into RGB (Red, Green, Blue) presentation. Then add |
|
outputs of estimation of Y channel for following stream |
|
processing by Firmware. The struct is defined as |
|
struct ipu3_uapi_dm_config. |
|
Color Correction Color Correction algo transforms sensor specific color |
|
space to the standard "sRGB" color space. This is done |
|
by applying 3x3 matrix defined in |
|
struct ipu3_uapi_ccm_mat_config. |
|
Gamma correction Gamma correction struct ipu3_uapi_gamma_config is a |
|
basic non-linear tone mapping correction that is |
|
applied per pixel for each pixel component. |
|
CSC Color space conversion transforms each pixel from the |
|
RGB primary presentation to YUV (Y: brightness, |
|
UV: Luminance) presentation. This is done by applying |
|
a 3x3 matrix defined in |
|
struct ipu3_uapi_csc_mat_config |
|
CDS Chroma down sampling |
|
After the CSC is performed, the Chroma Down Sampling |
|
is applied for a UV plane down sampling by a factor |
|
of 2 in each direction for YUV 4:2:0 using a 4x2 |
|
configurable filter struct ipu3_uapi_cds_params. |
|
CHNR Chroma noise reduction |
|
This block processes only the chrominance pixels and |
|
performs noise reduction by cleaning the high |
|
frequency noise. |
|
See struct struct ipu3_uapi_yuvp1_chnr_config. |
|
TCC Total color correction as defined in struct |
|
struct ipu3_uapi_yuvp2_tcc_static_config. |
|
XNR3 eXtreme Noise Reduction V3 is the third revision of |
|
noise reduction algorithm used to improve image |
|
quality. This removes the low frequency noise in the |
|
captured image. Two related structs are being defined, |
|
struct ipu3_uapi_isp_xnr3_params for ISP data memory |
|
and struct ipu3_uapi_isp_xnr3_vmem_params for vector |
|
memory. |
|
TNR Temporal Noise Reduction block compares successive |
|
frames in time to remove anomalies / noise in pixel |
|
values. struct ipu3_uapi_isp_tnr3_vmem_params and |
|
struct ipu3_uapi_isp_tnr3_params are defined for ISP |
|
vector and data memory respectively. |
|
======================== ======================================================= |
|
|
|
Other often encountered acronyms not listed in above table: |
|
|
|
ACC |
|
Accelerator cluster |
|
AWB_FR |
|
Auto white balance filter response statistics |
|
BDS |
|
Bayer downscaler parameters |
|
CCM |
|
Color correction matrix coefficients |
|
IEFd |
|
Image enhancement filter directed |
|
Obgrid |
|
Optical black level compensation |
|
OSYS |
|
Output system configuration |
|
ROI |
|
Region of interest |
|
YDS |
|
Y down sampling |
|
YTM |
|
Y-tone mapping |
|
|
|
A few stages of the pipeline will be executed by firmware running on the ISP |
|
processor, while many others will use a set of fixed hardware blocks also |
|
called accelerator cluster (ACC) to crunch pixel data and produce statistics. |
|
|
|
ACC parameters of individual algorithms, as defined by |
|
struct ipu3_uapi_acc_param, can be chosen to be applied by the user |
|
space through struct struct ipu3_uapi_flags embedded in |
|
struct ipu3_uapi_params structure. For parameters that are configured as |
|
not enabled by the user space, the corresponding structs are ignored by the |
|
driver, in which case the existing configuration of the algorithm will be |
|
preserved. |
|
|
|
References |
|
========== |
|
|
|
.. [#f5] drivers/staging/media/ipu3/include/uapi/intel-ipu3.h |
|
|
|
.. [#f1] https://github.com/intel/nvt |
|
|
|
.. [#f2] http://git.ideasonboard.org/yavta.git |
|
|
|
.. [#f3] http://git.ideasonboard.org/?p=media-ctl.git;a=summary |
|
|
|
.. [#f4] ImgU limitation requires an additional 16x16 for all input resolutions
|
|
|